88 "os"
99 "time"
1010
11+ "firebase.google.com/go/messaging"
12+
1113 firebase "firebase.google.com/go"
1214 "firebase.google.com/go/auth"
1315 "github.com/NdoleStudio/http-sms-manager/pkg/middlewares"
@@ -62,6 +64,8 @@ func NewContainer(projectID string) (container *Container) {
6264
6365 container .RegisterPhoneRoutes ()
6466
67+ container .RegisterNotificationListeners ()
68+
6569 // this has to be last since it registers the /* route
6670 container .RegisterSwaggerRoutes ()
6771
@@ -185,6 +189,17 @@ func (container *Container) FirebaseAuthClient() (client *auth.Client) {
185189 return authClient
186190}
187191
192+ // FirebaseMessagingClient creates a new instance of messaging.Client
193+ func (container * Container ) FirebaseMessagingClient () (client * messaging.Client ) {
194+ container .logger .Debug (fmt .Sprintf ("creating %T" , client ))
195+ messagingClient , err := container .FirebaseApp ().Messaging (context .Background ())
196+ if err != nil {
197+ msg := "cannot initialize firebase messaging client"
198+ container .logger .Fatal (stacktrace .Propagate (err , msg ))
199+ }
200+ return messagingClient
201+ }
202+
188203// FirebaseCredentials returns firebase credentials as bytes.
189204func (container * Container ) FirebaseCredentials () []byte {
190205 container .logger .Debug ("creating firebase credentials" )
@@ -437,6 +452,20 @@ func (container *Container) RegisterMessageThreadListeners() {
437452 }
438453}
439454
455+ // RegisterNotificationListeners registers event listeners for listeners.NotificationListener
456+ func (container * Container ) RegisterNotificationListeners () {
457+ container .logger .Debug (fmt .Sprintf ("registering listners for %T" , listeners.NotificationListener {}))
458+ _ , routes := listeners .NewNotificationListener (
459+ container .Logger (),
460+ container .Tracer (),
461+ container .NotificationService (),
462+ )
463+
464+ for event , handler := range routes {
465+ container .EventDispatcher ().Subscribe (event , handler )
466+ }
467+ }
468+
440469// RegisterHeartbeatListeners registers event listeners for listeners.HeartbeatListener
441470func (container * Container ) RegisterHeartbeatListeners () {
442471 container .logger .Debug (fmt .Sprintf ("registering listners for %T" , listeners.HeartbeatListener {}))
@@ -462,6 +491,17 @@ func (container *Container) MessageService() (service *services.MessageService)
462491 )
463492}
464493
494+ // NotificationService creates a new instance of services.NotificationService
495+ func (container * Container ) NotificationService () (service * services.NotificationService ) {
496+ container .logger .Debug (fmt .Sprintf ("creating %T" , service ))
497+ return services .NewNotificationService (
498+ container .Logger (),
499+ container .Tracer (),
500+ container .FirebaseMessagingClient (),
501+ container .PhoneRepository (),
502+ )
503+ }
504+
465505// RegisterMessageRoutes registers routes for the /messages prefix
466506func (container * Container ) RegisterMessageRoutes () {
467507 container .logger .Debug (fmt .Sprintf ("registering %T routes" , & handlers.MessageHandler {}))
0 commit comments