Skip to content

Commit de5ca1b

Browse files
committed
Add event listener to clear thread on message deleted
1 parent 31d14d4 commit de5ca1b

3 files changed

Lines changed: 23 additions & 3 deletions

File tree

api/pkg/handlers/message_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ func (h *MessageHandler) Delete(c *fiber.Ctx) error {
392392
ctxLogger := h.tracer.CtxLogger(h.logger, span)
393393

394394
messageID := c.Params("messageID")
395-
if errors := h.validator.ValidateUUID(ctx, "messageID", messageID); len(errors) != 0 {
395+
if errors := h.validator.ValidateUUID(ctx, messageID, "messageID"); len(errors) != 0 {
396396
msg := fmt.Sprintf("validation errors [%s], while deleting a message with ID [%s]", spew.Sdump(errors), messageID)
397397
ctxLogger.Warn(stacktrace.NewError(msg))
398398
return h.responseUnprocessableEntity(c, errors, "validation errors while storing event")

api/pkg/listeners/message_thread_listener.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ func NewMessageThreadListener(
3434

3535
return l, map[string]events.EventListener{
3636
events.EventTypeMessageAPISent: l.OnMessageAPISent,
37+
events.MessageAPIDeleted: l.onMessageDeleted,
3738
events.EventTypeMessagePhoneSending: l.OnMessagePhoneSending,
3839
events.EventTypeMessagePhoneSent: l.OnMessagePhoneSent,
3940
events.EventTypeMessagePhoneDelivered: l.OnMessagePhoneDelivered,
@@ -73,6 +74,25 @@ func (listener *MessageThreadListener) OnMessageAPISent(ctx context.Context, eve
7374
return nil
7475
}
7576

77+
// onMessageDeleted handles the events.MessageAPIDeleted event
78+
func (listener *MessageThreadListener) onMessageDeleted(ctx context.Context, event cloudevents.Event) error {
79+
ctx, span := listener.tracer.Start(ctx)
80+
defer span.End()
81+
82+
var payload events.MessageAPIDeletedPayload
83+
if err := event.DataAs(&payload); err != nil {
84+
msg := fmt.Sprintf("cannot decode [%s] into [%T]", event.Data(), payload)
85+
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
86+
}
87+
88+
if err := listener.service.UpdateAfterDeletedMessage(ctx, payload.UserID, payload.MessageID); err != nil {
89+
msg := fmt.Sprintf("cannot update thread for message with ID [%s] for event with ID [%s]", payload.MessageID, event.ID())
90+
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
91+
}
92+
93+
return nil
94+
}
95+
7696
// OnMessagePhoneSending handles the events.EventTypeMessagePhoneSending event
7797
func (listener *MessageThreadListener) OnMessagePhoneSending(ctx context.Context, event cloudevents.Event) error {
7898
ctx, span := listener.tracer.Start(ctx)

api/pkg/services/message_thread_service.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ func (service *MessageThreadService) UpdateStatus(ctx context.Context, params Me
110110
return thread, nil
111111
}
112112

113-
// DeleteLastMessage in thread after a message has been deleted
114-
func (service *MessageThreadService) DeleteLastMessage(ctx context.Context, userID entities.UserID, messageID uuid.UUID) error {
113+
// UpdateAfterDeletedMessage updates a thread after the last message has been deleted
114+
func (service *MessageThreadService) UpdateAfterDeletedMessage(ctx context.Context, userID entities.UserID, messageID uuid.UUID) error {
115115
ctx, span, ctxLogger := service.tracer.StartWithLogger(ctx, service.logger)
116116
defer span.End()
117117

0 commit comments

Comments
 (0)