app.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package app
  2. import (
  3. "context"
  4. "net/http"
  5. "cmr-backend/internal/httpapi"
  6. "cmr-backend/internal/platform/assets"
  7. "cmr-backend/internal/platform/jwtx"
  8. "cmr-backend/internal/platform/wechatmini"
  9. "cmr-backend/internal/service"
  10. "cmr-backend/internal/store/postgres"
  11. )
  12. type App struct {
  13. router http.Handler
  14. store *postgres.Store
  15. }
  16. func New(ctx context.Context, cfg Config) (*App, error) {
  17. pool, err := postgres.Open(ctx, cfg.DatabaseURL)
  18. if err != nil {
  19. return nil, err
  20. }
  21. store := postgres.NewStore(pool)
  22. jwtManager := jwtx.NewManager(cfg.JWTIssuer, cfg.JWTAccessSecret, cfg.JWTAccessTTL)
  23. wechatMiniClient := wechatmini.NewClient(cfg.WechatMiniAppID, cfg.WechatMiniSecret, cfg.WechatMiniDevPrefix)
  24. authService := service.NewAuthService(service.AuthSettings{
  25. AppEnv: cfg.AppEnv,
  26. RefreshTTL: cfg.RefreshTTL,
  27. SMSCodeTTL: cfg.SMSCodeTTL,
  28. SMSCodeCooldown: cfg.SMSCodeCooldown,
  29. SMSProvider: cfg.SMSProvider,
  30. DevSMSCode: cfg.DevSMSCode,
  31. WechatMini: wechatMiniClient,
  32. }, store, jwtManager)
  33. entryService := service.NewEntryService(store)
  34. entryHomeService := service.NewEntryHomeService(store)
  35. adminResourceService := service.NewAdminResourceService(store)
  36. adminProductionService := service.NewAdminProductionService(store)
  37. adminEventService := service.NewAdminEventService(store)
  38. eventService := service.NewEventService(store)
  39. eventPlayService := service.NewEventPlayService(store)
  40. assetPublisher := assets.NewOSSUtilPublisher(cfg.OSSUtilPath, cfg.OSSUtilConfigFile, cfg.AssetBucketRoot, cfg.AssetPublicBaseURL)
  41. configService := service.NewConfigService(store, cfg.LocalEventDir, cfg.AssetBaseURL, assetPublisher)
  42. adminPipelineService := service.NewAdminPipelineService(store, configService)
  43. homeService := service.NewHomeService(store)
  44. profileService := service.NewProfileService(store)
  45. resultService := service.NewResultService(store)
  46. sessionService := service.NewSessionService(store)
  47. devService := service.NewDevService(cfg.AppEnv, store)
  48. meService := service.NewMeService(store)
  49. router := httpapi.NewRouter(cfg.AppEnv, jwtManager, authService, entryService, entryHomeService, adminResourceService, adminProductionService, adminEventService, adminPipelineService, eventService, eventPlayService, configService, homeService, profileService, resultService, sessionService, devService, meService)
  50. return &App{
  51. router: router,
  52. store: store,
  53. }, nil
  54. }
  55. func (a *App) Router() http.Handler {
  56. return a.router
  57. }
  58. func (a *App) Close() {
  59. if a.store != nil {
  60. a.store.Close()
  61. }
  62. }