Skip to content

Commit 6bc3ec5

Browse files
committed
Fix the update of last message status
1 parent 9fd1156 commit 6bc3ec5

2 files changed

Lines changed: 6 additions & 7 deletions

File tree

api/pkg/services/message_service.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,13 +334,13 @@ func (service *MessageService) SendMessage(ctx context.Context, params MessageSe
334334
msg := fmt.Sprintf("cannot create %T from payload with message id [%s]", event, eventPayload.MessageID)
335335
return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
336336
}
337-
ctxLogger.Info(fmt.Sprintf("created event [%s] with id [%s] and message id [%s]", event.Type(), event.ID(), eventPayload.MessageID))
337+
ctxLogger.Info(fmt.Sprintf("created event [%s] with id [%s] and message id [%s] and user [%s]", event.Type(), event.ID(), eventPayload.MessageID, eventPayload.UserID))
338338

339339
if err = service.eventDispatcher.Dispatch(ctx, event); err != nil {
340340
msg := fmt.Sprintf("cannot dispatch event type [%s] and id [%s]", event.Type(), event.ID())
341341
return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
342342
}
343-
ctxLogger.Info(fmt.Sprintf("event [%s] dispatched succesfully", event.ID()))
343+
ctxLogger.Info(fmt.Sprintf("[%s] event with ID [%s] dispatched succesfully for message [%s] and user [%s]", event.Type(), event.ID(), eventPayload.MessageID, eventPayload.UserID))
344344

345345
return service.storeSentMessage(ctx, eventPayload)
346346
}

api/pkg/services/message_thread_service.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func (service *MessageThreadService) UpdateThread(ctx context.Context, params Me
5252
ctxLogger := service.tracer.CtxLogger(service.logger, span)
5353

5454
thread, err := service.repository.LoadByOwnerContact(ctx, params.UserID, params.Owner, params.Contact)
55-
if err != nil && stacktrace.GetCode(err) == repositories.ErrCodeNotFound {
55+
if stacktrace.GetCode(err) == repositories.ErrCodeNotFound {
5656
ctxLogger.Info(fmt.Sprintf("cannot find thread with owner [%s], and contact [%s]. creating new thread", params.Owner, params.Contact))
5757
return service.createThread(ctx, params)
5858
}
@@ -62,18 +62,17 @@ func (service *MessageThreadService) UpdateThread(ctx context.Context, params Me
6262
return service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
6363
}
6464

65-
if thread.OrderTimestamp.Unix() > params.Timestamp.Unix() && thread.Status != entities.MessageStatusSending {
65+
if thread.OrderTimestamp.Unix() > params.Timestamp.Unix() && thread.Status != entities.MessageStatusSending && thread.LastMessageID == params.MessageID {
6666
ctxLogger.Warn(stacktrace.NewError(fmt.Sprintf("thread [%s] has timestamp [%s] and status [%s] which is greater than timestamp [%s] for message [%s] and status [%s]", thread.ID, thread.OrderTimestamp, thread.Status, params.Timestamp, params.MessageID, params.Status)))
6767
return nil
6868
}
6969

70-
if thread.Status == entities.MessageStatusDelivered {
70+
if thread.Status == entities.MessageStatusDelivered && thread.LastMessageID == params.MessageID {
7171
ctxLogger.Warn(stacktrace.NewError(fmt.Sprintf("thread [%s] already has status [%s] not updating with status [%s] for message [%s]", thread.ID, thread.Status, params.Status, params.MessageID)))
7272
return nil
7373
}
7474

75-
thread = thread.Update(params.Timestamp, params.MessageID, params.Content, params.Status)
76-
if err = service.repository.Update(ctx, thread); err != nil {
75+
if err = service.repository.Update(ctx, thread.Update(params.Timestamp, params.MessageID, params.Content, params.Status)); err != nil {
7776
msg := fmt.Sprintf("cannot update message thread with id [%s] after adding message [%s]", thread.ID, params.MessageID)
7877
return service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
7978
}

0 commit comments

Comments
 (0)