@@ -11,11 +11,10 @@ import (
1111 "github.com/gin-contrib/sessions"
1212 "github.com/gin-gonic/gin"
1313 "github.com/go-playground/validator/v10"
14- "go.mongodb.org/mongo-driver/bson"
15- "go.mongodb.org/mongo-driver/bson/primitive"
16- "go.mongodb.org/mongo-driver/mongo"
17- "go.mongodb.org/mongo-driver/mongo/options"
18- "go.mongodb.org/mongo-driver/mongo/writeconcern"
14+ "go.mongodb.org/mongo-driver/v2/bson"
15+ "go.mongodb.org/mongo-driver/v2/mongo"
16+ "go.mongodb.org/mongo-driver/v2/mongo/options"
17+ "go.mongodb.org/mongo-driver/v2/mongo/writeconcern"
1918 "go.uber.org/zap"
2019)
2120
@@ -146,15 +145,15 @@ func (handler *Homes) PostHome(c *gin.Context) {
146145
147146 // create a Home document object
148147 var home models.Home
149- home .ID = primitive .NewObjectID ()
148+ home .ID = bson .NewObjectID ()
150149 home .Name = newHome .Name
151150 home .Location = newHome .Location
152151 home .CreatedAt = newDate
153152 home .ModifiedAt = newDate
154153 home .Rooms = []models.Room {}
155154 for i := 0 ; i < len (newHome .Rooms ); i ++ {
156155 var room models.Room
157- room .ID = primitive .NewObjectID ()
156+ room .ID = bson .NewObjectID ()
158157 room .Name = newHome .Rooms [i ].Name
159158 room .Floor = newHome .Rooms [i ].Floor
160159 room .CreatedAt = newDate
@@ -172,7 +171,7 @@ func (handler *Homes) PostHome(c *gin.Context) {
172171 // Defers ending the session after the transaction is committed or ended
173172 defer dbSession .EndSession (context .TODO ())
174173
175- _ , errTrans := dbSession .WithTransaction (context .TODO (), func (sessionCtx mongo. SessionContext ) (interface {}, error ) {
174+ _ , errTrans := dbSession .WithTransaction (context .TODO (), func (sessionCtx context. Context ) (interface {}, error ) {
176175 // Official `mongo-driver` documentation state: "callback may be run
177176 // multiple times during WithTransaction due to retry attempts, so it must be idempotent."
178177 _ , err1 := handler .collHomes .InsertOne (sessionCtx , home )
@@ -204,7 +203,7 @@ func (handler *Homes) PostHome(c *gin.Context) {
204203func (handler * Homes ) PutHome (c * gin.Context ) {
205204 handler .logger .Info ("REST - PUT - PutHome called" )
206205
207- objectID , errID := primitive .ObjectIDFromHex (c .Param ("id" ))
206+ objectID , errID := bson .ObjectIDFromHex (c .Param ("id" ))
208207 if errID != nil {
209208 handler .logger .Error ("REST - PUT - PutHome - wrong format of the path param 'id'" )
210209 c .JSON (http .StatusBadRequest , gin.H {"error" : "wrong format of the path param 'id'" })
@@ -257,7 +256,7 @@ func (handler *Homes) PutHome(c *gin.Context) {
257256func (handler * Homes ) DeleteHome (c * gin.Context ) {
258257 handler .logger .Info ("REST - DELETE - DeleteHome called" )
259258
260- objectID , errID := primitive .ObjectIDFromHex (c .Param ("id" ))
259+ objectID , errID := bson .ObjectIDFromHex (c .Param ("id" ))
261260 if errID != nil {
262261 handler .logger .Error ("REST - DELETE - DeleteHome - wrong format of the path param 'id'" )
263262 c .JSON (http .StatusBadRequest , gin.H {"error" : "wrong format of the path param 'id'" })
@@ -281,7 +280,7 @@ func (handler *Homes) DeleteHome(c *gin.Context) {
281280 c .JSON (http .StatusUnauthorized , gin.H {"error" : "cannot find profile in session" })
282281 return
283282 }
284- var newHomes []primitive .ObjectID
283+ var newHomes []bson .ObjectID
285284 for _ , homeID := range profile .Homes {
286285 if homeID != objectID {
287286 newHomes = append (newHomes , homeID )
@@ -298,7 +297,7 @@ func (handler *Homes) DeleteHome(c *gin.Context) {
298297 // Defers ending the session after the transaction is committed or ended
299298 defer dbSession .EndSession (context .TODO ())
300299
301- _ , errTrans := dbSession .WithTransaction (context .TODO (), func (sessionCtx mongo. SessionContext ) (interface {}, error ) {
300+ _ , errTrans := dbSession .WithTransaction (context .TODO (), func (sessionCtx context. Context ) (interface {}, error ) {
302301 // Official `mongo-driver` documentation state: "callback may be run
303302 // multiple times during WithTransaction due to retry attempts, so it must be idempotent."
304303 _ , errUpd := handler .collProfiles .UpdateOne (sessionCtx , bson.M {
@@ -333,7 +332,7 @@ func (handler *Homes) DeleteHome(c *gin.Context) {
333332func (handler * Homes ) GetRooms (c * gin.Context ) {
334333 handler .logger .Info ("REST - GET - GetRooms called" )
335334
336- objectID , errID := primitive .ObjectIDFromHex (c .Param ("id" ))
335+ objectID , errID := bson .ObjectIDFromHex (c .Param ("id" ))
337336 if errID != nil {
338337 handler .logger .Error ("REST - GET - GetRooms - wrong format of the path param 'id'" )
339338 c .JSON (http .StatusBadRequest , gin.H {"error" : "wrong format of the path param 'id'" })
@@ -366,7 +365,7 @@ func (handler *Homes) GetRooms(c *gin.Context) {
366365func (handler * Homes ) PostRoom (c * gin.Context ) {
367366 handler .logger .Info ("REST - POST - PostRoom called" )
368367
369- objectID , errID := primitive .ObjectIDFromHex (c .Param ("id" ))
368+ objectID , errID := bson .ObjectIDFromHex (c .Param ("id" ))
370369 if errID != nil {
371370 handler .logger .Error ("REST - POST - PostRoom - wrong format of the path param 'id'" )
372371 c .JSON (http .StatusBadRequest , gin.H {"error" : "wrong format of the path param 'id'" })
@@ -412,7 +411,7 @@ func (handler *Homes) PostRoom(c *gin.Context) {
412411
413412 // create a Home document object
414413 var room models.Room
415- room .ID = primitive .NewObjectID ()
414+ room .ID = bson .NewObjectID ()
416415 room .Name = newRoom .Name
417416 room .Floor = newRoom .Floor
418417 room .CreatedAt = newDate
@@ -442,8 +441,8 @@ func (handler *Homes) PostRoom(c *gin.Context) {
442441func (handler * Homes ) PutRoom (c * gin.Context ) {
443442 handler .logger .Info ("REST - PUT - PutRoom called" )
444443
445- homeID , errID := primitive .ObjectIDFromHex (c .Param ("id" ))
446- roomID , errRid := primitive .ObjectIDFromHex (c .Param ("rid" ))
444+ homeID , errID := bson .ObjectIDFromHex (c .Param ("id" ))
445+ roomID , errRid := bson .ObjectIDFromHex (c .Param ("rid" ))
447446 if errID != nil || errRid != nil {
448447 handler .logger .Error ("REST - PUT - PutRoom - wrong format of one of the path params" )
449448 c .JSON (http .StatusBadRequest , gin.H {"error" : "wrong format of one of the path params" })
@@ -498,12 +497,11 @@ func (handler *Homes) PutRoom(c *gin.Context) {
498497 }
499498
500499 // update room
501- filter := bson.D {primitive.E {Key : "_id" , Value : homeID }}
502- arrayFilters := options.ArrayFilters {Filters : bson.A {bson.M {"x._id" : roomID }}}
503- upsert := true
504- opts := options.UpdateOptions {
505- ArrayFilters : & arrayFilters ,
506- Upsert : & upsert ,
500+ filter := bson.D {bson.E {Key : "_id" , Value : homeID }}
501+ arrayFilters := bson.A {bson.M {"x._id" : roomID }}
502+ opts := []options.Lister [options.UpdateOneOptions ]{
503+ options .UpdateOne ().SetUpsert (true ),
504+ options .UpdateOne ().SetArrayFilters (arrayFilters ),
507505 }
508506 update := bson.M {
509507 "$set" : bson.M {
@@ -512,7 +510,7 @@ func (handler *Homes) PutRoom(c *gin.Context) {
512510 "rooms.$[x].modifiedAt" : time .Now (),
513511 },
514512 }
515- _ , errUpdate := handler .collHomes .UpdateOne (handler .ctx , filter , update , & opts )
513+ _ , errUpdate := handler .collHomes .UpdateOne (handler .ctx , filter , update , opts ... )
516514 if errUpdate != nil {
517515 handler .logger .Errorf ("REST - PUT - PutRoom - Cannot update a room in DB, errUpdate = %#v" , errUpdate )
518516 c .JSON (http .StatusInternalServerError , gin.H {"error" : "cannot update room" })
@@ -526,8 +524,8 @@ func (handler *Homes) PutRoom(c *gin.Context) {
526524func (handler * Homes ) DeleteRoom (c * gin.Context ) {
527525 handler .logger .Info ("REST - DELETE - DeleteRoom called" )
528526
529- objectID , errID := primitive .ObjectIDFromHex (c .Param ("id" ))
530- objectRid , errRid := primitive .ObjectIDFromHex (c .Param ("rid" ))
527+ objectID , errID := bson .ObjectIDFromHex (c .Param ("id" ))
528+ objectRid , errRid := bson .ObjectIDFromHex (c .Param ("rid" ))
531529 if errID != nil || errRid != nil {
532530 handler .logger .Error ("REST - PUT - PutRoom - wrong format of one of the path params" )
533531 c .JSON (http .StatusBadRequest , gin.H {"error" : "wrong format of one of the path params" })
@@ -568,10 +566,10 @@ func (handler *Homes) DeleteRoom(c *gin.Context) {
568566 }
569567
570568 // delete room by id
571- filter := bson.D {primitive .E {Key : "_id" , Value : objectID }}
569+ filter := bson.D {bson .E {Key : "_id" , Value : objectID }}
572570 update := bson.M {
573571 "$pull" : bson.M {
574- "rooms" : bson.D {primitive .E {Key : "_id" , Value : objectRid }},
572+ "rooms" : bson.D {bson .E {Key : "_id" , Value : objectRid }},
575573 },
576574 }
577575 _ , err2 := handler .collHomes .UpdateOne (handler .ctx , filter , update )
@@ -584,7 +582,7 @@ func (handler *Homes) DeleteRoom(c *gin.Context) {
584582 c .JSON (http .StatusOK , gin.H {"message" : "room has been deleted" })
585583}
586584
587- func (handler * Homes ) isHomeOwnedBy (session sessions.Session , objectID primitive .ObjectID ) bool {
585+ func (handler * Homes ) isHomeOwnedBy (session sessions.Session , objectID bson .ObjectID ) bool {
588586 // you can update a home only if you are the owner of that home
589587 // read profile from db. This is required to get fresh data from db, because data in session could be outdated
590588
0 commit comments