diff --git a/internal/anime/handler/handler.go b/internal/anime/handler/handler.go index 79ae397..3f957a2 100644 --- a/internal/anime/handler/handler.go +++ b/internal/anime/handler/handler.go @@ -20,13 +20,20 @@ import ( ) type AnimeHandler struct { - svc domain.AnimeService + svc Service watchlistSvc domain.WatchlistService scheduleCacheMu sync.Mutex scheduleCache map[string]cachedWeekSchedule } +type Service interface { + domain.AnimeCatalogService + domain.AnimeDiscoverService + domain.AnimeSearchService + domain.AnimeDetailsService +} + type cachedWeekSchedule struct { fetchedAt time.Time value animeschedule.WeekSchedule @@ -40,7 +47,7 @@ func wrapAnimes(in []jikan.Anime) []domain.Anime { return out } -func NewAnimeHandler(svc domain.AnimeService, watchlistSvc domain.WatchlistService) *AnimeHandler { +func NewAnimeHandler(svc Service, watchlistSvc domain.WatchlistService) *AnimeHandler { return &AnimeHandler{ svc: svc, watchlistSvc: watchlistSvc, diff --git a/internal/anime/module.go b/internal/anime/module.go index 9dbe633..a39bd32 100644 --- a/internal/anime/module.go +++ b/internal/anime/module.go @@ -4,6 +4,7 @@ import ( "mal/internal/anime/handler" "mal/internal/anime/repository" "mal/internal/anime/service" + "mal/internal/domain" "mal/internal/server" "go.uber.org/fx" @@ -12,7 +13,15 @@ import ( var Module = fx.Options( fx.Provide( repository.NewAnimeRepository, - service.NewAnimeService, + fx.Annotate( + service.NewAnimeService, + fx.As(new(handler.Service)), + fx.As(new(domain.AnimeCatalogService)), + fx.As(new(domain.AnimeDiscoverService)), + fx.As(new(domain.AnimeSearchService)), + fx.As(new(domain.AnimeDetailsService)), + fx.As(new(domain.AnimePlaybackService)), + ), handler.NewAnimeHandler, ), fx.Provide( diff --git a/internal/anime/service/service.go b/internal/anime/service/service.go index 87be24f..20796b8 100644 --- a/internal/anime/service/service.go +++ b/internal/anime/service/service.go @@ -29,7 +29,7 @@ func wrapAnimes(in []jikan.Anime) []domain.Anime { return out } -func NewAnimeService(jikan *jikan.Client, repo domain.AnimeRepository) domain.AnimeService { +func NewAnimeService(jikan *jikan.Client, repo domain.AnimeRepository) *animeService { return &animeService{jikan: jikan, repo: repo} }