82 lines
2.2 KiB
Go
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
|
|
}
|