aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--database/anime_cache.go28
-rw-r--r--entities/anime.go9
-rw-r--r--services/anime/helpers.go14
-rw-r--r--types/anime.go5
-rw-r--r--utils/api/anilist/anilist.go126
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
}
}
`