@@ -226,7 +226,7 @@ func (service *MessageService) SendMessage(ctx context.Context, params MessageSe
226226
227227 event , err := service .createMessageAPISentEvent (params .Source , eventPayload )
228228 if err != nil {
229- msg := fmt .Sprintf ("cannot create %T from payload with message id [%s]" , event )
229+ msg := fmt .Sprintf ("cannot create %T from payload with message id [%s]" , event , eventPayload . ID )
230230 return nil , service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
231231 }
232232
@@ -293,14 +293,14 @@ func (service *MessageService) StoreMessage(ctx context.Context, params MessageS
293293 return message , nil
294294}
295295
296- // HandleMessageSendingParams are parameters for registering a new message being sent
297- type HandleMessageSendingParams struct {
296+ // HandleMessageParams are parameters for handling a message event
297+ type HandleMessageParams struct {
298298 ID uuid.UUID
299299 Timestamp time.Time
300300}
301301
302302// HandleMessageSending handles when a message is being sent
303- func (service * MessageService ) HandleMessageSending (ctx context.Context , params HandleMessageSendingParams ) error {
303+ func (service * MessageService ) HandleMessageSending (ctx context.Context , params HandleMessageParams ) error {
304304 ctx , span := service .tracer .Start (ctx )
305305 defer span .End ()
306306
@@ -326,6 +326,33 @@ func (service *MessageService) HandleMessageSending(ctx context.Context, params
326326 return nil
327327}
328328
329+ // HandleMessageSent handles when a message is has been sent by a mobile phone
330+ func (service * MessageService ) HandleMessageSent (ctx context.Context , params HandleMessageParams ) error {
331+ ctx , span := service .tracer .Start (ctx )
332+ defer span .End ()
333+
334+ ctxLogger := service .tracer .CtxLogger (service .logger , span )
335+
336+ message , err := service .repository .Load (ctx , params .ID )
337+ if err != nil {
338+ msg := fmt .Sprintf ("cannot find message with id [%s]" , params .ID )
339+ return service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
340+ }
341+
342+ if ! message .IsSending () {
343+ msg := fmt .Sprintf ("message has wrong status [%s]. expected %s" , message .Status , entities .MessageStatusSending )
344+ return service .tracer .WrapErrorSpan (span , stacktrace .NewError (msg ))
345+ }
346+
347+ if err = service .repository .Update (ctx , message .Sent (params .Timestamp )); err != nil {
348+ msg := fmt .Sprintf ("cannot update message with id [%s] as sent" , message .ID )
349+ return service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
350+ }
351+
352+ ctxLogger .Info (fmt .Sprintf ("message with id [%s] has been updated to status [%s]" , message .ID , message .Status ))
353+ return nil
354+ }
355+
329356func (service * MessageService ) createMessageAPISentEvent (source string , payload events.MessageAPISentPayload ) (cloudevents.Event , error ) {
330357 return service .createEvent (events .EventTypeMessageAPISent , source , payload )
331358}
0 commit comments