app.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. adminEventService := service.NewAdminEventService(store)
  37. eventService := service.NewEventService(store)
  38. eventPlayService := service.NewEventPlayService(store)
  39. assetPublisher := assets.NewOSSUtilPublisher(cfg.OSSUtilPath, cfg.OSSUtilConfigFile, cfg.AssetBucketRoot, cfg.AssetPublicBaseURL)
  40. configService := service.NewConfigService(store, cfg.LocalEventDir, cfg.AssetBaseURL, assetPublisher)
  41. adminPipelineService := service.NewAdminPipelineService(store, configService)
  42. homeService := service.NewHomeService(store)
  43. profileService := service.NewProfileService(store)
  44. resultService := service.NewResultService(store)
  45. sessionService := service.NewSessionService(store)
  46. devService := service.NewDevService(cfg.AppEnv, store)
  47. meService := service.NewMeService(store)
  48. router := httpapi.NewRouter(cfg.AppEnv, jwtManager, authService, entryService, entryHomeService, adminResourceService, adminEventService, adminPipelineService, eventService, eventPlayService, configService, homeService, profileService, resultService, sessionService, devService, meService)
  49. return &App{
  50. router: router,
  51. store: store,
  52. }, nil
  53. }
  54. func (a *App) Router() http.Handler {
  55. return a.router
  56. }
  57. func (a *App) Close() {
  58. if a.store != nil {
  59. a.store.Close()
  60. }
  61. }