From 4126e56d69f2b765b4b7916b2b0872ceab43e267 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Sun, 17 May 2026 21:16:04 +0200 Subject: [PATCH] feat: add episode domain types --- internal/domain/episodes.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 internal/domain/episodes.go 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 +}