Switch to rh package for handling record paging
This commit is contained in:
@@ -23,6 +23,7 @@ type (
|
||||
|
||||
Report(module *types.Module, metrics, dimensions, filter string) (results interface{}, err error)
|
||||
Find(module *types.Module, filter types.RecordFilter) (set types.RecordSet, f types.RecordFilter, err error)
|
||||
Export(module *types.Module, filter types.RecordFilter) (set types.RecordSet, err error)
|
||||
|
||||
Create(record *types.Record) (*types.Record, error)
|
||||
Update(record *types.Record) (*types.Record, error)
|
||||
@@ -117,7 +118,7 @@ func (r record) Report(module *types.Module, metrics, dimensions, filter string)
|
||||
func (r record) Find(module *types.Module, filter types.RecordFilter) (set types.RecordSet, f types.RecordFilter, err error) {
|
||||
var query squirrel.SelectBuilder
|
||||
f = filter
|
||||
f.PerPage = rh.NormalizePerPage(f.PerPage, 5, 100, 50)
|
||||
f.PageFilter.NormalizePerPageWithDefaults()
|
||||
|
||||
query, err = r.buildQuery(module, filter)
|
||||
if err != nil {
|
||||
@@ -128,10 +129,26 @@ func (r record) Find(module *types.Module, filter types.RecordFilter) (set types
|
||||
return
|
||||
}
|
||||
|
||||
return set, f, rh.FetchPaged(r.db(), query.Columns(r.columns()...), f.Page, f.PerPage, &set)
|
||||
}
|
||||
|
||||
// Export ignores paging and does not return filter
|
||||
//
|
||||
// @todo optimize and include value loading
|
||||
func (r record) Export(module *types.Module, filter types.RecordFilter) (set types.RecordSet, err error) {
|
||||
filter.PerPage = 0
|
||||
filter.Page = 0
|
||||
|
||||
query, err := r.buildQuery(module, filter)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Assemble SQL for fetching record (where + sorting + paging)...
|
||||
query = query.
|
||||
Columns(r.columns()...)
|
||||
return set, f, r.fetchPaged(&set, query, f.Page, f.PerPage)
|
||||
|
||||
return set, rh.FetchAll(r.db(), query, &set)
|
||||
}
|
||||
|
||||
func (r record) buildQuery(module *types.Module, f types.RecordFilter) (query squirrel.SelectBuilder, err error) {
|
||||
|
||||
@@ -44,6 +44,7 @@ type (
|
||||
|
||||
Report(namespaceID, moduleID uint64, metrics, dimensions, filter string) (interface{}, error)
|
||||
Find(filter types.RecordFilter) (set types.RecordSet, f types.RecordFilter, err error)
|
||||
Export(types.RecordFilter, Encoder) error
|
||||
|
||||
Create(record *types.Record) (*types.Record, error)
|
||||
Update(record *types.Record) (*types.Record, error)
|
||||
@@ -52,6 +53,10 @@ type (
|
||||
|
||||
// Fields(module *types.Module, record *types.Record) ([]*types.RecordValue, error)
|
||||
}
|
||||
|
||||
Encoder interface {
|
||||
Record(*types.Record) error
|
||||
}
|
||||
)
|
||||
|
||||
func Record() RecordService {
|
||||
@@ -149,6 +154,27 @@ func (svc record) Find(filter types.RecordFilter) (set types.RecordSet, f types.
|
||||
return
|
||||
}
|
||||
|
||||
// Export returns all records
|
||||
//
|
||||
// @todo better value handling
|
||||
func (svc record) Export(filter types.RecordFilter, enc Encoder) error {
|
||||
m, err := svc.loadModule(filter.NamespaceID, filter.ModuleID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
set, err := svc.recordRepo.Export(m, filter)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = svc.preloadValues(m, set...); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return set.Walk(enc.Record)
|
||||
}
|
||||
|
||||
func (svc record) Create(mod *types.Record) (r *types.Record, err error) {
|
||||
if mod.NamespaceID == 0 {
|
||||
return nil, ErrNamespaceRequired
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/internal/permissions"
|
||||
"github.com/cortezaproject/corteza-server/pkg/rh"
|
||||
)
|
||||
|
||||
type (
|
||||
@@ -29,10 +30,10 @@ type (
|
||||
ModuleID uint64 `json:"moduleID,string"`
|
||||
NamespaceID uint64 `json:"namespaceID,string"`
|
||||
Filter string `json:"query"`
|
||||
Page uint `json:"page"`
|
||||
PerPage uint `json:"perPage"`
|
||||
Sort string `json:"sort"`
|
||||
Count uint `json:"count"`
|
||||
|
||||
// Standard paging fields & helpers
|
||||
rh.PageFilter
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user