@@ -11,7 +11,7 @@ import (
1111 "github.com/NdoleStudio/httpsms/pkg/entities"
1212 "github.com/NdoleStudio/httpsms/pkg/events"
1313 "github.com/NdoleStudio/httpsms/pkg/telemetry"
14- lemonsqueezy "github.com/NdoleStudio/lemonsqueezy-go"
14+ "github.com/NdoleStudio/lemonsqueezy-go"
1515 "github.com/palantir/stacktrace"
1616)
1717
@@ -39,13 +39,39 @@ func NewLemonsqueezyService(
3939 }
4040}
4141
42+ // GetUserID gets the user ID from the request
43+ func (service * LemonsqueezyService ) GetUserID (ctx context.Context , request * lemonsqueezy.WebhookRequestSubscription ) (entities.UserID , error ) {
44+ ctx , span , ctxLogger := service .tracer .StartWithLogger (ctx , service .logger )
45+ defer span .End ()
46+
47+ userID , ok := request .Meta .CustomData ["user_id" ].(string )
48+ if ok {
49+ return entities .UserID (userID ), nil
50+ }
51+
52+ ctxLogger .Info (fmt .Sprintf ("user_id not found in request meta data. Searching via email [%s]" , request .Data .Attributes .UserEmail ))
53+ user , err := service .userRepository .LoadByEmail (ctx , request .Data .Attributes .UserEmail )
54+ if err != nil {
55+ msg := fmt .Sprintf ("cannot load user with email [%s]" , request .Data .Attributes .UserEmail )
56+ return "" , service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
57+ }
58+
59+ return user .ID , nil
60+ }
61+
4262// HandleSubscriptionCreatedEvent handles the subscription_created lemonsqueezy event
4363func (service * LemonsqueezyService ) HandleSubscriptionCreatedEvent (ctx context.Context , source string , request * lemonsqueezy.WebhookRequestSubscription ) error {
4464 ctx , span , ctxLogger := service .tracer .StartWithLogger (ctx , service .logger )
4565 defer span .End ()
4666
67+ userID , err := service .GetUserID (ctx , request )
68+ if err != nil {
69+ msg := fmt .Sprintf ("cannot get user ID for subscription created event with ID [%s]" , request .Data .ID )
70+ return stacktrace .Propagate (err , msg )
71+ }
72+
4773 payload := & events.UserSubscriptionCreatedPayload {
48- UserID : entities . UserID ( request . Meta . CustomData [ "user_id" ].( string )) ,
74+ UserID : userID ,
4975 SubscriptionCreatedAt : request .Data .Attributes .CreatedAt ,
5076 SubscriptionID : request .Data .ID ,
5177 SubscriptionName : service .subscriptionName (request .Data .Attributes .VariantName ),
0 commit comments