(Feat): Initial Commit
This commit is contained in:
81
internal/api/providers.go
Normal file
81
internal/api/providers.go
Normal file
@@ -0,0 +1,81 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user