Files
mal/internal/domain/anime.go

197 lines
4.4 KiB
Go

package domain
import (
"context"
"mal/integrations/jikan"
"mal/internal/db"
)
type Anime struct {
jikan.Anime
}
type Genre struct {
MalID int
Name string
}
type CharacterPerson struct {
MalID int
URL string
Name string
Images struct {
Jpg struct {
ImageURL string
}
}
}
type CharacterVoiceActor struct {
Person CharacterPerson
Language string
}
type CharacterEntry struct {
Character struct {
MalID int
URL string
Name string
Images struct {
Jpg struct {
ImageURL string
}
Webp struct {
ImageURL string
SmallImageURL string
}
}
}
Role string
VoiceActors []CharacterVoiceActor
}
type RecommendationEntry struct {
Entry struct {
MalID int
URL string
Title string
Images struct {
Webp struct {
LargeImageURL string
}
}
}
URL string
Votes int
}
type StaffEntry struct {
Person CharacterPerson
Positions []string
}
type StatisticsScore struct {
Score int
Votes int
Percentage float64
}
type Statistics struct {
Watching int
Completed int
OnHold int
Dropped int
PlanToWatch int
Total int
Scores []StatisticsScore
}
type ThemesData struct {
Openings []string
Endings []string
}
type ReviewReactions struct {
Overall int
Nice int
LoveIt int
Funny int
Confusing int
Informative int
WellWritten int
Creative int
}
type ReviewUser struct {
URL string
Username string
Images struct {
Jpg struct {
ImageURL string
}
Webp struct {
ImageURL string
}
}
}
type ReviewEntry struct {
MalID int
URL string
Type string
Reactions ReviewReactions
Date string
Review string
Score int
Tags []string
IsSpoiler bool
IsPreliminary bool
EpisodesSeen int
User ReviewUser
}
type AnimeCatalogService interface {
GetCatalogSection(ctx context.Context, userID string, section string) (CatalogSectionData, error)
}
type AnimeDiscoverService interface {
GetDiscoverSection(ctx context.Context, userID string, section string) (DiscoverSectionData, error)
GetDiscoverForYou(ctx context.Context, userID string) (DiscoverSectionData, error)
GetAiringSchedule(ctx context.Context, userID string) ([]Anime, error)
}
type AnimeSearchService interface {
SearchAdvanced(ctx context.Context, q, animeType, status, orderBy, sort string, genres []int, studioID int, sfw bool, page, limit int) (jikan.SearchResult, error)
GetProducerNameByID(ctx context.Context, id int) (string, error)
GetProducers(ctx context.Context, query string, page int, limit int) (jikan.ProducerListResult, error)
GetGenres(ctx context.Context) ([]Genre, error)
}
type AnimeDetailsService interface {
GetAnimeByID(ctx context.Context, id int) (Anime, error)
GetCharacters(ctx context.Context, id int) ([]CharacterEntry, error)
GetRecommendations(ctx context.Context, id int) ([]RecommendationEntry, error)
GetRelations(ctx context.Context, id int) ([]jikan.RelationEntry, error)
GetEpisodes(ctx context.Context, id int, page int) (jikan.EpisodesResponse, error)
GetAllEpisodes(ctx context.Context, id int) ([]EpisodeData, error)
GetRandomAnime(ctx context.Context) (Anime, error)
GetStaff(ctx context.Context, id int) ([]StaffEntry, error)
GetStatistics(ctx context.Context, id int) (Statistics, error)
GetThemes(ctx context.Context, id int) (ThemesData, error)
GetReviews(ctx context.Context, id int, page int) ([]ReviewEntry, bool, error)
}
type AnimePlaybackService interface {
GetAnimeByID(ctx context.Context, id int) (Anime, error)
GetAllEpisodes(ctx context.Context, id int) ([]EpisodeData, error)
}
type CatalogSectionData struct {
Animes []Anime
ContinueWatching []db.GetContinueWatchingEntriesRow
Section string
WatchlistMap map[int64]bool
Fragment string
}
func (d CatalogSectionData) TemplateFragment() string {
return d.Fragment
}
type DiscoverSectionData struct {
Animes []Anime
Section string
WatchlistMap map[int64]bool
Fragment string
}
func (d DiscoverSectionData) TemplateFragment() string {
return d.Fragment
}
type AnimeRepository interface {
GetUserWatchList(ctx context.Context, userID string) ([]db.GetUserWatchListRow, error)
GetWatchListEntry(ctx context.Context, params db.GetWatchListEntryParams) (db.WatchListEntry, error)
GetContinueWatchingEntries(ctx context.Context, userID string) ([]db.GetContinueWatchingEntriesRow, error)
}