@@ -3,6 +3,7 @@ package email
33import (
44 "context"
55 "encoding/json"
6+ "strings"
67 "time"
78
89 "github.com/resend/resend-go/v3"
@@ -224,29 +225,41 @@ func updateCampaignTarget(ctx context.Context, db *ent.Client, targetID, campaig
224225 eventTime := parseResendEventTime (event .Data .CreatedAt )
225226
226227 switch event .Type {
227- case resend .EventEmailSent , resend . EventEmailDelivered , resend . EventEmailOpened , resend . EventEmailClicked :
228+ case resend .EventEmailSent :
228229 update .SetStatus (enums .AssessmentResponseStatusSent )
229230
230231 if eventTime != nil {
231232 update .SetSentAt (models .DateTime (* eventTime ))
232233 }
233- case resend .EventEmailBounced , resend .EventEmailFailed :
234- metadata := target .Metadata
235- if metadata == nil {
236- metadata = map [string ]any {}
237- }
238-
239- metadata ["resend_event" ] = event .Type
240- metadata ["resend_email_id" ] = event .Data .EmailID
241- metadata ["resend_timestamp" ] = event .Data .CreatedAt
242- update .SetMetadata (metadata )
234+ case resend .EventEmailDelivered , resend .EventEmailOpened , resend .EventEmailClicked :
235+ update .SetStatus (enums .AssessmentResponseStatusSent )
243236 }
244237
238+ update .SetMetadata (getTargetMetadata (target .Metadata , event ))
239+
245240 _ , err = update .Save (ctx )
246241
247242 return err
248243}
249244
245+ func getTargetMetadata (metadata map [string ]any , event resendWebhookEvent ) map [string ]any {
246+ if metadata == nil {
247+ metadata = map [string ]any {}
248+ }
249+
250+ eventName := event .Type
251+ if _ , after , found := strings .Cut (event .Type , "." ); found {
252+ eventName = after
253+ }
254+
255+ metadata [eventName ] = map [string ]string {
256+ "email_id" : event .Data .EmailID ,
257+ "timestamp" : event .Data .CreatedAt ,
258+ }
259+
260+ return metadata
261+ }
262+
250263// parseResendEventTime parses a Resend timestamp string and returns a time.Time pointer
251264func parseResendEventTime (value string ) * time.Time {
252265 if value == "" {
0 commit comments