app.go 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. assetPublisher := assets.NewOSSUtilPublisher(cfg.OSSUtilPath, cfg.OSSUtilConfigFile, cfg.AssetBucketRoot, cfg.AssetPublicBaseURL)
  25. authService := service.NewAuthService(service.AuthSettings{
  26. AppEnv: cfg.AppEnv,
  27. RefreshTTL: cfg.RefreshTTL,
  28. SMSCodeTTL: cfg.SMSCodeTTL,
  29. SMSCodeCooldown: cfg.SMSCodeCooldown,
  30. SMSProvider: cfg.SMSProvider,
  31. DevSMSCode: cfg.DevSMSCode,
  32. WechatMini: wechatMiniClient,
  33. }, store, jwtManager)
  34. entryService := service.NewEntryService(store)
  35. entryHomeService := service.NewEntryHomeService(store)
  36. adminAssetService := service.NewAdminAssetService(store, cfg.AssetBaseURL, assetPublisher)
  37. adminResourceService := service.NewAdminResourceService(store)
  38. adminProductionService := service.NewAdminProductionService(store)
  39. adminEventService := service.NewAdminEventService(store)
  40. opsAuthService := service.NewOpsAuthService(service.OpsAuthSettings{
  41. AppEnv: cfg.AppEnv,
  42. RefreshTTL: cfg.RefreshTTL,
  43. SMSCodeTTL: cfg.SMSCodeTTL,
  44. SMSCodeCooldown: cfg.SMSCodeCooldown,
  45. SMSProvider: cfg.SMSProvider,
  46. DevSMSCode: cfg.DevSMSCode,
  47. }, store, jwtManager)
  48. opsSummaryService := service.NewOpsSummaryService(store)
  49. eventService := service.NewEventService(store)
  50. eventPlayService := service.NewEventPlayService(store)
  51. configService := service.NewConfigService(store, cfg.LocalEventDir, cfg.AssetBaseURL, assetPublisher)
  52. adminPipelineService := service.NewAdminPipelineService(store, configService)
  53. homeService := service.NewHomeService(store)
  54. mapExperienceService := service.NewMapExperienceService(store)
  55. publicExperienceService := service.NewPublicExperienceService(store, mapExperienceService, eventService)
  56. profileService := service.NewProfileService(store)
  57. resultService := service.NewResultService(store)
  58. sessionService := service.NewSessionService(store)
  59. devService := service.NewDevService(cfg.AppEnv, store)
  60. meService := service.NewMeService(store)
  61. router := httpapi.NewRouter(cfg.AppEnv, jwtManager, authService, opsAuthService, opsSummaryService, entryService, entryHomeService, adminAssetService, adminResourceService, adminProductionService, adminEventService, adminPipelineService, eventService, eventPlayService, publicExperienceService, configService, homeService, mapExperienceService, profileService, resultService, sessionService, devService, meService)
  62. return &App{
  63. router: router,
  64. store: store,
  65. }, nil
  66. }
  67. func (a *App) Router() http.Handler {
  68. return a.router
  69. }
  70. func (a *App) Close() {
  71. if a.store != nil {
  72. a.store.Close()
  73. }
  74. }