aboutsummaryrefslogtreecommitdiff
path: root/tasks
diff options
context:
space:
mode:
authorPriyansh <[email protected]>2025-08-25 12:30:43 +0530
committerPriyansh <[email protected]>2025-08-25 12:30:43 +0530
commit8221a9ff2a046c76a64a647fbe1f87069f196673 (patch)
tree13105da35306aa61f5d44ae372131cad60941d00 /tasks
parenta4d2b4c3d7b043b496ee2ecb51967dbd9785a1ef (diff)
downloadmetachan-8221a9ff2a046c76a64a647fbe1f87069f196673.tar.xz
metachan-8221a9ff2a046c76a64a647fbe1f87069f196673.zip
Updated Database Sync for Anime
Diffstat (limited to 'tasks')
-rw-r--r--tasks/anime_update.task.go87
1 files changed, 51 insertions, 36 deletions
diff --git a/tasks/anime_update.task.go b/tasks/anime_update.task.go
index 6d56378..38cc77a 100644
--- a/tasks/anime_update.task.go
+++ b/tasks/anime_update.task.go
@@ -29,7 +29,7 @@ const (
// animeUpdateJob represents a single anime update job
type animeUpdateJob struct {
- series entities.CachedAnime
+ series entities.Anime
reason string
}
@@ -41,7 +41,7 @@ func AnimeUpdate() error {
})
// Find all currently airing anime
- var airingSeries []entities.CachedAnime
+ var airingSeries []entities.Anime
result := database.DB.
Where("airing = ?", true).
Preload("NextAiringEpisode").
@@ -176,65 +176,80 @@ func AnimeUpdate() error {
return nil
}
-// updateAnime handles updating a single anime
-func updateAnime(animeService *anime.Service, series entities.CachedAnime, reason string) {
- // Get the mapping for this anime
+// updateAnime updates a single anime series
+func updateAnime(animeService *anime.Service, series entities.Anime, reason string) {
+ title := series.TitleRomaji
+ if series.TitleEnglish != "" {
+ title = series.TitleEnglish
+ }
+
+ logger.Log(fmt.Sprintf("Updating anime: %s (MAL ID: %d) - %s", title, series.MALID, reason), logger.LogOptions{
+ Level: logger.Info,
+ Prefix: "AnimeUpdate",
+ })
+
+ // Get anime mapping for the service call
mapping, err := database.GetAnimeMappingViaMALID(series.MALID)
if err != nil {
- logger.Log(fmt.Sprintf("Failed to get mapping for MALID %d: %v", series.MALID, err), logger.LogOptions{
+ logger.Log(fmt.Sprintf("Error getting anime mapping for %s (MAL ID: %d): %v", title, series.MALID, err), logger.LogOptions{
Level: logger.Error,
Prefix: "AnimeUpdate",
})
return
}
- logger.Log(fmt.Sprintf("Updating anime %s (MALID: %d) - Reason: %s",
- series.TitleRomaji, series.MALID, reason), logger.LogOptions{
- Level: logger.Info,
- Prefix: "AnimeUpdate",
- })
-
- // Get fresh anime data
- updatedAnime, err := animeService.GetAnimeDetailsWithSource(mapping, UpdaterSource)
+ // Get updated anime data from API
+ updatedAnime, err := animeService.GetAnimeDetailsWithSource(mapping, "mal")
if err != nil {
- logger.Log(fmt.Sprintf("Failed to get fresh data for MALID %d: %v", series.MALID, err), logger.LogOptions{
+ logger.Log(fmt.Sprintf("Error getting updated anime data for %s (MAL ID: %d): %v", title, series.MALID, err), logger.LogOptions{
Level: logger.Error,
Prefix: "AnimeUpdate",
})
return
}
- // Check if significant changes occurred to save the update
- saved := false
- oldCachedAnime, err := database.GetCachedAnimeByMALID(series.MALID)
+ logger.Log(fmt.Sprintf("Successfully updated anime: %s (MAL ID: %d)", title, series.MALID), logger.LogOptions{
+ Level: logger.Info,
+ Prefix: "AnimeUpdate",
+ })
+
+ // Check if the updated anime data has significant changes that warrant saving
+ if shouldSaveUpdate(&series, updatedAnime) {
+ // Check if anime is still airing
+ if updatedAnime.Status != "RELEASING" && updatedAnime.Status != "AIRING" {
+ // Update the anime data to reflect that it's no longer airing
+ updatedAnime.Airing = false
+ }
- if err != nil || shouldSaveUpdate(oldCachedAnime, updatedAnime) {
- saved = true
- // Save the updated data to cache
- if err := database.SaveAnimeToCache(updatedAnime); err != nil {
- logger.Log(fmt.Sprintf("Failed to save updated data for MALID %d: %v", series.MALID, err), logger.LogOptions{
+ if err := database.SaveAnimeToDatabase(updatedAnime); err != nil {
+ logger.Log(fmt.Sprintf("Error saving updated anime data for %s (MAL ID: %d): %v", title, series.MALID, err), logger.LogOptions{
Level: logger.Error,
Prefix: "AnimeUpdate",
})
- return
- }
- }
+ } else {
+ logger.Log(fmt.Sprintf("Successfully saved updated data for %s (MAL ID: %d)", title, series.MALID), logger.LogOptions{
+ Level: logger.Info,
+ Prefix: "AnimeUpdate",
+ })
- status := "skipped (no significant changes)"
- if saved {
- status = "saved to database"
+ if !updatedAnime.Airing {
+ logger.Log(fmt.Sprintf("Anime %s (MAL ID: %d) is no longer airing. Status: %s", title, series.MALID, updatedAnime.Status), logger.LogOptions{
+ Level: logger.Info,
+ Prefix: "AnimeUpdate",
+ })
+ }
+ }
+ } else {
+ logger.Log(fmt.Sprintf("No significant changes detected for %s (MAL ID: %d), skipping database update", title, series.MALID), logger.LogOptions{
+ Level: logger.Debug,
+ Prefix: "AnimeUpdate",
+ })
}
-
- logger.Log(fmt.Sprintf("Update for %s (MALID: %d) complete - %s",
- series.TitleRomaji, series.MALID, status), logger.LogOptions{
- Level: logger.Info,
- Prefix: "AnimeUpdate",
- })
}
// shouldSaveUpdate determines if the updated anime data has significant changes
// that warrant saving it to the database
-func shouldSaveUpdate(oldAnime *entities.CachedAnime, newAnime *types.Anime) bool {
+func shouldSaveUpdate(oldAnime *entities.Anime, newAnime *types.Anime) bool {
if oldAnime == nil {
return true
}