app.go 2.0 KB

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