@@ -19,6 +19,19 @@ type gormPhoneRepository struct {
1919 db * gorm.DB
2020}
2121
22+ // NewGormPhoneRepository creates the GORM version of the PhoneRepository
23+ func NewGormPhoneRepository (
24+ logger telemetry.Logger ,
25+ tracer telemetry.Tracer ,
26+ db * gorm.DB ,
27+ ) PhoneRepository {
28+ return & gormPhoneRepository {
29+ logger : logger .WithService (fmt .Sprintf ("%T" , & gormPhoneRepository {})),
30+ tracer : tracer ,
31+ db : db ,
32+ }
33+ }
34+
2235func (repository * gormPhoneRepository ) Upsert (ctx context.Context , phone * entities.Phone ) error {
2336 ctx , span := repository .tracer .Start (ctx )
2437 defer span .End ()
@@ -56,6 +69,26 @@ func (repository *gormPhoneRepository) Upsert(ctx context.Context, phone *entiti
5669 return nil
5770}
5871
72+ // Load a phone based on entities.UserID and phoneNumber
73+ func (repository * gormPhoneRepository ) Load (ctx context.Context , userID entities.UserID , phoneNumber string ) (* entities.Phone , error ) {
74+ ctx , span := repository .tracer .Start (ctx )
75+ defer span .End ()
76+
77+ phone := new (entities.Phone )
78+ err := repository .db .Where ("user_id = ?" , userID ).Where ("phone_number = ?" , phoneNumber ).First (phone ).Error
79+ if errors .Is (err , gorm .ErrRecordNotFound ) {
80+ msg := fmt .Sprintf ("phone with userID [%s] and phoneNumber [%s] does not exist" , userID , phoneNumber )
81+ return nil , repository .tracer .WrapErrorSpan (span , stacktrace .PropagateWithCode (err , ErrCodeNotFound , msg ))
82+ }
83+
84+ if err != nil {
85+ msg := fmt .Sprintf ("cannot load phone phone with userID [%s] and phoneNumber [%s]" , userID , phoneNumber )
86+ return nil , repository .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
87+ }
88+
89+ return phone , nil
90+ }
91+
5992func (repository * gormPhoneRepository ) Index (ctx context.Context , userID entities.UserID , params IndexParams ) (* []entities.Phone , error ) {
6093 ctx , span := repository .tracer .Start (ctx )
6194 defer span .End ()
@@ -74,16 +107,3 @@ func (repository *gormPhoneRepository) Index(ctx context.Context, userID entitie
74107
75108 return phones , nil
76109}
77-
78- // NewGormPhoneRepository creates the GORM version of the PhoneRepository
79- func NewGormPhoneRepository (
80- logger telemetry.Logger ,
81- tracer telemetry.Tracer ,
82- db * gorm.DB ,
83- ) PhoneRepository {
84- return & gormPhoneRepository {
85- logger : logger .WithService (fmt .Sprintf ("%T" , & gormPhoneRepository {})),
86- tracer : tracer ,
87- db : db ,
88- }
89- }
0 commit comments