Skip to content

Commit c34a731

Browse files
committed
Load thread by ID
1 parent 4ea0a1f commit c34a731

2 files changed

Lines changed: 28 additions & 3 deletions

File tree

api/pkg/repositories/gorm_message_thread_repository.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
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
6365
func (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(

web/store/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export type State = {
3030
owner: string | null
3131
loadingThreads: boolean
3232
loadingMessages: boolean
33+
archivedThreads: boolean
3334
authUser: AuthUser | null
3435
user: User | null
3536
phones: Array<Phone>
@@ -46,6 +47,7 @@ export const state = (): State => ({
4647
threadId: null,
4748
heartbeat: null,
4849
loadingThreads: true,
50+
archivedThreads: false,
4951
loadingMessages: true,
5052
pooling: false,
5153
threadMessages: [],

0 commit comments

Comments
 (0)