app.go 939 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package app
  2. import (
  3. "context"
  4. "fmt"
  5. "net/http"
  6. "time"
  7. "viewer/internal/albums"
  8. cfgpkg "viewer/internal/config"
  9. "viewer/internal/feed"
  10. "viewer/internal/httpapi"
  11. "viewer/internal/images"
  12. "viewer/internal/storage"
  13. )
  14. func Run(ctx context.Context) error {
  15. cfg, err := cfgpkg.Load()
  16. if err != nil {
  17. return err
  18. }
  19. store, err := storage.NewS3Store(ctx, cfg)
  20. if err != nil {
  21. return err
  22. }
  23. albumService := albums.NewService(cfg, store, albums.NewIndexer())
  24. httpapi.Warmup(ctx, albumService)
  25. feedService := feed.NewService(albumService)
  26. imageService, err := images.NewService(albumService, store, cfg.CacheDir, cfg.ZipCacheDir)
  27. if err != nil {
  28. return err
  29. }
  30. h := httpapi.New(albumService, feedService, imageService, cfg.MaxUploadBytes).Router()
  31. srv := &http.Server{
  32. Addr: fmt.Sprintf(":%d", cfg.Port),
  33. Handler: h,
  34. ReadHeaderTimeout: 10 * time.Second,
  35. }
  36. return srv.ListenAndServe()
  37. }