CheckExpired checks if a message has expired
(ctx context.Context, params MessageCheckExpired)
| 960 | |
| 961 | // CheckExpired checks if a message has expired |
| 962 | func (service *MessageService) CheckExpired(ctx context.Context, params MessageCheckExpired) error { |
| 963 | ctx, span := service.tracer.Start(ctx) |
| 964 | defer span.End() |
| 965 | |
| 966 | ctxLogger := service.tracer.CtxLogger(service.logger, span) |
| 967 | |
| 968 | message, err := service.repository.Load(ctx, params.UserID, params.MessageID) |
| 969 | if stacktrace.GetCode(err) == repositories.ErrCodeNotFound { |
| 970 | ctxLogger.Info(fmt.Sprintf("message has been deleted for userID [%s] and messageID [%s]", params.UserID, params.MessageID)) |
| 971 | return nil |
| 972 | } |
| 973 | |
| 974 | if err != nil { |
| 975 | msg := fmt.Sprintf("cannot load message with userID [%s] and messageID [%s]", params.UserID, params.MessageID) |
| 976 | return service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) |
| 977 | } |
| 978 | |
| 979 | if !message.IsPending() && !message.IsSending() && !message.IsScheduled() { |
| 980 | ctxLogger.Info(fmt.Sprintf("message with ID [%s] has status [%s] and is not expired", message.ID, message.Status)) |
| 981 | return nil |
| 982 | } |
| 983 | |
| 984 | event, err := service.createMessageSendExpiredEvent(params.Source, events.MessageSendExpiredPayload{ |
| 985 | MessageID: message.ID, |
| 986 | Owner: message.Owner, |
| 987 | Contact: message.Contact, |
| 988 | Encrypted: message.Encrypted, |
| 989 | RequestID: message.RequestID, |
| 990 | IsFinal: message.SendAttemptCount == message.MaxSendAttempts, |
| 991 | SendAttemptCount: message.SendAttemptCount, |
| 992 | UserID: message.UserID, |
| 993 | Timestamp: time.Now().UTC(), |
| 994 | Content: message.Content, |
| 995 | SIM: message.SIM, |
| 996 | }) |
| 997 | if err != nil { |
| 998 | msg := fmt.Sprintf("cannot create event [%s] for message with id [%s]", events.EventTypeMessageSendExpired, params.MessageID) |
| 999 | return service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) |
| 1000 | } |
| 1001 | |
| 1002 | if err = service.eventDispatcher.Dispatch(ctx, event); err != nil { |
| 1003 | msg := fmt.Sprintf("cannot dispatch event [%s] for message with ID [%s]", event.Type(), params.MessageID) |
| 1004 | return service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) |
| 1005 | } |
| 1006 | |
| 1007 | ctxLogger.Info(fmt.Sprintf("message [%s] has expired with status [%s]", params.MessageID, message.Status)) |
| 1008 | return nil |
| 1009 | } |
| 1010 | |
| 1011 | // MessageSearchParams are parameters for searching messages |
| 1012 | type MessageSearchParams struct { |
no test coverage detected