Files
Gumble-Backend/internal/api/providers.go
Zane Walker 7e940c83a7
Some checks failed
Build & Test / build-test (push) Has been cancelled
Build & Test / swagger-codegen-cli (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
(Feat): Initial Commit
2026-07-03 19:41:31 +05:30

82 lines
2.2 KiB
Go

package api
import (
"database/sql"
"fmt"
"testing"
"time"
"allaboutapps.dev/aw/go-starter/internal/auth"
"allaboutapps.dev/aw/go-starter/internal/config"
"allaboutapps.dev/aw/go-starter/internal/i18n"
"allaboutapps.dev/aw/go-starter/internal/mailer"
"allaboutapps.dev/aw/go-starter/internal/persistence"
"allaboutapps.dev/aw/go-starter/internal/push"
"allaboutapps.dev/aw/go-starter/internal/push/provider"
"github.com/dropbox/godropbox/time2"
"github.com/rs/zerolog/log"
)
// PROVIDERS - define here only providers that for various reasons (e.g. cyclic dependency) can't live in their corresponding packages
// or for wrapping providers that only accept sub-configs to prevent the requirements for defining providers for sub-configs.
// https://github.com/google/wire/blob/main/docs/guide.md#defining-providers
// NewPush creates an instance of the push service and registers the configured push providers.
func NewPush(cfg config.Server, db *sql.DB) (*push.Service, error) {
pusher := push.New(db)
if cfg.Push.UseFCMProvider {
fcmProvider, err := provider.NewFCM(cfg.FCMConfig)
if err != nil {
return nil, fmt.Errorf("failed to create FCM provider: %w", err)
}
pusher.RegisterProvider(fcmProvider)
}
if cfg.Push.UseMockProvider {
log.Warn().Msg("Initializing mock push provider")
mockProvider := provider.NewMock(push.ProviderTypeFCM)
pusher.RegisterProvider(mockProvider)
}
if pusher.GetProviderCount() < 1 {
log.Warn().Msg("No providers registered for push service")
}
return pusher, nil
}
func NewClock(t ...*testing.T) time2.Clock {
var clock time2.Clock
useMock := len(t) > 0 && t[0] != nil
if useMock {
clock = time2.NewMockClock(time.Now())
} else {
clock = time2.DefaultClock
}
return clock
}
func NewAuthService(config config.Server, db *sql.DB, clock time2.Clock) *auth.Service {
return auth.NewService(config, db, clock)
}
func NewMailer(config config.Server) (*mailer.Mailer, error) {
return mailer.NewWithConfig(config.Mailer, config.SMTP)
}
func NewDB(config config.Server) (*sql.DB, error) {
return persistence.NewDB(config.Database)
}
func NewI18N(config config.Server) (*i18n.Service, error) {
return i18n.New(config.I18n)
}
func NoTest() []*testing.T {
return nil
}