HandleMessageSent handles when a message has been sent by a mobile phone
(ctx context.Context, params HandleMessageParams)
| 716 | |
| 717 | // HandleMessageSent handles when a message has been sent by a mobile phone |
| 718 | func (service *MessageService) HandleMessageSent(ctx context.Context, params HandleMessageParams) error { |
| 719 | ctx, span := service.tracer.Start(ctx) |
| 720 | defer span.End() |
| 721 | |
| 722 | ctxLogger := service.tracer.CtxLogger(service.logger, span) |
| 723 | |
| 724 | message, err := service.repository.Load(ctx, params.UserID, params.ID) |
| 725 | if err != nil { |
| 726 | msg := fmt.Sprintf("cannot find message with id [%s]", params.ID) |
| 727 | return service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) |
| 728 | } |
| 729 | |
| 730 | if message.IsSent() || message.IsDelivered() { |
| 731 | ctxLogger.Info(fmt.Sprintf("message [%s] for [%s] has already been processed with status [%s]", message.ID, message.UserID, message.Status)) |
| 732 | return nil |
| 733 | } |
| 734 | |
| 735 | if !message.IsSending() && !message.IsExpired() && !message.IsScheduled() { |
| 736 | msg := fmt.Sprintf("message has wrong status [%s]. expected [%s, %s, %s]", message.Status, entities.MessageStatusSending, entities.MessageStatusExpired, entities.MessageStatusScheduled) |
| 737 | return service.tracer.WrapErrorSpan(span, stacktrace.NewError(msg)) |
| 738 | } |
| 739 | |
| 740 | if err = service.repository.Update(ctx, message.Sent(params.Timestamp)); err != nil { |
| 741 | msg := fmt.Sprintf("cannot update message with id [%s] as sent", message.ID) |
| 742 | return service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) |
| 743 | } |
| 744 | |
| 745 | ctxLogger.Info(fmt.Sprintf("message with id [%s] has been updated to status [%s]", message.ID, message.Status)) |
| 746 | return nil |
| 747 | } |
| 748 | |
| 749 | // HandleMessageFailedParams are parameters for handling a failed message event |
| 750 | type HandleMessageFailedParams struct { |
no test coverage detected