From 23349a1b84aa42f01d8f6e2e6356bed018233003 Mon Sep 17 00:00:00 2001 From: Eric Wollesen Date: Wed, 19 Feb 2025 16:56:22 -0700 Subject: [PATCH] rename and move alertsDataRepo -> deviceDataForAlertsRepo BACK-2559 --- data/store/mongo/mongo.go | 65 +++++++++++++++++++++++++++++++- data/store/mongo/mongo_alerts.go | 56 --------------------------- 2 files changed, 64 insertions(+), 57 deletions(-) diff --git a/data/store/mongo/mongo.go b/data/store/mongo/mongo.go index c4f2d553c..daf26e896 100644 --- a/data/store/mongo/mongo.go +++ b/data/store/mongo/mongo.go @@ -1,8 +1,19 @@ package mongo import ( + "context" + "time" + + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + "github.com/tidepool-org/platform/alerts" "github.com/tidepool-org/platform/data/store" + "github.com/tidepool-org/platform/data/types/blood/glucose" + "github.com/tidepool-org/platform/data/types/blood/glucose/continuous" + "github.com/tidepool-org/platform/data/types/dosingdecision" + "github.com/tidepool-org/platform/errors" storeStructuredMongo "github.com/tidepool-org/platform/store/structured/mongo" ) @@ -78,6 +89,58 @@ func (s *Store) NewLastCommunicationsRepository() alerts.LastCommunicationsRepos } func (s *Store) NewAlertsDataRepository() alerts.DataRepository { - r := alertsDataRepo(*s.Store.GetRepository("deviceData")) + r := deviceDataForAlertsRepo(*s.Store.GetRepository("deviceData")) return &r } + +type deviceDataForAlertsRepo storeStructuredMongo.Repository + +func (r *deviceDataForAlertsRepo) GetAlertableData(ctx context.Context, + params alerts.GetAlertableDataParams) (*alerts.GetAlertableDataResponse, error) { + + if params.End.IsZero() { + params.End = time.Now() + } + + cursor, err := r.getAlertableData(ctx, params, dosingdecision.Type) + if err != nil { + return nil, err + } + dosingDecisions := []*dosingdecision.DosingDecision{} + if err := cursor.All(ctx, &dosingDecisions); err != nil { + return nil, errors.Wrap(err, "Unable to load alertable dosing documents") + } + cursor, err = r.getAlertableData(ctx, params, continuous.Type) + if err != nil { + return nil, err + } + glucoseData := []*glucose.Glucose{} + if err := cursor.All(ctx, &glucoseData); err != nil { + return nil, errors.Wrap(err, "Unable to load alertable glucose documents") + } + response := &alerts.GetAlertableDataResponse{ + DosingDecisions: dosingDecisions, + Glucose: glucoseData, + } + + return response, nil +} + +func (r *deviceDataForAlertsRepo) getAlertableData(ctx context.Context, + params alerts.GetAlertableDataParams, typ string) (*mongo.Cursor, error) { + + selector := bson.M{ + "_active": true, + "uploadId": params.UploadID, + "type": typ, + "_userId": params.UserID, + "time": bson.M{"$gte": params.Start, "$lte": params.End}, + } + findOptions := options.Find().SetSort(bson.D{{Key: "time", Value: -1}}) + cursor, err := r.Find(ctx, selector, findOptions) + if err != nil { + format := "Unable to find alertable %s data in dataset %s" + return nil, errors.Wrapf(err, format, typ, params.UploadID) + } + return cursor, nil +} diff --git a/data/store/mongo/mongo_alerts.go b/data/store/mongo/mongo_alerts.go index 5887f8f83..fbf25b12f 100644 --- a/data/store/mongo/mongo_alerts.go +++ b/data/store/mongo/mongo_alerts.go @@ -3,16 +3,12 @@ package mongo import ( "context" "fmt" - "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "github.com/tidepool-org/platform/alerts" - "github.com/tidepool-org/platform/data/types/blood/glucose" - "github.com/tidepool-org/platform/data/types/blood/glucose/continuous" - "github.com/tidepool-org/platform/data/types/dosingdecision" "github.com/tidepool-org/platform/errors" structuredmongo "github.com/tidepool-org/platform/store/structured/mongo" ) @@ -106,55 +102,3 @@ func (r *alertsRepo) filter(cfg *alerts.Config) interface{} { {Key: "followedUserId", Value: cfg.FollowedUserID}, } } - -type alertsDataRepo structuredmongo.Repository - -func (d *alertsDataRepo) GetAlertableData(ctx context.Context, - params alerts.GetAlertableDataParams) (*alerts.GetAlertableDataResponse, error) { - - if params.End.IsZero() { - params.End = time.Now() - } - - cursor, err := d.getAlertableData(ctx, params, dosingdecision.Type) - if err != nil { - return nil, err - } - dosingDecisions := []*dosingdecision.DosingDecision{} - if err := cursor.All(ctx, &dosingDecisions); err != nil { - return nil, errors.Wrap(err, "Unable to load alertable dosing documents") - } - cursor, err = d.getAlertableData(ctx, params, continuous.Type) - if err != nil { - return nil, err - } - glucoseData := []*glucose.Glucose{} - if err := cursor.All(ctx, &glucoseData); err != nil { - return nil, errors.Wrap(err, "Unable to load alertable glucose documents") - } - response := &alerts.GetAlertableDataResponse{ - DosingDecisions: dosingDecisions, - Glucose: glucoseData, - } - - return response, nil -} - -func (d *alertsDataRepo) getAlertableData(ctx context.Context, - params alerts.GetAlertableDataParams, typ string) (*mongo.Cursor, error) { - - selector := bson.M{ - "_active": true, - "uploadId": params.UploadID, - "type": typ, - "_userId": params.UserID, - "time": bson.M{"$gte": params.Start, "$lte": params.End}, - } - findOptions := options.Find().SetSort(bson.D{{Key: "time", Value: -1}}) - cursor, err := d.Find(ctx, selector, findOptions) - if err != nil { - format := "Unable to find alertable %s data in dataset %s" - return nil, errors.Wrapf(err, format, typ, params.UploadID) - } - return cursor, nil -}