app.go 2.2 KB

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