MCPcopy Index your code
hub / github.com/NdoleStudio/httpsms / DeleteMessage

Method DeleteMessage

api/pkg/services/message_service.go:142–190  ·  view source on GitHub ↗

DeleteMessage deletes a message from the database

(ctx context.Context, source string, message *entities.Message)

Source from the content-addressed store, hash-verified

140
141// DeleteMessage deletes a message from the database
142func (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
193func (service *MessageService) DeleteByOwnerAndContact(ctx context.Context, userID entities.UserID, owner, contact string) error {

Callers 1

DeleteMethod · 0.80

Calls 8

createEventMethod · 0.80
StartMethod · 0.65
CtxLoggerMethod · 0.65
DeleteMethod · 0.65
WrapErrorSpanMethod · 0.65
LastMessageMethod · 0.65
InfoMethod · 0.65
DispatchMethod · 0.45

Tested by

no test coverage detected