@@ -5,10 +5,11 @@ import (
55 "fmt"
66 "strings"
77
8+ "github.com/carlmjohnson/requests"
9+
810 "firebase.google.com/go/auth"
911 "github.com/NdoleStudio/httpsms/pkg/entities"
1012 "github.com/NdoleStudio/httpsms/pkg/telemetry"
11- brevo "github.com/getbrevo/brevo-go/lib"
1213 "github.com/gofiber/fiber/v2"
1314 "github.com/palantir/stacktrace"
1415)
@@ -18,21 +19,21 @@ type MarketingService struct {
1819 logger telemetry.Logger
1920 tracer telemetry.Tracer
2021 authClient * auth.Client
21- brevoClient * brevo. APIClient
22+ brevoAPIKey string
2223}
2324
2425// NewMarketingService creates a new instance of the MarketingService
2526func NewMarketingService (
2627 logger telemetry.Logger ,
2728 tracer telemetry.Tracer ,
2829 authClient * auth.Client ,
29- brevoClient * brevo. APIClient ,
30+ brevoAPIKey string ,
3031) * MarketingService {
3132 return & MarketingService {
3233 logger : logger .WithService (fmt .Sprintf ("%T" , & MarketingService {})),
3334 tracer : tracer ,
3435 authClient : authClient ,
35- brevoClient : brevoClient ,
36+ brevoAPIKey : brevoAPIKey ,
3637 }
3738}
3839
@@ -41,17 +42,16 @@ func (service *MarketingService) DeleteUser(ctx context.Context, userID entities
4142 ctx , span , ctxLogger := service .tracer .StartWithLogger (ctx , service .logger )
4243 defer span .End ()
4344
44- if service .brevoClient == nil {
45- ctxLogger .Warn (stacktrace .NewError ("brevo client is not initialized, skipping adding user to list" ))
46- return
47- }
48-
49- response , err := service .brevoClient .ContactsApi .DeleteContact (ctx , userID .String ())
45+ err := requests .URL (fmt .Sprintf ("https://api.brevo.com/v3/contacts/%s?identifierType=ext_id" , userID )).
46+ Header ("api-key" , service .brevoAPIKey ).
47+ Delete ().
48+ CheckStatus (fiber .StatusNoContent ).
49+ Fetch (ctx )
5050 if err != nil {
5151 return service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , fmt .Sprintf ("cannot delete user with id [%s] from brevo list" , userID )))
5252 }
5353
54- ctxLogger .Info (fmt .Sprintf ("deleted user with ID [%s] from brevo list with status [%s]" , userID , response . Status ))
54+ ctxLogger .Info (fmt .Sprintf ("deleted user with ID [%s] from brevo list with status [%s]" , userID , fiber . StatusNoContent ))
5555 return nil
5656}
5757
@@ -60,32 +60,34 @@ func (service *MarketingService) AddToList(ctx context.Context, user *entities.U
6060 ctx , span , ctxLogger := service .tracer .StartWithLogger (ctx , service .logger )
6161 defer span .End ()
6262
63- if service .brevoClient == nil {
64- ctxLogger .Warn (stacktrace .NewError ("brevo client is not initialized, skipping adding user to list" ))
65- return
66- }
67-
6863 userRecord , err := service .authClient .GetUser (ctx , string (user .ID ))
6964 if err != nil {
7065 msg := fmt .Sprintf ("cannot get auth user with id [%s]" , user .ID )
7166 ctxLogger .Error (stacktrace .Propagate (err , msg ))
7267 return
7368 }
7469
75- contact , _ , err := service .brevoClient .ContactsApi .CreateContact (ctx , brevo.CreateContact {
76- Email : userRecord .Email ,
77- Attributes : service .brevoAttributes (userRecord ),
78- ExtId : userRecord .UID ,
79- ListIds : []int64 {9 },
80- UpdateEnabled : true ,
81- })
70+ var response string
71+ err = requests .URL ("https://api.brevo.com/v3/contacts" ).
72+ Header ("api-key" , service .brevoAPIKey ).
73+ Post ().
74+ BodyJSON (fiber.Map {
75+ "email" : userRecord .Email ,
76+ "ext_id" : userRecord .UID ,
77+ "attributes" : service .brevoAttributes (userRecord ),
78+ "listIds" : []int64 {9 },
79+ "updateEnabled" : true ,
80+ }).
81+ CheckStatus (fiber .StatusCreated , fiber .StatusNoContent ).
82+ ToString (& response ).
83+ Fetch (ctx )
8284 if err != nil {
8385 msg := fmt .Sprintf ("cannot add user with id [%s] to brevo list" , user .ID )
8486 ctxLogger .Error (stacktrace .Propagate (err , msg ))
8587 return
8688 }
8789
88- ctxLogger .Info (fmt .Sprintf ("user [%s] added to list brevo list with brevo ID [%d ]" , user .ID , contact . Id ))
90+ ctxLogger .Info (fmt .Sprintf ("user [%s] added to list brevo list with brevo response [%s ]" , user .ID , response ))
8991}
9092
9193func (service * MarketingService ) brevoAttributes (user * auth.UserRecord ) map [string ]any {
@@ -96,11 +98,11 @@ func (service *MarketingService) brevoAttributes(user *auth.UserRecord) map[stri
9698
9799 parts := strings .Split (name , " " )
98100 if len (parts ) == 1 {
99- return fiber.Map {"FNAME " : name }
101+ return fiber.Map {"FIRSTNAME " : name }
100102 }
101103
102104 return fiber.Map {
103- "FNAME " : strings .Join (parts [0 :len (parts )- 1 ], " " ),
104- "LNAME" : parts [len (parts )- 1 ],
105+ "FIRSTNAME " : strings .Join (parts [0 :len (parts )- 1 ], " " ),
106+ "LASTNAME" : parts [len (parts )- 1 ],
105107 }
106108}
0 commit comments