198 lines
4.5 KiB
Go
198 lines
4.5 KiB
Go
// Package domain defines the core domain types and interfaces used across the application.
|
|
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)
|
|
}
|