70 lines
2.4 KiB
Go
70 lines
2.4 KiB
Go
package app
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"cmr-backend/internal/httpapi"
|
|
"cmr-backend/internal/platform/assets"
|
|
"cmr-backend/internal/platform/jwtx"
|
|
"cmr-backend/internal/platform/wechatmini"
|
|
"cmr-backend/internal/service"
|
|
"cmr-backend/internal/store/postgres"
|
|
)
|
|
|
|
type App struct {
|
|
router http.Handler
|
|
store *postgres.Store
|
|
}
|
|
|
|
func New(ctx context.Context, cfg Config) (*App, error) {
|
|
pool, err := postgres.Open(ctx, cfg.DatabaseURL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
store := postgres.NewStore(pool)
|
|
jwtManager := jwtx.NewManager(cfg.JWTIssuer, cfg.JWTAccessSecret, cfg.JWTAccessTTL)
|
|
wechatMiniClient := wechatmini.NewClient(cfg.WechatMiniAppID, cfg.WechatMiniSecret, cfg.WechatMiniDevPrefix)
|
|
authService := service.NewAuthService(service.AuthSettings{
|
|
AppEnv: cfg.AppEnv,
|
|
RefreshTTL: cfg.RefreshTTL,
|
|
SMSCodeTTL: cfg.SMSCodeTTL,
|
|
SMSCodeCooldown: cfg.SMSCodeCooldown,
|
|
SMSProvider: cfg.SMSProvider,
|
|
DevSMSCode: cfg.DevSMSCode,
|
|
WechatMini: wechatMiniClient,
|
|
}, store, jwtManager)
|
|
entryService := service.NewEntryService(store)
|
|
entryHomeService := service.NewEntryHomeService(store)
|
|
adminResourceService := service.NewAdminResourceService(store)
|
|
adminEventService := service.NewAdminEventService(store)
|
|
eventService := service.NewEventService(store)
|
|
eventPlayService := service.NewEventPlayService(store)
|
|
assetPublisher := assets.NewOSSUtilPublisher(cfg.OSSUtilPath, cfg.OSSUtilConfigFile, cfg.AssetBucketRoot, cfg.AssetPublicBaseURL)
|
|
configService := service.NewConfigService(store, cfg.LocalEventDir, cfg.AssetBaseURL, assetPublisher)
|
|
adminPipelineService := service.NewAdminPipelineService(store, configService)
|
|
homeService := service.NewHomeService(store)
|
|
profileService := service.NewProfileService(store)
|
|
resultService := service.NewResultService(store)
|
|
sessionService := service.NewSessionService(store)
|
|
devService := service.NewDevService(cfg.AppEnv, store)
|
|
meService := service.NewMeService(store)
|
|
router := httpapi.NewRouter(cfg.AppEnv, jwtManager, authService, entryService, entryHomeService, adminResourceService, adminEventService, adminPipelineService, eventService, eventPlayService, configService, homeService, profileService, resultService, sessionService, devService, meService)
|
|
|
|
return &App{
|
|
router: router,
|
|
store: store,
|
|
}, nil
|
|
}
|
|
|
|
func (a *App) Router() http.Handler {
|
|
return a.router
|
|
}
|
|
|
|
func (a *App) Close() {
|
|
if a.store != nil {
|
|
a.store.Close()
|
|
}
|
|
}
|