3
0

Add support for fetching record-pages only, change behavior of a /page/tree endpoint

/page/tree now returns only non-module (non-record) pages
/page endpoint now accepts optional recordPagesOnly param
This commit is contained in:
Denis Arh
2018-12-02 07:15:40 +01:00
parent 97f24cee3e
commit fde2b16db7
6 changed files with 41 additions and 14 deletions

View File

@@ -96,7 +96,7 @@
"type": "uint64",
"name": "moduleID",
"required": false,
"title": "Module ID (optional)"
"title": "Module ID"
},
{
"type": "string",
@@ -145,7 +145,7 @@
"name": "tree",
"path": "/tree",
"method": "GET",
"title": "Get page all pages, hierarchically",
"title": "Get page all (non-record) pages, hierarchically",
"parameters": {}
},
{

View File

@@ -41,7 +41,7 @@
{
"name": "moduleID",
"required": false,
"title": "Module ID (optional)",
"title": "Module ID",
"type": "uint64"
},
{
@@ -90,7 +90,7 @@
{
"Name": "tree",
"Method": "GET",
"Title": "Get page all pages, hierarchically",
"Title": "Get page all (non-record) pages, hierarchically",
"Path": "/tree",
"Parameters": {}
},

View File

@@ -15,7 +15,8 @@ type (
FindByID(id uint64) (*types.Page, error)
FindByModuleID(id uint64) (*types.Page, error)
FindBySelfID(selfID uint64) (types.PageSet, error)
FindAll() (types.PageSet, error)
Find() (types.PageSet, error)
FindRecordPages() (types.PageSet, error)
Create(mod *types.Page) (*types.Page, error)
Update(mod *types.Page) (*types.Page, error)
@@ -55,6 +56,10 @@ func (r *page) FindByModuleID(id uint64) (*types.Page, error) {
return page, nil
}
func (r *page) FindRecordPages() (set types.PageSet, err error) {
return set, r.db().Select(&set, "SELECT * FROM crm_page WHERE module_id > 0")
}
func (r *page) FindBySelfID(selfID uint64) (types.PageSet, error) {
pages := types.PageSet{}
if err := r.db().Select(&pages, "SELECT * FROM crm_page WHERE self_id = ? ORDER BY weight ASC", selfID); err != nil {
@@ -63,9 +68,9 @@ func (r *page) FindBySelfID(selfID uint64) (types.PageSet, error) {
return pages, nil
}
func (r *page) FindAll() (types.PageSet, error) {
pages := types.PageSet{}
return pages, r.db().Select(&pages, "SELECT * FROM crm_page ORDER BY self_id, weight ASC")
// Find returns all of non-record pages
func (r *page) Find() (set types.PageSet, err error) {
return set, r.db().Select(&set, "SELECT * FROM crm_page WHERE module_id = 0 ORDER BY self_id, weight ASC")
}
func (r *page) Reorder(selfID uint64, pageIDs []uint64) error {

View File

@@ -26,6 +26,7 @@ type (
FindByModuleID(moduleID uint64) (*types.Page, error)
FindBySelfID(selfID uint64) (pages types.PageSet, err error)
Tree() (pages types.PageSet, err error)
FindRecordPages() (pages types.PageSet, err error)
Create(page *types.Page) (*types.Page, error)
Update(page *types.Page) (*types.Page, error)
@@ -89,14 +90,13 @@ func (s *page) Tree() (pages types.PageSet, err error) {
var tree types.PageSet
return tree, s.db.Transaction(func() (err error) {
if pages, err = s.pageRepo.FindAll(); err != nil {
if pages, err = s.pageRepo.Find(); err != nil {
return
}
if err = s.preloadAll(pages); err != nil {
return
}
// No preloading - we do not need (or should have) any modules
// associated with us
_ = pages.Walk(func(p *types.Page) error {
if p.SelfID == 0 {
tree = append(tree, p)
@@ -117,6 +117,20 @@ func (s *page) Tree() (pages types.PageSet, err error) {
})
}
func (s *page) FindRecordPages() (pages types.PageSet, err error) {
return pages, s.db.Transaction(func() (err error) {
if pages, err = s.pageRepo.FindRecordPages(); err != nil {
return
}
if err = s.preloadAll(pages); err != nil {
return
}
return nil
})
}
func (s *page) Reorder(selfID uint64, pageIDs []uint64) error {
return s.pageRepo.Reorder(selfID, pageIDs)
}

View File

@@ -90,6 +90,14 @@ func TestPage(t *testing.T) {
prevPageCount = len(ms)
}
// fetch all record pages
{
ms, err := repository.FindRecordPages()
assert(t, err == nil, "Error when retrieving pages: %+v", err)
assert(t, len(ms) >= 1, "Expected at least one page, got %d", len(ms))
prevPageCount = len(ms)
}
// fetch all pages
{
ms, err := repository.FindBySelfID(m.ID)

View File

@@ -430,7 +430,7 @@ CRM module pages
| Parameter | Type | Method | Description | Default | Required? |
| --------- | ---- | ------ | ----------- | ------- | --------- |
| selfID | uint64 | POST | Parent Page ID | N/A | NO |
| moduleID | uint64 | POST | Module ID (optional) | N/A | NO |
| moduleID | uint64 | POST | Module ID | N/A | NO |
| title | string | POST | Title | N/A | YES |
| description | string | POST | Description | N/A | NO |
| visible | bool | POST | Visible in navigation | N/A | NO |
@@ -450,7 +450,7 @@ CRM module pages
| --------- | ---- | ------ | ----------- | ------- | --------- |
| pageID | uint64 | PATH | Page ID | N/A | YES |
## Get page all pages, hierarchically
## Get page all (non-record) pages, hierarchically
#### Method