diff options
| -rw-r--r-- | database/anime_cache.go | 28 | ||||
| -rw-r--r-- | entities/anime.go | 9 | ||||
| -rw-r--r-- | services/anime/helpers.go | 14 | ||||
| -rw-r--r-- | types/anime.go | 5 | ||||
| -rw-r--r-- | utils/api/anilist/anilist.go | 126 |
5 files changed, 142 insertions, 40 deletions
diff --git a/database/anime_cache.go b/database/anime_cache.go index 3ccf0d8..3e46c4f 100644 --- a/database/anime_cache.go +++ b/database/anime_cache.go @@ -306,9 +306,8 @@ func ConvertToTypesAnime(cachedAnime *entities.CachedAnime) *types.Anime { // Fill in NextAiringEpisode if cachedAnime.NextAiringEpisode != nil && cachedAnime.NextAiringEpisode.IsNext { anime.NextAiringEpisode = types.AnimeAiringEpisode{ - AiringAt: cachedAnime.NextAiringEpisode.AiringAt, - TimeUntilAiring: cachedAnime.NextAiringEpisode.TimeUntilAiring, - Episode: cachedAnime.NextAiringEpisode.Episode, + AiringAt: cachedAnime.NextAiringEpisode.AiringAt, + Episode: cachedAnime.NextAiringEpisode.Episode, } } @@ -317,9 +316,8 @@ func ConvertToTypesAnime(cachedAnime *entities.CachedAnime) *types.Anime { anime.AiringSchedule = make([]types.AnimeAiringEpisode, len(cachedAnime.AiringSchedule)) for i, episode := range cachedAnime.AiringSchedule { anime.AiringSchedule[i] = types.AnimeAiringEpisode{ - AiringAt: episode.AiringAt, - TimeUntilAiring: episode.TimeUntilAiring, - Episode: episode.Episode, + AiringAt: episode.AiringAt, + Episode: episode.Episode, } } } @@ -597,13 +595,12 @@ func convertToCachedAnime(animeData *types.Anime) *entities.CachedAnime { } } - // Add NextAiringEpisode if available - if animeData.NextAiringEpisode.Episode > 0 { + // Add NextAiringEpisode + if animeData.NextAiringEpisode.AiringAt != 0 { cachedAnime.NextAiringEpisode = &entities.CachedAiringEpisode{ - AiringAt: animeData.NextAiringEpisode.AiringAt, - TimeUntilAiring: animeData.NextAiringEpisode.TimeUntilAiring, - Episode: animeData.NextAiringEpisode.Episode, - IsNext: true, + AiringAt: animeData.NextAiringEpisode.AiringAt, + Episode: animeData.NextAiringEpisode.Episode, + IsNext: true, } } @@ -612,10 +609,9 @@ func convertToCachedAnime(animeData *types.Anime) *entities.CachedAnime { cachedAnime.AiringSchedule = make([]entities.CachedAiringEpisode, len(animeData.AiringSchedule)) for i, episode := range animeData.AiringSchedule { cachedAnime.AiringSchedule[i] = entities.CachedAiringEpisode{ - AiringAt: episode.AiringAt, - TimeUntilAiring: episode.TimeUntilAiring, - Episode: episode.Episode, - IsNext: false, // Only the dedicated next episode is marked true + AiringAt: episode.AiringAt, + Episode: episode.Episode, + IsNext: false, // Only the dedicated next episode is marked true } } } diff --git a/entities/anime.go b/entities/anime.go index 2481143..74c0880 100644 --- a/entities/anime.go +++ b/entities/anime.go @@ -187,11 +187,10 @@ type CachedAnimeLicensor struct { // CachedAiringEpisode for storing information about airing episodes type CachedAiringEpisode struct { gorm.Model - AnimeID uint - AiringAt int - TimeUntilAiring int - Episode int - IsNext bool `gorm:"index"` // true if this is the next airing episode + AnimeID uint + AiringAt int + Episode int + IsNext bool `gorm:"index"` // true if this is the next airing episode } // CachedEpisodeTitles for episode title variants diff --git a/services/anime/helpers.go b/services/anime/helpers.go index fb8e82b..e8d5f75 100644 --- a/services/anime/helpers.go +++ b/services/anime/helpers.go @@ -221,16 +221,15 @@ func getNextAiringEpisode(anilistAnime *anilist.AnilistAnimeResponse) types.Anim return types.AnimeAiringEpisode{} } - logger.Log(fmt.Sprintf("Found next airing episode %d at timestamp %d (in %d seconds)", - nextEpisode.Episode, nextEpisode.AiringAt, nextEpisode.TimeUntilAiring), logger.LogOptions{ + logger.Log(fmt.Sprintf("Found next airing episode %d at timestamp %d", + nextEpisode.Episode, nextEpisode.AiringAt), logger.LogOptions{ Level: logger.Debug, Prefix: "AnimeAPI", }) return types.AnimeAiringEpisode{ - AiringAt: nextEpisode.AiringAt, - TimeUntilAiring: nextEpisode.TimeUntilAiring, - Episode: nextEpisode.Episode, + AiringAt: nextEpisode.AiringAt, + Episode: nextEpisode.Episode, } } @@ -253,9 +252,8 @@ func getAnimeSchedule(anilistAnime *anilist.AnilistAnimeResponse) []types.AnimeA for _, node := range anilistAnime.Data.Media.AiringSchedule.Nodes { schedule = append(schedule, types.AnimeAiringEpisode{ - AiringAt: node.AiringAt, - TimeUntilAiring: node.TimeUntilAiring, - Episode: node.Episode, + AiringAt: node.AiringAt, + Episode: node.Episode, }) } diff --git a/types/anime.go b/types/anime.go index 8d0c9d3..7ab862e 100644 --- a/types/anime.go +++ b/types/anime.go @@ -130,9 +130,8 @@ type AiringStatus struct { // AnimeAiringEpisode contains information about a single upcoming episode type AnimeAiringEpisode struct { - AiringAt int `json:"airing_at"` - TimeUntilAiring int `json:"time_until_airing"` - Episode int `json:"episode"` + AiringAt int `json:"airing_at"` + Episode int `json:"episode"` } // AnimeBroadcast contains broadcast schedule information diff --git a/utils/api/anilist/anilist.go b/utils/api/anilist/anilist.go index afb88e4..61e3fbb 100644 --- a/utils/api/anilist/anilist.go +++ b/utils/api/anilist/anilist.go @@ -26,7 +26,7 @@ func NewAniListClient() *AniListClient { func (c *AniListClient) GetAnime(anilistID int) (*AnilistAnimeResponse, error) { // Create a much simpler request with minimal formatting that might trigger Cloudflare query := ` - query ($id: Int) { + query($id: Int) { Media(id: $id, type: ANIME) { id idMal @@ -40,8 +40,16 @@ func (c *AniListClient) GetAnime(anilistID int) (*AnilistAnimeResponse, error) { format status description - startDate { year month day } - endDate { year month day } + startDate { + year + month + day + } + endDate { + year + month + day + } season seasonYear episodes @@ -52,7 +60,11 @@ func (c *AniListClient) GetAnime(anilistID int) (*AnilistAnimeResponse, error) { isLicensed source hashtag - trailer { id site thumbnail } + trailer { + id + site + thumbnail + } coverImage { extraLarge large @@ -68,11 +80,109 @@ func (c *AniListClient) GetAnime(anilistID int) (*AnilistAnimeResponse, error) { isLocked trending favourites - tags { id name description category rank isGeneralSpoiler isMediaSpoiler isAdult } - nextAiringEpisode { id airingAt timeUntilAiring episode } - airingSchedule { nodes { id episode airingAt timeUntilAiring } } - studios { edges { isMain node { id name } } } + tags { + id + name + description + category + rank + isGeneralSpoiler + isMediaSpoiler + isAdult + } + relations { + edges { + id + relationType + node { + id + title { + romaji + english + native + userPreferred + } + format + type + status + coverImage { + extraLarge + large + medium + color + } + bannerImage + } + } + } + characters { + edges { + role + node { + id + name { + first + last + middle + full + native + userPreferred + } + image { + large + medium + } + description + age + } + } + } + staff { + edges { + role + node { + id + name { + first + last + middle + full + native + userPreferred + } + image { + large + medium + } + description + primaryOccupations + gender + age + languageV2 + } + } + } + studios { + edges { + isMain + node { + id + name + } + } + } isAdult + nextAiringEpisode { id airingAt episode timeUntilAiring } + airingSchedule { nodes { id episode airingAt timeUntilAiring } } + trends { nodes { date trending popularity inProgress } } + externalLinks { id url site } + streamingEpisodes { title thumbnail url site } + rankings { id rank type format year season allTime context } + stats { + scoreDistribution { score amount } + statusDistribution { status amount } + } + siteUrl } } ` |
