aboutsummaryrefslogtreecommitdiff
path: root/database
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-02-03 14:50:13 +0530
committerBobby <[email protected]>2026-02-03 14:50:13 +0530
commite4d65624c49c11db7da46d05f5e4caeec79bd955 (patch)
tree57d7e68bffa0592129d1a75af9f05896bb6f926d /database
parented36e0308c7cd3a6197c899cb16bfe65cc5194b4 (diff)
downloadmetachan-e4d65624c49c11db7da46d05f5e4caeec79bd955.tar.xz
metachan-e4d65624c49c11db7da46d05f5e4caeec79bd955.zip
Add genre-based anime retrieval with pagination and related database updates
Diffstat (limited to 'database')
-rw-r--r--database/anime.go17
1 files changed, 17 insertions, 0 deletions
diff --git a/database/anime.go b/database/anime.go
index 5c06cad..891896e 100644
--- a/database/anime.go
+++ b/database/anime.go
@@ -64,6 +64,23 @@ func SaveAnimeToDatabase(animeData *types.Anime) error {
var existingAnime entities.Anime
result := tx.Where("mal_id = ?", animeData.MALID).First(&existingAnime)
if result.Error == nil {
+ // Delete all related records first to avoid UNIQUE constraint errors
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AnimeSingleEpisode{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AnimeCharacter{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.ScheduleEpisode{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AnimeGenre{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AnimeProducer{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AnimeStudio{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AnimeLicensor{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AnimeSeason{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AnimeImages{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AnimeLogos{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AnimeCovers{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AnimeScores{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AiringStatus{})
+ tx.Where("anime_id = ?", existingAnime.ID).Delete(&entities.AnimeBroadcast{})
+
+ // Now delete the anime itself
if err := tx.Delete(&existingAnime).Error; err != nil {
tx.Rollback()
return err