DeleteMessage deletes a message from the database
(ctx context.Context, source string, message *entities.Message)
| 140 | |
| 141 | // DeleteMessage deletes a message from the database |
| 142 | func (service *MessageService) DeleteMessage(ctx context.Context, source string, message *entities.Message) error { |
| 143 | ctx, span := service.tracer.Start(ctx) |
| 144 | defer span.End() |
| 145 | |
| 146 | ctxLogger := service.tracer.CtxLogger(service.logger, span) |
| 147 | |
| 148 | if err := service.repository.Delete(ctx, message.UserID, message.ID); err != nil { |
| 149 | msg := fmt.Sprintf("could not delete message with ID [%s] for user wit ID [%s]", message.ID, message.UserID) |
| 150 | return service.tracer.WrapErrorSpan(span, stacktrace.PropagateWithCode(err, stacktrace.GetCode(err), msg)) |
| 151 | } |
| 152 | |
| 153 | var prevID *uuid.UUID |
| 154 | var prevStatus *entities.MessageStatus |
| 155 | var prevContent *string |
| 156 | previousMessage, err := service.repository.LastMessage(ctx, message.UserID, message.Owner, message.Contact) |
| 157 | if err == nil { |
| 158 | prevID = &previousMessage.ID |
| 159 | prevStatus = &previousMessage.Status |
| 160 | prevContent = &previousMessage.Content |
| 161 | } |
| 162 | |
| 163 | event, err := service.createEvent(events.MessageAPIDeleted, source, &events.MessageAPIDeletedPayload{ |
| 164 | MessageID: message.ID, |
| 165 | UserID: message.UserID, |
| 166 | Owner: message.Owner, |
| 167 | Encrypted: message.Encrypted, |
| 168 | RequestID: message.RequestID, |
| 169 | Contact: message.Contact, |
| 170 | Timestamp: time.Now().UTC(), |
| 171 | Content: message.Content, |
| 172 | PreviousMessageID: prevID, |
| 173 | PreviousMessageStatus: prevStatus, |
| 174 | PreviousMessageContent: prevContent, |
| 175 | SIM: message.SIM, |
| 176 | }) |
| 177 | if err != nil { |
| 178 | msg := fmt.Sprintf("cannot create [%T] for message with ID [%s]", event, message.ID) |
| 179 | return service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) |
| 180 | } |
| 181 | |
| 182 | ctxLogger.Info(fmt.Sprintf("created event [%s] with id [%s] for message [%s]", event.Type(), event.ID(), message.ID)) |
| 183 | if err = service.eventDispatcher.Dispatch(ctx, event); err != nil { |
| 184 | msg := fmt.Sprintf("cannot dispatch event [%s] with id [%s] for message [%s]", event.Type(), event.ID(), message.ID) |
| 185 | return service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) |
| 186 | } |
| 187 | |
| 188 | ctxLogger.Info(fmt.Sprintf("dispatched event [%s] with id [%s] for message [%s]", event.Type(), event.ID(), message.ID)) |
| 189 | return nil |
| 190 | } |
| 191 | |
| 192 | // DeleteByOwnerAndContact deletes all the messages between an owner and a contact |
| 193 | func (service *MessageService) DeleteByOwnerAndContact(ctx context.Context, userID entities.UserID, owner, contact string) error { |
no test coverage detected