diff --git a/pkg/datastore/datastore.go b/pkg/datastore/datastore.go index 4df0c9f..3bb704e 100644 --- a/pkg/datastore/datastore.go +++ b/pkg/datastore/datastore.go @@ -40,6 +40,7 @@ type Mapfixes interface { IfStatusThenUpdateAndGet(ctx context.Context, id int64, statuses []model.MapfixStatus, values OptionalMap) (model.Mapfix, error) Delete(ctx context.Context, id int64) error List(ctx context.Context, filters OptionalMap, page model.Page, sort ListSort) ([]model.Mapfix, error) + ListWithTotal(ctx context.Context, filters OptionalMap, page model.Page, sort ListSort) (int64, []model.Mapfix, error) } type Operations interface { @@ -59,6 +60,7 @@ type Submissions interface { IfStatusThenUpdateAndGet(ctx context.Context, id int64, statuses []model.SubmissionStatus, values OptionalMap) (model.Submission, error) Delete(ctx context.Context, id int64) error List(ctx context.Context, filters OptionalMap, page model.Page, sort ListSort) ([]model.Submission, error) + ListWithTotal(ctx context.Context, filters OptionalMap, page model.Page, sort ListSort) (int64, []model.Submission, error) } type Scripts interface { diff --git a/pkg/datastore/gormstore/mapfixes.go b/pkg/datastore/gormstore/mapfixes.go index d80067e..50f4a05 100644 --- a/pkg/datastore/gormstore/mapfixes.go +++ b/pkg/datastore/gormstore/mapfixes.go @@ -130,3 +130,19 @@ func (env *Mapfixes) List(ctx context.Context, filters datastore.OptionalMap, pa return maps, nil } + +func (env *Mapfixes) ListWithTotal(ctx context.Context, filters datastore.OptionalMap, page model.Page, sort datastore.ListSort) (int64, []model.Mapfix, error) { + // grab page items + maps, err := env.List(ctx, filters, page, sort) + if err != nil{ + return 0, nil, err + } + + // count total with filters + var total int64 + if err := env.db.Model(&model.Mapfix{}).Where(filters.Map()).Count(&total).Error; err != nil { + return 0, nil, err + } + + return total, maps, nil +} diff --git a/pkg/datastore/gormstore/submissions.go b/pkg/datastore/gormstore/submissions.go index dc384c6..5791819 100644 --- a/pkg/datastore/gormstore/submissions.go +++ b/pkg/datastore/gormstore/submissions.go @@ -130,3 +130,19 @@ func (env *Submissions) List(ctx context.Context, filters datastore.OptionalMap, return maps, nil } + +func (env *Submissions) ListWithTotal(ctx context.Context, filters datastore.OptionalMap, page model.Page, sort datastore.ListSort) (int64, []model.Submission, error) { + // grab page items + maps, err := env.List(ctx, filters, page, sort) + if err != nil{ + return 0, nil, err + } + + // count total with filters + var total int64 + if err := env.db.Model(&model.Submission{}).Where(filters.Map()).Count(&total).Error; err != nil { + return 0, nil, err + } + + return total, maps, nil +} diff --git a/pkg/service/mapfixes.go b/pkg/service/mapfixes.go index d81f7fe..3c102b9 100644 --- a/pkg/service/mapfixes.go +++ b/pkg/service/mapfixes.go @@ -160,7 +160,7 @@ func (svc *Service) GetMapfix(ctx context.Context, params api.GetMapfixParams) ( // Get list of mapfixes. // // GET /mapfixes -func (svc *Service) ListMapfixes(ctx context.Context, params api.ListMapfixesParams) ([]api.Mapfix, error) { +func (svc *Service) ListMapfixes(ctx context.Context, params api.ListMapfixesParams) (*api.Mapfixes, error) { filter := datastore.Optional() if params.DisplayName.IsSet(){ @@ -175,7 +175,7 @@ func (svc *Service) ListMapfixes(ctx context.Context, params api.ListMapfixesPar sort := datastore.ListSort(params.Sort.Or(int32(datastore.ListSortDisabled))) - items, err := svc.DB.Mapfixes().List(ctx, filter, model.Page{ + total, items, err := svc.DB.Mapfixes().ListWithTotal(ctx, filter, model.Page{ Number: params.Page, Size: params.Limit, },sort) @@ -183,9 +183,10 @@ func (svc *Service) ListMapfixes(ctx context.Context, params api.ListMapfixesPar return nil, err } - var resp []api.Mapfix + var resp api.Mapfixes + resp.Total=total for _, item := range items { - resp = append(resp, api.Mapfix{ + resp.Mapfixes = append(resp.Mapfixes, api.Mapfix{ ID: item.ID, DisplayName: item.DisplayName, Creator: item.Creator, @@ -201,7 +202,7 @@ func (svc *Service) ListMapfixes(ctx context.Context, params api.ListMapfixesPar }) } - return resp, nil + return &resp, nil } // PatchMapfixCompleted implements patchMapfixCompleted operation. diff --git a/pkg/service/submissions.go b/pkg/service/submissions.go index cca0206..4b2bdc0 100644 --- a/pkg/service/submissions.go +++ b/pkg/service/submissions.go @@ -149,7 +149,7 @@ func (svc *Service) GetSubmission(ctx context.Context, params api.GetSubmissionP // Get list of submissions. // // GET /submissions -func (svc *Service) ListSubmissions(ctx context.Context, params api.ListSubmissionsParams) ([]api.Submission, error) { +func (svc *Service) ListSubmissions(ctx context.Context, params api.ListSubmissionsParams) (*api.Submissions, error) { filter := datastore.Optional() if params.DisplayName.IsSet(){ @@ -164,7 +164,7 @@ func (svc *Service) ListSubmissions(ctx context.Context, params api.ListSubmissi sort := datastore.ListSort(params.Sort.Or(int32(datastore.ListSortDisabled))) - items, err := svc.DB.Submissions().List(ctx, filter, model.Page{ + total, items, err := svc.DB.Submissions().ListWithTotal(ctx, filter, model.Page{ Number: params.Page, Size: params.Limit, },sort) @@ -172,9 +172,10 @@ func (svc *Service) ListSubmissions(ctx context.Context, params api.ListSubmissi return nil, err } - var resp []api.Submission + var resp api.Submissions + resp.Total=total for _, item := range items { - resp = append(resp, api.Submission{ + resp.Submissions = append(resp.Submissions, api.Submission{ ID: item.ID, DisplayName: item.DisplayName, Creator: item.Creator, @@ -190,7 +191,7 @@ func (svc *Service) ListSubmissions(ctx context.Context, params api.ListSubmissi }) } - return resp, nil + return &resp, nil } // PatchSubmissionCompleted implements patchSubmissionCompleted operation.