@@ -86,6 +86,62 @@ func (service *MessageService) GetMessages(ctx context.Context, params MessageGe
8686 return messages , nil
8787}
8888
89+ // MessageStorePhoneEventParams parameters registering a message event
90+ type MessageStorePhoneEventParams struct {
91+ MessageID uuid.UUID
92+ EventName entities.MessageEventName
93+ Timestamp time.Time
94+ Source string
95+ }
96+
97+ // StoreEvent handles event generated by a mobile phone
98+ func (service * MessageService ) StoreEvent (ctx context.Context , params MessageStorePhoneEventParams ) (* entities.Message , error ) {
99+ ctx , span := service .tracer .Start (ctx )
100+ defer span .End ()
101+
102+ message , err := service .repository .Load (ctx , params .MessageID )
103+ if err != nil {
104+ msg := fmt .Sprintf ("could not fetch messages with parms [%+#v]" , params )
105+ return nil , service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
106+ }
107+
108+ switch params .EventName {
109+ case entities .MessageEventNameSent :
110+ err = service .handleMessageSentEvent (ctx , params , message )
111+ default :
112+ return nil , service .tracer .WrapErrorSpan (span , stacktrace .NewError (fmt .Sprintf ("cannot handle message event [%s]" , params .EventName )))
113+ }
114+
115+ if err != nil {
116+ msg := fmt .Sprintf ("could not handle phone event [%s] for message with id [%s]" , params .EventName , message .ID )
117+ return nil , service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
118+ }
119+
120+ return service .repository .Load (ctx , params .MessageID )
121+ }
122+
123+ func (service * MessageService ) handleMessageSentEvent (ctx context.Context , params MessageStorePhoneEventParams , message * entities.Message ) error {
124+ ctx , span := service .tracer .Start (ctx )
125+ defer span .End ()
126+
127+ event , err := service .createMessagePhoneSentEvent (params .Source , events.MessagePhoneSentPayload {
128+ ID : message .ID ,
129+ From : message .From ,
130+ To : message .To ,
131+ Content : message .Content ,
132+ })
133+ if err != nil {
134+ msg := fmt .Sprintf ("cannot create event [%s] for message [%s]" , events .EventTypeMessagePhoneSent , message .ID )
135+ return service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
136+ }
137+
138+ if err = service .eventDispatcher .Dispatch (ctx , event ); err != nil {
139+ msg := fmt .Sprintf ("cannot dispatch event type [%s] and id [%s]" , event .Type (), event .ID ())
140+ return service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
141+ }
142+ return nil
143+ }
144+
89145func (service * MessageService ) handleOutstandingMessages (ctx context.Context , source string , messages * []entities.Message ) * []entities.Message {
90146 ctx , span := service .tracer .Start (ctx )
91147 defer span .End ()
@@ -278,6 +334,10 @@ func (service *MessageService) createMessagePhoneSendingEvent(source string, pay
278334 return service .createEvent (events .EventTypeMessagePhoneSending , source , payload )
279335}
280336
337+ func (service * MessageService ) createMessagePhoneSentEvent (source string , payload events.MessagePhoneSentPayload ) (cloudevents.Event , error ) {
338+ return service .createEvent (events .EventTypeMessagePhoneSent , source , payload )
339+ }
340+
281341func (service * MessageService ) createEvent (eventType string , source string , payload any ) (cloudevents.Event , error ) {
282342 event := cloudevents .NewEvent ()
283343
0 commit comments