Skip to content

Commit 04e1fe4

Browse files
committed
Fix message scheduling
1 parent 5cc857b commit 04e1fe4

19 files changed

+126
-64
lines changed

api/pkg/events/message_phone_delivered_event.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package events
33
import (
44
"time"
55

6+
"github.com/NdoleStudio/http-sms-manager/pkg/entities"
7+
68
"github.com/google/uuid"
79
)
810

@@ -11,9 +13,10 @@ const EventTypeMessagePhoneDelivered = "message.phone.delivered"
1113

1214
// MessagePhoneDeliveredPayload is the payload of the EventTypeMessagePhoneDelivered event
1315
type MessagePhoneDeliveredPayload struct {
14-
ID uuid.UUID `json:"id"`
15-
Owner string `json:"owner"`
16-
Contact string `json:"contact"`
17-
Timestamp time.Time `json:"timestamp"`
18-
Content string `json:"content"`
16+
ID uuid.UUID `json:"id"`
17+
Owner string `json:"owner"`
18+
Contact string `json:"contact"`
19+
UserID entities.UserID `json:"user_id"`
20+
Timestamp time.Time `json:"timestamp"`
21+
Content string `json:"content"`
1922
}

api/pkg/events/message_phone_failed_event.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package events
33
import (
44
"time"
55

6+
"github.com/NdoleStudio/http-sms-manager/pkg/entities"
67
"github.com/google/uuid"
78
)
89

@@ -11,9 +12,10 @@ const EventTypeMessagePhoneFailed = "message.phone.failed"
1112

1213
// MessagePhoneFailedPayload is the payload of the EventTypeMessagePhoneFailed event
1314
type MessagePhoneFailedPayload struct {
14-
ID uuid.UUID `json:"id"`
15-
Owner string `json:"owner"`
16-
Contact string `json:"contact"`
17-
Timestamp time.Time `json:"timestamp"`
18-
Content string `json:"content"`
15+
ID uuid.UUID `json:"id"`
16+
UserID entities.UserID `json:"user_id"`
17+
Owner string `json:"owner"`
18+
Contact string `json:"contact"`
19+
Timestamp time.Time `json:"timestamp"`
20+
Content string `json:"content"`
1921
}

api/pkg/events/message_phone_received_event.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package events
33
import (
44
"time"
55

6+
"github.com/NdoleStudio/http-sms-manager/pkg/entities"
7+
68
"github.com/google/uuid"
79
)
810

@@ -11,9 +13,10 @@ const EventTypeMessagePhoneReceived = "message.phone.received"
1113

1214
// MessagePhoneReceivedPayload is the payload of the EventTypeMessagePhoneReceived event
1315
type MessagePhoneReceivedPayload struct {
14-
ID uuid.UUID `json:"id"`
15-
Owner string `json:"owner"`
16-
Contact string `json:"contact"`
17-
Timestamp time.Time `json:"timestamp"`
18-
Content string `json:"content"`
16+
ID uuid.UUID `json:"id"`
17+
UserID entities.UserID `json:"user_id"`
18+
Owner string `json:"owner"`
19+
Contact string `json:"contact"`
20+
Timestamp time.Time `json:"timestamp"`
21+
Content string `json:"content"`
1922
}
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package events
22

33
import (
4+
"github.com/NdoleStudio/http-sms-manager/pkg/entities"
45
"github.com/google/uuid"
56
)
67

@@ -9,8 +10,9 @@ const EventTypeMessagePhoneSending = "message.phone.sending"
910

1011
// MessagePhoneSendingPayload is the payload of the EventTypeMessageSent event
1112
type MessagePhoneSendingPayload struct {
12-
ID uuid.UUID `json:"id"`
13-
Owner string `json:"owner"`
14-
Contact string `json:"contact"`
15-
Content string `json:"content"`
13+
ID uuid.UUID `json:"id"`
14+
UserID entities.UserID `json:"user_id"`
15+
Owner string `json:"owner"`
16+
Contact string `json:"contact"`
17+
Content string `json:"content"`
1618
}

api/pkg/events/message_phone_sent_event.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package events
33
import (
44
"time"
55

6+
"github.com/NdoleStudio/http-sms-manager/pkg/entities"
7+
68
"github.com/google/uuid"
79
)
810

