Skip to content

Commit c724eac

Browse files
committed
Setup marketting listeners
1 parent 2ff1897 commit c724eac

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

api/pkg/di/container.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ func NewContainer(projectID string, version string) (container *Container) {
143143
container.RegisterDiscordRoutes()
144144
container.RegisterDiscordListeners()
145145

146+
container.RegisterMarketingListeners()
147+
146148
// this has to be last since it registers the /* route
147149
container.RegisterSwaggerRoutes()
148150

@@ -1173,6 +1175,20 @@ func (container *Container) RegisterDiscordListeners() {
11731175
}
11741176
}
11751177

1178+
// RegisterMarketingListeners registers event listeners for listeners.MarketingListener
1179+
func (container *Container) RegisterMarketingListeners() {
1180+
container.logger.Debug(fmt.Sprintf("registering listeners for %T", listeners.MarketingListener{}))
1181+
_, routes := listeners.NewMarketingListener(
1182+
container.Logger(),
1183+
container.Tracer(),
1184+
container.MarketingService(),
1185+
)
1186+
1187+
for event, handler := range routes {
1188+
container.EventDispatcher().Subscribe(event, handler)
1189+
}
1190+
}
1191+
11761192
// RegisterIntegration3CXListeners registers event listeners for listeners.Integration3CXListener
11771193
func (container *Container) RegisterIntegration3CXListeners() {
11781194
container.logger.Debug(fmt.Sprintf("registering listeners for %T", listeners.Integration3CXListener{}))
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package listeners
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/NdoleStudio/httpsms/pkg/events"
8+
"github.com/NdoleStudio/httpsms/pkg/services"
9+
"github.com/NdoleStudio/httpsms/pkg/telemetry"
10+
cloudevents "github.com/cloudevents/sdk-go/v2"
11+
"github.com/palantir/stacktrace"
12+
)
13+
14+
// MarketingListener handled marketing events
15+
type MarketingListener struct {
16+
logger telemetry.Logger
17+
tracer telemetry.Tracer
18+
service *services.MarketingService
19+
}
20+
21+
// NewMarketingListener creates a new instance of MarketingListener
22+
func NewMarketingListener(
23+
logger telemetry.Logger,
24+
tracer telemetry.Tracer,
25+
service *services.MarketingService,
26+
) (l *MarketingListener, routes map[string]events.EventListener) {
27+
l = &MarketingListener{
28+
logger: logger.WithService(fmt.Sprintf("%T", l)),
29+
tracer: tracer,
30+
service: service,
31+
}
32+
33+
return l, map[string]events.EventListener{
34+
events.UserAccountDeleted: l.onUserAccountDeleted,
35+
}
36+
}
37+
38+
func (listener *MarketingListener) onUserAccountDeleted(ctx context.Context, event cloudevents.Event) error {
39+
ctx, span := listener.tracer.Start(ctx)
40+
defer span.End()
41+
42+
var payload events.UserAccountDeletedPayload
43+
if err := event.DataAs(&payload); err != nil {
44+
msg := fmt.Sprintf("cannot decode [%s] into [%T]", event.Data(), payload)
45+
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
46+
}
47+
48+
if err := listener.service.DeleteUser(ctx, payload.UserID); err != nil {
49+
msg := fmt.Sprintf("cannot delete [sendgrid contact] for user [%s] on [%s] event with ID [%s]", payload.UserID, event.Type(), event.ID())
50+
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
51+
}
52+
53+
return nil
54+
}

0 commit comments

Comments
 (0)