diff --git a/internal/domain/episodes.go b/internal/domain/episodes.go new file mode 100644 index 0000000..735415a --- /dev/null +++ b/internal/domain/episodes.go @@ -0,0 +1,36 @@ +package domain + +import "context" + +type EpisodeAvailability struct { + Sub []int + Dub []int +} + +type EpisodeAvailabilityProvider interface { + Name() string + ResolveEpisodeProviderID(ctx context.Context, animeID int, titleCandidates []string) (string, error) + GetEpisodeAvailabilityByProviderID(ctx context.Context, providerID string) (EpisodeAvailability, error) +} + +type CanonicalEpisode struct { + Number int `json:"number"` + Title string `json:"title"` + HasSub bool `json:"has_sub"` + HasDub bool `json:"has_dub"` + SubOnly bool `json:"sub_only"` + Filler bool `json:"filler"` + Recap bool `json:"recap"` +} + +type CanonicalEpisodeList struct { + AnimeID int `json:"anime_id"` + Episodes []CanonicalEpisode `json:"episodes"` + Source string `json:"source"` + NextRefreshAt string `json:"next_refresh_at,omitempty"` +} + +type EpisodeService interface { + GetCanonicalEpisodes(ctx context.Context, anime Anime, forceRefresh bool) (CanonicalEpisodeList, error) + RefreshTrackedDue(ctx context.Context, limit int) error +}