@@ -101,6 +101,41 @@ func (service *LemonsqueezyService) HandleSubscriptionCanceledEvent(ctx context.
101101 return nil
102102}
103103
104+ // HandleSubscriptionUpdatedEvent handles the subscription_cancelled lemonsqueezy event
105+ func (service * LemonsqueezyService ) HandleSubscriptionUpdatedEvent (ctx context.Context , source string , request * lemonsqueezy.WebhookRequestSubscription ) error {
106+ ctx , span , ctxLogger := service .tracer .StartWithLogger (ctx , service .logger )
107+ defer span .End ()
108+
109+ user , err := service .userRepository .LoadBySubscriptionID (ctx , request .Data .ID )
110+ if err != nil {
111+ msg := fmt .Sprintf ("cannot load user with subscription ID [%s]" , request .Data .ID )
112+ return stacktrace .Propagate (err , msg )
113+ }
114+
115+ payload := & events.UserSubscriptionUpdatedPayload {
116+ UserID : user .ID ,
117+ SubscriptionUpdatedAt : request .Data .Attributes .UpdatedAt ,
118+ SubscriptionID : request .Data .ID ,
119+ SubscriptionName : service .subscriptionName (request .Data .Attributes .VariantName ),
120+ SubscriptionEndsAt : * request .Data .Attributes .EndsAt ,
121+ SubscriptionRenewsAt : request .Data .Attributes .RenewsAt ,
122+ SubscriptionStatus : request .Data .Attributes .Status ,
123+ }
124+
125+ event , err := service .createEvent (events .UserSubscriptionUpdated , source , payload )
126+ if err != nil {
127+ msg := fmt .Sprintf ("cannot created [%s] event for user [%s]" , events .UserSubscriptionUpdated , payload .UserID )
128+ return stacktrace .Propagate (err , msg )
129+ }
130+
131+ if err = service .eventDispatcher .Dispatch (ctx , event ); err != nil {
132+ msg := fmt .Sprintf ("cannot dispatch [%s] event for user [%s]" , event .Type (), payload .UserID )
133+ return stacktrace .Propagate (err , msg )
134+ }
135+ ctxLogger .Info (fmt .Sprintf ("[%s] subscription [%s] updated for user [%s]" , payload .SubscriptionName , payload .SubscriptionID , payload .UserID ))
136+ return nil
137+ }
138+
104139// HandleSubscriptionExpiredEvent handles the subscription_expired lemonsqueezy event
105140func (service * LemonsqueezyService ) HandleSubscriptionExpiredEvent (ctx context.Context , source string , request * lemonsqueezy.WebhookRequestSubscription ) error {
106141 ctx , span , ctxLogger := service .tracer .StartWithLogger (ctx , service .logger )
0 commit comments