package web_api import ( "context" "git.itzana.me/strafesnet/maps-service/pkg/api" "git.itzana.me/strafesnet/maps-service/pkg/datastore" "git.itzana.me/strafesnet/maps-service/pkg/model" "git.itzana.me/strafesnet/maps-service/pkg/service" ) // GET /stats func (svc *Service) GetStats(ctx context.Context) (*api.Stats, error) { // Get total submissions count totalSubmissions, _, err := svc.inner.ListSubmissionsWithTotal(ctx, service.NewSubmissionFilter(), model.Page{ Number: 1, Size: 0, // We only want the count, not the items }, datastore.ListSortDisabled) if err != nil { return nil, err } // Get total mapfixes count totalMapfixes, _, err := svc.inner.ListMapfixesWithTotal(ctx, service.NewMapfixFilter(), model.Page{ Number: 1, Size: 0, // We only want the count, not the items }, datastore.ListSortDisabled) if err != nil { return nil, err } // Get released submissions count releasedSubmissionsFilter := service.NewSubmissionFilter() releasedSubmissionsFilter.SetStatuses([]model.SubmissionStatus{model.SubmissionStatusReleased}) releasedSubmissions, _, err := svc.inner.ListSubmissionsWithTotal(ctx, releasedSubmissionsFilter, model.Page{ Number: 1, Size: 0, }, datastore.ListSortDisabled) if err != nil { return nil, err } // Get released mapfixes count releasedMapfixesFilter := service.NewMapfixFilter() releasedMapfixesFilter.SetStatuses([]model.MapfixStatus{model.MapfixStatusReleased}) releasedMapfixes, _, err := svc.inner.ListMapfixesWithTotal(ctx, releasedMapfixesFilter, model.Page{ Number: 1, Size: 0, }, datastore.ListSortDisabled) if err != nil { return nil, err } // Get submitted submissions count (under review) submittedSubmissionsFilter := service.NewSubmissionFilter() submittedSubmissionsFilter.SetStatuses([]model.SubmissionStatus{ model.SubmissionStatusUnderConstruction, model.SubmissionStatusChangesRequested, model.SubmissionStatusSubmitting, model.SubmissionStatusSubmitted, model.SubmissionStatusAcceptedUnvalidated, model.SubmissionStatusValidating, model.SubmissionStatusValidated, model.SubmissionStatusUploading, model.SubmissionStatusUploaded, }) submittedSubmissions, _, err := svc.inner.ListSubmissionsWithTotal(ctx, submittedSubmissionsFilter, model.Page{ Number: 1, Size: 0, }, datastore.ListSortDisabled) if err != nil { return nil, err } // Get submitted mapfixes count (under review) submittedMapfixesFilter := service.NewMapfixFilter() submittedMapfixesFilter.SetStatuses([]model.MapfixStatus{ model.MapfixStatusUnderConstruction, model.MapfixStatusChangesRequested, model.MapfixStatusSubmitting, model.MapfixStatusSubmitted, model.MapfixStatusAcceptedUnvalidated, model.MapfixStatusValidating, model.MapfixStatusValidated, model.MapfixStatusUploading, model.MapfixStatusUploaded, model.MapfixStatusReleasing, }) submittedMapfixes, _, err := svc.inner.ListMapfixesWithTotal(ctx, submittedMapfixesFilter, model.Page{ Number: 1, Size: 0, }, datastore.ListSortDisabled) if err != nil { return nil, err } return &api.Stats{ TotalSubmissions: totalSubmissions, TotalMapfixes: totalMapfixes, ReleasedSubmissions: releasedSubmissions, ReleasedMapfixes: releasedMapfixes, SubmittedSubmissions: submittedSubmissions, SubmittedMapfixes: submittedMapfixes, }, nil }