99 "strconv"
1010 "time"
1111
12+ "github.com/NdoleStudio/httpsms/pkg/discord"
13+
1214 mexporter "github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric"
1315 cloudtrace "github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace"
1416 "go.opentelemetry.io/otel/sdk/metric"
@@ -113,6 +115,7 @@ func NewContainer(projectID string, version string) (container *Container) {
113115 container .RegisterWebhookListeners ()
114116
115117 container .RegisterLemonsqueezyRoutes ()
118+ container .RegisterDiscordRoutes ()
116119
117120 // this has to be last since it registers the /* route
118121 container .RegisterSwaggerRoutes ()
@@ -241,6 +244,10 @@ func (container *Container) DB() (db *gorm.DB) {
241244 container .logger .Fatal (stacktrace .Propagate (err , fmt .Sprintf ("cannot migrate %T" , & entities.Webhook {})))
242245 }
243246
247+ if err = db .AutoMigrate (& entities.Discord {}); err != nil {
248+ container .logger .Fatal (stacktrace .Propagate (err , fmt .Sprintf ("cannot migrate %T" , & entities.Discord {})))
249+ }
250+
244251 return container .db
245252}
246253
@@ -424,6 +431,16 @@ func (container *Container) BillingHandlerValidator() (validator *validators.Bil
424431 )
425432}
426433
434+ // DiscordHandlerValidator creates a new instance of validators.DiscordHandlerValidator
435+ func (container * Container ) DiscordHandlerValidator () (validator * validators.DiscordHandlerValidator ) {
436+ container .logger .Debug (fmt .Sprintf ("creating %T" , validator ))
437+ return validators .NewDiscordHandlerValidator (
438+ container .Logger (),
439+ container .Tracer (),
440+ container .DiscordClient (),
441+ )
442+ }
443+
427444// WebhookHandlerValidator creates a new instance of validators.WebhookHandlerValidator
428445func (container * Container ) WebhookHandlerValidator () (validator * validators.WebhookHandlerValidator ) {
429446 container .logger .Debug (fmt .Sprintf ("creating %T" , validator ))
@@ -520,6 +537,16 @@ func (container *Container) BillingUsageRepository() (repository repositories.Bi
520537 )
521538}
522539
540+ // DiscordRepository creates a new instance of repositories.DiscordRepository
541+ func (container * Container ) DiscordRepository () (repository repositories.DiscordRepository ) {
542+ container .logger .Debug ("creating GORM repositories.DiscordRepository" )
543+ return repositories .NewGormDiscordRepository (
544+ container .Logger (),
545+ container .Tracer (),
546+ container .DB (),
547+ )
548+ }
549+
523550// WebhookRepository creates a new instance of repositories.WebhookRepository
524551func (container * Container ) WebhookRepository () (repository repositories.WebhookRepository ) {
525552 container .logger .Debug ("creating GORM repositories.WebhookRepository" )
@@ -606,6 +633,17 @@ func (container *Container) BillingService() (service *services.BillingService)
606633 )
607634}
608635
636+ // DiscordService creates a new instance of services.DiscordService
637+ func (container * Container ) DiscordService () (service * services.DiscordService ) {
638+ container .logger .Debug (fmt .Sprintf ("creating %T" , service ))
639+ return services .NewDiscordService (
640+ container .Logger (),
641+ container .Tracer (),
642+ container .DiscordClient (),
643+ container .DiscordRepository (),
644+ )
645+ }
646+
609647// WebhookService creates a new instance of services.WebhookService
610648func (container * Container ) WebhookService () (service * services.WebhookService ) {
611649 container .logger .Debug (fmt .Sprintf ("creating %T" , service ))
@@ -813,6 +851,18 @@ func (container *Container) LemonsqueezyHandler() (handler *handlers.Lemonsqueez
813851 )
814852}
815853
854+ // DiscordHandler creates a new instance of handlers.DiscordHandler
855+ func (container * Container ) DiscordHandler () (handler * handlers.DiscordHandler ) {
856+ container .logger .Debug (fmt .Sprintf ("creating %T" , handler ))
857+
858+ return handlers .NewDiscordHandler (
859+ container .Logger (),
860+ container .Tracer (),
861+ container .DiscordHandlerValidator (),
862+ container .DiscordService (),
863+ )
864+ }
865+
816866// LemonsqueezyHandlerValidator creates a new instance of validators.LemonsqueezyHandlerValidator
817867func (container * Container ) LemonsqueezyHandlerValidator () (validator * validators.LemonsqueezyHandlerValidator ) {
818868 container .logger .Debug (fmt .Sprintf ("creating %T" , validator ))
@@ -833,12 +883,27 @@ func (container *Container) LemonsqueezyClient() (client *lemonsqueezy.Client) {
833883 )
834884}
835885
836- // RegisterLemonsqueezyRoutes registers routes for the /project-settings prefix
886+ // DiscordClient creates a new instance of discord.Client
887+ func (container * Container ) DiscordClient () (client * discord.Client ) {
888+ container .logger .Debug (fmt .Sprintf ("creating %T" , client ))
889+ return discord .New (
890+ discord .WithHTTPClient (container .HTTPClient ("discord" )),
891+ discord .WithBotToken (os .Getenv ("DISCORD_BOT_TOKEN" )),
892+ )
893+ }
894+
895+ // RegisterLemonsqueezyRoutes registers routes for the /lemonsqueezy prefix
837896func (container * Container ) RegisterLemonsqueezyRoutes () {
838897 container .logger .Debug (fmt .Sprintf ("registering %T routes" , & handlers.LemonsqueezyHandler {}))
839898 container .LemonsqueezyHandler ().RegisterRoutes (container .App ())
840899}
841900
901+ // RegisterDiscordRoutes registers routes for the /discord prefix
902+ func (container * Container ) RegisterDiscordRoutes () {
903+ container .logger .Debug (fmt .Sprintf ("registering %T routes" , & handlers.DiscordHandler {}))
904+ container .DiscordHandler ().RegisterRoutes (container .App (), container .AuthenticatedMiddleware ())
905+ }
906+
842907// RegisterMessageThreadListeners registers event listeners for listeners.MessageThreadListener
843908func (container * Container ) RegisterMessageThreadListeners () {
844909 container .logger .Debug (fmt .Sprintf ("registering listners for %T" , listeners.MessageThreadListener {}))
0 commit comments