44 "context"
55 "fmt"
66
7+ "github.com/NdoleStudio/httpsms/pkg/entities"
8+
79 "github.com/NdoleStudio/httpsms/pkg/events"
810 "github.com/NdoleStudio/httpsms/pkg/services"
911 "github.com/NdoleStudio/httpsms/pkg/telemetry"
@@ -38,6 +40,7 @@ func NewMessageThreadListener(
3840 events .EventTypeMessageSendFailed : l .OnMessagePhoneFailed ,
3941 events .EventTypeMessagePhoneReceived : l .OnMessagePhoneReceived ,
4042 events .EventTypeMessageNotificationScheduled : l .onMessageNotificationScheduled ,
43+ events .EventTypeMessageSendExpired : l .onMessageExpired ,
4144 }
4245}
4346
@@ -56,6 +59,7 @@ func (listener *MessageThreadListener) OnMessageAPISent(ctx context.Context, eve
5659 Owner : payload .Owner ,
5760 Contact : payload .Contact ,
5861 UserID : payload .UserID ,
62+ Status : entities .MessageStatusSent ,
5963 Timestamp : payload .RequestReceivedAt ,
6064 Content : payload .Content ,
6165 MessageID : payload .MessageID ,
@@ -84,6 +88,7 @@ func (listener *MessageThreadListener) OnMessagePhoneSending(ctx context.Context
8488 Owner : payload .Owner ,
8589 UserID : payload .UserID ,
8690 Contact : payload .Contact ,
91+ Status : entities .MessageStatusSending ,
8792 Timestamp : payload .Timestamp ,
8893 Content : payload .Content ,
8994 MessageID : payload .ID ,
@@ -112,6 +117,7 @@ func (listener *MessageThreadListener) OnMessagePhoneSent(ctx context.Context, e
112117 Owner : payload .Owner ,
113118 Contact : payload .Contact ,
114119 UserID : payload .UserID ,
120+ Status : entities .MessageStatusSent ,
115121 Timestamp : payload .Timestamp ,
116122 Content : payload .Content ,
117123 MessageID : payload .ID ,
@@ -140,6 +146,7 @@ func (listener *MessageThreadListener) OnMessagePhoneDelivered(ctx context.Conte
140146 Owner : payload .Owner ,
141147 UserID : payload .UserID ,
142148 Contact : payload .Contact ,
149+ Status : entities .MessageStatusDelivered ,
143150 Timestamp : payload .Timestamp ,
144151 Content : payload .Content ,
145152 MessageID : payload .ID ,
@@ -168,6 +175,7 @@ func (listener *MessageThreadListener) OnMessagePhoneFailed(ctx context.Context,
168175 Owner : payload .Owner ,
169176 Contact : payload .Contact ,
170177 UserID : payload .UserID ,
178+ Status : entities .MessageStatusFailed ,
171179 Timestamp : payload .Timestamp ,
172180 Content : payload .Content ,
173181 MessageID : payload .ID ,
@@ -197,6 +205,7 @@ func (listener *MessageThreadListener) OnMessagePhoneReceived(ctx context.Contex
197205 Contact : payload .Contact ,
198206 Timestamp : payload .Timestamp ,
199207 UserID : payload .UserID ,
208+ Status : entities .MessageStatusReceived ,
200209 Content : payload .Content ,
201210 MessageID : payload .MessageID ,
202211 }
@@ -226,6 +235,36 @@ func (listener *MessageThreadListener) onMessageNotificationScheduled(ctx contex
226235 Timestamp : payload .ScheduledAt ,
227236 UserID : payload .UserID ,
228237 Content : payload .Content ,
238+ Status : entities .MessageStatusScheduled ,
239+ MessageID : payload .MessageID ,
240+ }
241+
242+ if err := listener .service .UpdateThread (ctx , updateParams ); err != nil {
243+ msg := fmt .Sprintf ("cannot update thread for message with ID [%s] for event with ID [%s]" , updateParams .MessageID , event .ID ())
244+ return listener .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
245+ }
246+
247+ return nil
248+ }
249+
250+ // onMessageNotificationScheduled handles the events.EventTypeMessageNotificationScheduled event
251+ func (listener * MessageThreadListener ) onMessageExpired (ctx context.Context , event cloudevents.Event ) error {
252+ ctx , span := listener .tracer .Start (ctx )
253+ defer span .End ()
254+
255+ var payload events.MessageSendExpiredPayload
256+ if err := event .DataAs (& payload ); err != nil {
257+ msg := fmt .Sprintf ("cannot decode [%s] into [%T]" , event .Data (), payload )
258+ return listener .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
259+ }
260+
261+ updateParams := services.MessageThreadUpdateParams {
262+ Owner : payload .Owner ,
263+ Contact : payload .Contact ,
264+ Timestamp : payload .Timestamp ,
265+ UserID : payload .UserID ,
266+ Content : payload .Content ,
267+ Status : entities .MessageStatusExpired ,
229268 MessageID : payload .MessageID ,
230269 }
231270
0 commit comments