@@ -11,9 +13,10 @@ const EventTypeMessagePhoneSent = "message.phone.sent"
1113

1214
// MessagePhoneSentPayload is the payload of the EventTypeMessagePhoneSent event
1315
type MessagePhoneSentPayload struct {
14-
ID uuid.UUID `json:"id"`
15-
Owner string `json:"owner"`
16-
Contact string `json:"contact"`
17-
Timestamp time.Time `json:"timestamp"`
18-
Content string `json:"content"`
16+
ID uuid.UUID `json:"id"`
17+
UserID entities.UserID `json:"user_id"`
18+
Owner string `json:"owner"`
19+
Contact string `json:"contact"`
20+
Timestamp time.Time `json:"timestamp"`
21+
Content string `json:"content"`
1922
}

api/pkg/handlers/message_handler.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ func (h *MessageHandler) GetOutstanding(c *fiber.Ctx) error {
128128
return h.responseUnprocessableEntity(c, errors, "validation errors while fetching outstanding messages")
129129
}
130130

131-
messages, err := h.service.GetOutstanding(ctx, request.ToGetOutstandingParams(c.OriginalURL(), timestamp))
131+
messages, err := h.service.GetOutstanding(ctx, request.ToGetOutstandingParams(c.OriginalURL(), h.userIDFomContext(c), timestamp))
132132
if err != nil {
133133
msg := fmt.Sprintf("cannot get messgaes with URL [%s]", c.OriginalURL())
134134
ctxLogger.Error(stacktrace.Propagate(err, msg))
@@ -175,7 +175,7 @@ func (h *MessageHandler) Index(c *fiber.Ctx) error {
175175
return h.responseUnprocessableEntity(c, errors, "validation errors while fetching messages")
176176
}
177177

178-
messages, err := h.service.GetMessages(ctx, request.ToGetParams())
178+
messages, err := h.service.GetMessages(ctx, request.ToGetParams(h.userIDFomContext(c)))
179179
if err != nil {
180180
msg := fmt.Sprintf("cannot get messgaes with params [%+#v]", request)
181181
ctxLogger.Error(stacktrace.Propagate(err, msg))
@@ -222,7 +222,7 @@ func (h *MessageHandler) PostEvent(c *fiber.Ctx) error {
222222
return h.responseUnprocessableEntity(c, errors, "validation errors while storing event")
223223
}
224224

225-
message, err := h.service.GetMessage(ctx, uuid.MustParse(request.MessageID))
225+
message, err := h.service.GetMessage(ctx, h.userIDFomContext(c), uuid.MustParse(request.MessageID))
226226
if err != nil && stacktrace.GetCode(err) == repositories.ErrCodeNotFound {
227227
return h.responseNotFound(c, fmt.Sprintf("cannot find message with ID [%s]", request.MessageID))
228228
}
@@ -275,7 +275,7 @@ func (h *MessageHandler) PostReceive(c *fiber.Ctx) error {
275275
return h.responseUnprocessableEntity(c, errors, "validation errors while receiving message")
276276
}
277277

278-
message, err := h.service.ReceiveMessage(ctx, request.ToMessageReceiveParams(c.OriginalURL()))
278+
message, err := h.service.ReceiveMessage(ctx, request.ToMessageReceiveParams(h.userIDFomContext(c), c.OriginalURL()))
279279
if err != nil {
280280
msg := fmt.Sprintf("cannot receive message with paylod [%s]", c.Body())
281281
ctxLogger.Error(stacktrace.Propagate(err, msg))

api/pkg/handlers/message_thread_handler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func (h *MessageThreadHandler) Index(c *fiber.Ctx) error {
8080
return h.responseUnprocessableEntity(c, errors, "validation errors while fetching message threads")
8181
}
8282

83-
threads, err := h.service.GetThreads(ctx, request.ToGetParams())
83+
threads, err := h.service.GetThreads(ctx, request.ToGetParams(h.userIDFomContext(c)))
8484
if err != nil {
8585
msg := fmt.Sprintf("cannot get message threads with params [%+#v]", request)
8686
ctxLogger.Error(stacktrace.Propagate(err, msg))
@@ -124,7 +124,7 @@ func (h *MessageThreadHandler) Update(c *fiber.Ctx) error {
124124
return h.responseUnprocessableEntity(c, errors, "validation errors while updating message thread")
125125
}
126126

127-
thread, err := h.service.UpdateStatus(ctx, request.ToUpdateParams())
127+
thread, err := h.service.UpdateStatus(ctx, request.ToUpdateParams(h.userIDFomContext(c)))
128128
if err != nil {
129129
msg := fmt.Sprintf("cannot update message thread with params [%+#v]", request)
130130
ctxLogger.Error(stacktrace.Propagate(err, msg))

api/pkg/listeners/message_listener.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ func (listener *MessageListener) OnMessageAPISent(ctx context.Context, event clo
6161
Owner: payload.Owner,
6262
Contact: payload.Contact,
6363
Content: payload.Content,
64+
UserID: payload.UserID,
6465
ID: payload.ID,
6566
Timestamp: payload.RequestReceivedAt,
6667
}
@@ -99,6 +100,7 @@ func (listener *MessageListener) OnMessagePhoneSending(ctx context.Context, even
99100

100101
handleParams := services.HandleMessageParams{
101102
ID: payload.ID,
103+
UserID: payload.UserID,
102104
Timestamp: event.Time(),
103105
}
104106

@@ -173,6 +175,7 @@ func (listener *MessageListener) OnMessagePhoneDelivered(ctx context.Context, ev
173175

174176
handleParams := services.HandleMessageParams{
175177
ID: payload.ID,
178+
UserID: payload.UserID,
176179
Timestamp: payload.Timestamp,
177180
}
178181

@@ -210,6 +213,7 @@ func (listener *MessageListener) OnMessagePhoneFailed(ctx context.Context, event
210213

211214
handleParams := services.HandleMessageParams{
212215
ID: payload.ID,
216+
UserID: payload.UserID,
213217
Timestamp: payload.Timestamp,
214218
}
215219

@@ -249,6 +253,7 @@ func (listener *MessageListener) OnMessagePhoneReceived(ctx context.Context, eve
249253
Owner: payload.Owner,
250254
Contact: payload.Contact,
251255
Content: payload.Content,
256+
UserID: payload.UserID,
252257
ID: payload.ID,
253258
Timestamp: payload.Timestamp,
254259
}

api/pkg/listeners/message_thread_listener.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ func (listener *MessageThreadListener) OnMessageAPISent(ctx context.Context, eve
6060
updateParams := services.MessageThreadUpdateParams{
6161
Owner: payload.Owner,
6262
Contact: payload.Contact,
63+
UserID: payload.UserID,
6364
Timestamp: payload.RequestReceivedAt,
6465
Content: payload.Content,
6566
MessageID: payload.ID,
@@ -86,6 +87,7 @@ func (listener *MessageThreadListener) OnMessagePhoneSending(ctx context.Context
8687

8788
updateParams := services.MessageThreadUpdateParams{
8889
Owner: payload.Owner,
90+
UserID: payload.UserID,
8991
Contact: payload.Contact,
9092
Timestamp: event.Time(),
9193
Content: payload.Content,
@@ -114,6 +116,7 @@ func (listener *MessageThreadListener) OnMessagePhoneSent(ctx context.Context, e
114116
updateParams := services.MessageThreadUpdateParams{
115117
Owner: payload.Owner,
116118
Contact: payload.Contact,
119+
UserID: payload.UserID,
117120
Timestamp: payload.Timestamp,
118121
Content: payload.Content,
119122
MessageID: payload.ID,
@@ -140,6 +143,7 @@ func (listener *MessageThreadListener) OnMessagePhoneDelivered(ctx context.Conte
140143

141144
updateParams := services.MessageThreadUpdateParams{
142145
Owner: payload.Owner,
146+
UserID: payload.UserID,
143147
Contact: payload.Contact,
144148
Timestamp: payload.Timestamp,
145149
Content: payload.Content,
@@ -168,6 +172,7 @@ func (listener *MessageThreadListener) OnMessagePhoneFailed(ctx context.Context,
168172
updateParams := services.MessageThreadUpdateParams{
169173
Owner: payload.Owner,
170174
Contact: payload.Contact,
175+
UserID: payload.UserID,
171176
Timestamp: payload.Timestamp,
172177
Content: payload.Content,
173178
MessageID: payload.ID,
@@ -196,6 +201,7 @@ func (listener *MessageThreadListener) OnMessagePhoneReceived(ctx context.Contex
196201
Owner: payload.Owner,
197202
Contact: payload.Contact,
198203
Timestamp: event.Time(),
204+
UserID: payload.UserID,
199205
Content: payload.Content,
200206
MessageID: payload.ID,
201207
}

api/pkg/repositories/gorm_message_thread_repository.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,19 @@ func (repository *gormMessageThreadRepository) Update(ctx context.Context, threa
6262
}
6363

6464
// LoadByOwnerContact a thread between 2 users
65-
func (repository *gormMessageThreadRepository) LoadByOwnerContact(ctx context.Context, owner string, contact string) (*entities.MessageThread, error) {
65+
func (repository *gormMessageThreadRepository) LoadByOwnerContact(ctx context.Context, userID entities.UserID, owner string, contact string) (*entities.MessageThread, error) {
6666
ctx, span := repository.tracer.Start(ctx)
6767
defer span.End()
6868

6969
thread := new(entities.MessageThread)
7070

71-
err := repository.db.WithContext(ctx).Where("owner = ?", owner).Where("contact = ?", contact).First(thread).Error
71+
err := repository.db.
72+
WithContext(ctx).
73+
Where("user = ?", userID).
74+
Where("owner = ?", owner).
75+
Where("contact = ?", contact).
76+
First(thread).
77+
Error
7278
if errors.Is(err, gorm.ErrRecordNotFound) {
7379
msg := fmt.Sprintf("thread with owner [%s] and contact [%s] does not exist", owner, contact)
7480
return nil, repository.tracer.WrapErrorSpan(span, stacktrace.PropagateWithCode(err, ErrCodeNotFound, msg))
@@ -83,13 +89,17 @@ func (repository *gormMessageThreadRepository) LoadByOwnerContact(ctx context.Co
8389
}
8490

8591
// Load an entities.MessageThread by ID
86-
func (repository *gormMessageThreadRepository) Load(ctx context.Context, ID uuid.UUID) (*entities.MessageThread, error) {
92+
func (repository *gormMessageThreadRepository) Load(ctx context.Context, userID entities.UserID, ID uuid.UUID) (*entities.MessageThread, error) {
8793
ctx, span := repository.tracer.Start(ctx)
8894
defer span.End()
8995

9096
thread := new(entities.MessageThread)
9197

92-
err := repository.db.WithContext(ctx).First(thread, ID).Error
98+
err := repository.db.
99+
WithContext(ctx).
100+
Where("user = ?", userID).
101+
Where("id = ?", ID).
102+
Error
93103
if errors.Is(err, gorm.ErrRecordNotFound) {
94104
msg := fmt.Sprintf("thread with id [%s] not found", ID)
95105
return nil, repository.tracer.WrapErrorSpan(span, stacktrace.PropagateWithCode(err, ErrCodeNotFound, msg))
@@ -104,11 +114,14 @@ func (repository *gormMessageThreadRepository) Load(ctx context.Context, ID uuid
104114
}
105115

106116
// Index message threads for an owner
107-
func (repository *gormMessageThreadRepository) Index(ctx context.Context, owner string, isArchived bool, params IndexParams) (*[]entities.MessageThread, error) {
117+
func (repository *gormMessageThreadRepository) Index(ctx context.Context, userID entities.UserID, owner string, isArchived bool, params IndexParams) (*[]entities.MessageThread, error) {
108118
ctx, span := repository.tracer.Start(ctx)
109119
defer span.End()
110120

111-
query := repository.db.WithContext(ctx).Where("owner = ?", owner)
121+
query := repository.db.
122+
WithContext(ctx).
123+
Where("user = ?", userID).
124+
Where("owner = ?", owner)
112125

113126
if isArchived {
114127
query.Where("is_archived = ?", isArchived)

0 commit comments

Comments
 (0)