@@ -37,10 +37,12 @@ func NewMessageListener(
3737 }
3838
3939 return l , map [string ]events.EventListener {
40- events .EventTypeMessageAPISent : l .OnMessageAPISent ,
41- events .EventTypeMessagePhoneSending : l .OnMessagePhoneSending ,
42- events .EventTypeMessagePhoneSent : l .OnMessagePhoneSent ,
43- events .EventTypeMessagePhoneReceived : l .OnMessagePhoneReceived ,
40+ events .EventTypeMessageAPISent : l .OnMessageAPISent ,
41+ events .EventTypeMessagePhoneSending : l .OnMessagePhoneSending ,
42+ events .EventTypeMessagePhoneSent : l .OnMessagePhoneSent ,
43+ events .EventTypeMessagePhoneDelivered : l .OnMessagePhoneDelivered ,
44+ events .EventTypeMessagePhoneFailed : l .OnMessagePhoneFailed ,
45+ events .EventTypeMessagePhoneReceived : l .OnMessagePhoneReceived ,
4446 }
4547}
4648
@@ -158,6 +160,80 @@ func (listener *MessageListener) OnMessagePhoneSent(ctx context.Context, event c
158160 return listener .storeEventListenerLog (ctx , listener .signature (event ), event )
159161}
160162
163+ // OnMessagePhoneDelivered handles the events.EventTypeMessagePhoneDelivered event
164+ func (listener * MessageListener ) OnMessagePhoneDelivered (ctx context.Context , event cloudevents.Event ) error {
165+ ctx , span := listener .tracer .Start (ctx )
166+ defer span .End ()
167+
168+ handled , err := listener .repository .Has (ctx , event .ID (), listener .signature (event ))
169+ if err != nil {
170+ msg := fmt .Sprintf ("cannot verify if event [%s] has been handled by [%T]" , event .ID (), listener .signature (event ))
171+ return listener .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
172+ }
173+
174+ ctxLogger := listener .tracer .CtxLogger (listener .logger , span )
175+
176+ if handled {
177+ ctxLogger .Info (fmt .Sprintf ("event [%s] has already been handled by [%s]" , event .ID (), listener .signature (event )))
178+ return nil
179+ }
180+
181+ var payload events.MessagePhoneDeliveredPayload
182+ if err = event .DataAs (& payload ); err != nil {
183+ msg := fmt .Sprintf ("cannot decode [%s] into [%T]" , event .Data (), payload )
184+ return listener .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
185+ }
186+
187+ handleParams := services.HandleMessageParams {
188+ ID : payload .ID ,
189+ Timestamp : payload .Timestamp ,
190+ }
191+
192+ if err = listener .service .HandleMessageDelivered (ctx , handleParams ); err != nil {
193+ msg := fmt .Sprintf ("cannot handle [%s] for message with ID [%s] for event with ID [%s]" , event .Type (), handleParams .ID , event .ID ())
194+ return listener .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
195+ }
196+
197+ return listener .storeEventListenerLog (ctx , listener .signature (event ), event )
198+ }
199+
200+ // OnMessagePhoneFailed handles the events.EventTypeMessagePhoneFailed event
201+ func (listener * MessageListener ) OnMessagePhoneFailed (ctx context.Context , event cloudevents.Event ) error {
202+ ctx , span := listener .tracer .Start (ctx )
203+ defer span .End ()
204+
205+ handled , err := listener .repository .Has (ctx , event .ID (), listener .signature (event ))
206+ if err != nil {
207+ msg := fmt .Sprintf ("cannot verify if event [%s] has been handled by [%T]" , event .ID (), listener .signature (event ))
208+ return listener .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
209+ }
210+
211+ ctxLogger := listener .tracer .CtxLogger (listener .logger , span )
212+
213+ if handled {
214+ ctxLogger .Info (fmt .Sprintf ("event [%s] has already been handled by [%s]" , event .ID (), listener .signature (event )))
215+ return nil
216+ }
217+
218+ var payload events.MessagePhoneFailedPayload
219+ if err = event .DataAs (& payload ); err != nil {
220+ msg := fmt .Sprintf ("cannot decode [%s] into [%T]" , event .Data (), payload )
221+ return listener .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
222+ }
223+
224+ handleParams := services.HandleMessageParams {
225+ ID : payload .ID ,
226+ Timestamp : payload .Timestamp ,
227+ }
228+
229+ if err = listener .service .HandleMessageFailed (ctx , handleParams ); err != nil {
230+ msg := fmt .Sprintf ("cannot handle [%s] for message with ID [%s] for event with ID [%s]" , event .Type (), handleParams .ID , event .ID ())
231+ return listener .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
232+ }
233+
234+ return listener .storeEventListenerLog (ctx , listener .signature (event ), event )
235+ }
236+
161237// OnMessagePhoneReceived handles the events.EventTypeMessageAPISent event
162238func (listener * MessageListener ) OnMessagePhoneReceived (ctx context.Context , event cloudevents.Event ) error {
163239 ctx , span := listener .tracer .Start (ctx )
0 commit comments