55 "errors"
66 "fmt"
77
8+ "github.com/google/uuid"
9+
810 "gorm.io/gorm/clause"
911
1012 "github.com/NdoleStudio/http-sms-manager/pkg/entities"
@@ -59,7 +61,7 @@ func (repository *gormMessageThreadRepository) Update(ctx context.Context, threa
5961 return nil
6062}
6163
62- // Load a thread between 2 users
64+ // LoadByOwnerContact a thread between 2 users
6365func (repository * gormMessageThreadRepository ) LoadByOwnerContact (ctx context.Context , owner string , contact string ) (* entities.MessageThread , error ) {
6466 ctx , span := repository .tracer .Start (ctx )
6567 defer span .End ()
@@ -80,12 +82,33 @@ func (repository *gormMessageThreadRepository) LoadByOwnerContact(ctx context.Co
8082 return thread , nil
8183}
8284
85+ // Load an entities.MessageThread by ID
86+ func (repository * gormMessageThreadRepository ) Load (ctx context.Context , ID uuid.UUID ) (* entities.MessageThread , error ) {
87+ ctx , span := repository .tracer .Start (ctx )
88+ defer span .End ()
89+
90+ thread := new (entities.MessageThread )
91+
92+ err := repository .db .First (thread , ID ).Error
93+ if errors .Is (err , gorm .ErrRecordNotFound ) {
94+ msg := fmt .Sprintf ("thread with id [%s] not found" , ID )
95+ return nil , repository .tracer .WrapErrorSpan (span , stacktrace .PropagateWithCode (err , ErrCodeNotFound , msg ))
96+ }
97+
98+ if err != nil {
99+ msg := fmt .Sprintf ("thread with id [%s]" , ID )
100+ return nil , repository .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
101+ }
102+
103+ return thread , nil
104+ }
105+
83106// Index message threads for an owner
84- func (repository * gormMessageThreadRepository ) Index (ctx context.Context , owner string , params IndexParams ) (* []entities.MessageThread , error ) {
107+ func (repository * gormMessageThreadRepository ) Index (ctx context.Context , owner string , isArchived bool , params IndexParams ) (* []entities.MessageThread , error ) {
85108 ctx , span := repository .tracer .Start (ctx )
86109 defer span .End ()
87110
88- query := repository .db .Where ("owner = ?" , owner )
111+ query := repository .db .Where ("owner = ?" , owner ). Where ( "is_archived = ?" , isArchived )
89112 if len (params .Query ) > 0 {
90113 queryPattern := "%" + params .Query + "%"
91114 query .Where (
0 commit comments