@@ -3,9 +3,7 @@ package repositories
33import (
44 "context"
55 "fmt"
6- "time"
76
8- "github.com/google/uuid"
97 "go.mongodb.org/mongo-driver/v2/bson"
108 "go.mongodb.org/mongo-driver/v2/mongo"
119 "go.mongodb.org/mongo-driver/v2/mongo/options"
@@ -35,32 +33,14 @@ func NewMongoHeartbeatRepository(
3533 }
3634}
3735
38- type heartbeatDocument struct {
39- ID string `bson:"_id"`
40- Owner string `bson:"owner"`
41- Version string `bson:"version"`
42- Charging bool `bson:"charging"`
43- UserID string `bson:"user_id"`
44- Timestamp time.Time `bson:"timestamp"`
45- }
46-
4736func (repository * mongoHeartbeatRepository ) Store (ctx context.Context , heartbeat * entities.Heartbeat ) error {
4837 ctx , span , _ := repository .tracer .StartWithLogger (ctx , repository .logger )
4938 defer span .End ()
5039
5140 ctx , cancel := context .WithTimeout (ctx , dbOperationDuration )
5241 defer cancel ()
5342
54- doc := heartbeatDocument {
55- ID : heartbeat .ID .String (),
56- Owner : heartbeat .Owner ,
57- Version : heartbeat .Version ,
58- Charging : heartbeat .Charging ,
59- UserID : string (heartbeat .UserID ),
60- Timestamp : heartbeat .Timestamp .UTC (),
61- }
62-
63- _ , err := repository .collection .InsertOne (ctx , doc )
43+ _ , err := repository .collection .InsertOne (ctx , heartbeat )
6444 if err != nil {
6545 msg := fmt .Sprintf ("cannot save heartbeat with ID [%s]" , heartbeat .ID )
6646 return repository .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
@@ -97,20 +77,14 @@ func (repository *mongoHeartbeatRepository) Index(ctx context.Context, userID en
9777 }
9878 defer cursor .Close (ctx )
9979
100- var docs []heartbeatDocument
101- if err = cursor .All (ctx , & docs ); err != nil {
80+ var heartbeats []entities. Heartbeat
81+ if err = cursor .All (ctx , & heartbeats ); err != nil {
10282 msg := fmt .Sprintf ("cannot decode heartbeats for owner [%s]" , owner )
10383 return nil , repository .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
10484 }
10585
106- heartbeats := make ([]entities.Heartbeat , 0 , len (docs ))
107- for _ , doc := range docs {
108- hb , convertErr := docToHeartbeat (doc )
109- if convertErr != nil {
110- msg := fmt .Sprintf ("cannot convert heartbeat document for owner [%s]" , owner )
111- return nil , repository .tracer .WrapErrorSpan (span , stacktrace .Propagate (convertErr , msg ))
112- }
113- heartbeats = append (heartbeats , * hb )
86+ if heartbeats == nil {
87+ heartbeats = make ([]entities.Heartbeat , 0 )
11488 }
11589
11690 return & heartbeats , nil
@@ -130,8 +104,8 @@ func (repository *mongoHeartbeatRepository) Last(ctx context.Context, userID ent
130104
131105 opts := options .FindOne ().SetSort (bson.D {{"timestamp" , - 1 }})
132106
133- var doc heartbeatDocument
134- err := repository .collection .FindOne (ctx , filter , opts ).Decode (& doc )
107+ var heartbeat entities. Heartbeat
108+ err := repository .collection .FindOne (ctx , filter , opts ).Decode (& heartbeat )
135109 if err == mongo .ErrNoDocuments {
136110 msg := fmt .Sprintf ("heartbeat with userID [%s] and owner [%s] does not exist" , userID , owner )
137111 return nil , repository .tracer .WrapErrorSpan (span , stacktrace .PropagateWithCode (err , ErrCodeNotFound , msg ))
@@ -141,12 +115,7 @@ func (repository *mongoHeartbeatRepository) Last(ctx context.Context, userID ent
141115 return nil , repository .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
142116 }
143117
144- heartbeat , err := docToHeartbeat (doc )
145- if err != nil {
146- return nil , repository .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , "cannot convert heartbeat document" ))
147- }
148-
149- return heartbeat , nil
118+ return & heartbeat , nil
150119}
151120
152121func (repository * mongoHeartbeatRepository ) DeleteAllForUser (ctx context.Context , userID entities.UserID ) error {
@@ -164,18 +133,3 @@ func (repository *mongoHeartbeatRepository) DeleteAllForUser(ctx context.Context
164133
165134 return nil
166135}
167-
168- func docToHeartbeat (doc heartbeatDocument ) (* entities.Heartbeat , error ) {
169- id , err := uuid .Parse (doc .ID )
170- if err != nil {
171- return nil , stacktrace .Propagate (err , fmt .Sprintf ("cannot parse heartbeat ID [%s]" , doc .ID ))
172- }
173- return & entities.Heartbeat {
174- ID : id ,
175- Owner : doc .Owner ,
176- Version : doc .Version ,
177- Charging : doc .Charging ,
178- UserID : entities .UserID (doc .UserID ),
179- Timestamp : doc .Timestamp ,
180- }, nil
181- }
0 commit comments