77 "strconv"
88 "time"
99
10+ "github.com/NdoleStudio/httpsms/pkg/emails"
11+
1012 cloudtasks "cloud.google.com/go/cloudtasks/apiv2"
1113
1214 "go.opentelemetry.io/otel"
@@ -74,6 +76,7 @@ func NewContainer(projectID string) (container *Container) {
7476 container .RegisterHeartbeatListeners ()
7577
7678 container .RegisterUserRoutes ()
79+ container .RegisterUserListeners ()
7780
7881 container .RegisterPhoneRoutes ()
7982
@@ -184,6 +187,10 @@ func (container *Container) DB() (db *gorm.DB) {
184187 container .logger .Fatal (stacktrace .Propagate (err , fmt .Sprintf ("cannot migrate %T" , & entities.Heartbeat {})))
185188 }
186189
190+ if err = db .AutoMigrate (& entities.HeartbeatMonitor {}); err != nil {
191+ container .logger .Fatal (stacktrace .Propagate (err , fmt .Sprintf ("cannot migrate %T" , & entities.HeartbeatMonitor {})))
192+ }
193+
187194 if err = db .AutoMigrate (& entities.User {}); err != nil {
188195 container .logger .Fatal (stacktrace .Propagate (err , fmt .Sprintf ("cannot migrate %T" , & entities.User {})))
189196 }
@@ -419,6 +426,16 @@ func (container *Container) EventRepository() (repository repositories.EventRepo
419426 )
420427}
421428
429+ // HeartbeatMonitorRepository creates a new instance of repositories.HeartbeatMonitorRepository
430+ func (container * Container ) HeartbeatMonitorRepository () (repository repositories.HeartbeatMonitorRepository ) {
431+ container .logger .Debug ("creating GORM repositories.HeartbeatMonitorRepository" )
432+ return repositories .NewGormHeartbeatMonitorRepository (
433+ container .Logger (),
434+ container .Tracer (),
435+ container .DB (),
436+ )
437+ }
438+
422439// EventListenerLogRepository creates a new instance of repositories.EventListenerLogRepository
423440func (container * Container ) EventListenerLogRepository () (repository repositories.EventListenerLogRepository ) {
424441 container .logger .Debug ("creating GORM repositories.EventListenerLogRepository" )
@@ -436,6 +453,8 @@ func (container *Container) HeartbeatService() (service *services.HeartbeatServi
436453 container .Logger (),
437454 container .Tracer (),
438455 container .HeartbeatRepository (),
456+ container .HeartbeatMonitorRepository (),
457+ container .EventDispatcher (),
439458 )
440459}
441460
@@ -446,6 +465,7 @@ func (container *Container) PhoneService() (service *services.PhoneService) {
446465 container .Logger (),
447466 container .Tracer (),
448467 container .PhoneRepository (),
468+ container .EventDispatcher (),
449469 )
450470}
451471
@@ -456,9 +476,37 @@ func (container *Container) UserService() (service *services.UserService) {
456476 container .Logger (),
457477 container .Tracer (),
458478 container .UserRepository (),
479+ container .Mailer (),
480+ container .UserEmailFactory (),
459481 )
460482}
461483
484+ // Mailer creates a new instance of emails.Mailer
485+ func (container * Container ) Mailer () (mailer emails.Mailer ) {
486+ container .logger .Debug ("creating emails.Mailer" )
487+ return emails .NewSMTPEmailService (
488+ container .Tracer (),
489+ emails.SMTPConfig {
490+ FromName : os .Getenv ("SMTP_FROM_NAME" ),
491+ FromEmail : os .Getenv ("SMTP_FROM_EMAIL" ),
492+ Username : os .Getenv ("SMTP_USERNAME" ),
493+ Password : os .Getenv ("SMTP_PASSWORD" ),
494+ Hostname : os .Getenv ("SMTP_HOST" ),
495+ Port : os .Getenv ("SMTP_PORT" ),
496+ },
497+ )
498+ }
499+
500+ // UserEmailFactory creates a new instance of emails.UserEmailFactory
501+ func (container * Container ) UserEmailFactory () (factory emails.UserEmailFactory ) {
502+ container .logger .Debug ("creating emails.UserEmailFactory" )
503+ return emails .NewHermesUserEmailFactory (& emails.HermesGeneratorConfig {
504+ AppURL : os .Getenv ("APP_URL" ),
505+ AppName : os .Getenv ("APP_NAME" ),
506+ AppLogoURL : os .Getenv ("APP_LOGO_URL" ),
507+ })
508+ }
509+
462510// MessageThreadService creates a new instance of services.MessageService
463511func (container * Container ) MessageThreadService () (service * services.MessageThreadService ) {
464512 container .logger .Debug (fmt .Sprintf ("creating %T" , service ))
@@ -572,6 +620,20 @@ func (container *Container) RegisterHeartbeatListeners() {
572620 }
573621}
574622
623+ // RegisterUserListeners registers event listeners for listeners.UserListener
624+ func (container * Container ) RegisterUserListeners () {
625+ container .logger .Debug (fmt .Sprintf ("registering listners for %T" , listeners.UserListener {}))
626+ _ , routes := listeners .NewUserListener (
627+ container .Logger (),
628+ container .Tracer (),
629+ container .UserService (),
630+ )
631+
632+ for event , handler := range routes {
633+ container .EventDispatcher ().Subscribe (event , handler )
634+ }
635+ }
636+
575637// MessageService creates a new instance of services.MessageService
576638func (container * Container ) MessageService () (service * services.MessageService ) {
577639 container .logger .Debug (fmt .Sprintf ("creating %T" , service ))
0 commit comments