aboutsummaryrefslogtreecommitdiff
path: root/tasks/genresync.task.go
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-02-06 17:45:55 +0530
committerBobby <[email protected]>2026-02-06 17:45:55 +0530
commit2da45b9fbf74d365951e37a4152f30e76caaeb98 (patch)
tree8fc9b5f02d37194c136e7f757f1e37c21825094c /tasks/genresync.task.go
parent8cb229a3bc07387067ca76a34c05b44ff7a3039a (diff)
downloadmetachan-2da45b9fbf74d365951e37a4152f30e76caaeb98.tar.xz
metachan-2da45b9fbf74d365951e37a4152f30e76caaeb98.zip
Refactor task management and producer synchronization
- Updated TaskManager to utilize repositories for database operations, improving separation of concerns. - Enhanced logging functionality by replacing logger.Log with logger.Infof, logger.Warnf, and logger.Errorf for better readability and consistency. - Simplified ProducerSync function by removing unnecessary pagination logic and directly fetching producer data. - Introduced helper functions for calculating progress and managing task statuses. - Added new service for fetching and saving anime data, integrating multiple data sources (Jikan, Anilist, MALsync, TMDB, TVDB, Aniskip). - Created new types for task management and improved overall code organization. - Removed deprecated database calls and replaced them with repository methods for better maintainability.
Diffstat (limited to 'tasks/genresync.task.go')
-rw-r--r--tasks/genresync.task.go64
1 files changed, 9 insertions, 55 deletions
diff --git a/tasks/genresync.task.go b/tasks/genresync.task.go
index e240833..22e2712 100644
--- a/tasks/genresync.task.go
+++ b/tasks/genresync.task.go
@@ -1,82 +1,36 @@
package tasks
import (
- "fmt"
- "metachan/database"
"metachan/entities"
+ "metachan/repositories"
"metachan/utils/api/jikan"
"metachan/utils/logger"
)
-// GenreSync synchronizes genre data from MAL via Jikan API
func GenreSync() error {
- logger.Log("Starting Genre Sync from MAL", logger.LogOptions{
- Level: logger.Info,
- Prefix: "GenreSync",
- })
+ logger.Infof("GenreSync", "Starting Genre Sync from MAL")
- // Create Jikan client
- client := jikan.NewJikanClient()
-
- // Wait for rate limit
- client.WaitForRateLimit()
-
- // Fetch genres from Jikan API
- genresResponse, err := client.GetAnimeGenres()
+ genresResponse, err := jikan.GetAnimeGenres()
if err != nil {
- logger.Log(fmt.Sprintf("Failed to fetch genres from MAL: %v", err), logger.LogOptions{
- Level: logger.Error,
- Prefix: "GenreSync",
- })
+ logger.Errorf("GenreSync", "Failed to fetch genres from MAL: %v", err)
return err
}
- logger.Log(fmt.Sprintf("Fetched %d genres from MAL", len(genresResponse.Data)), logger.LogOptions{
- Level: logger.Info,
- Prefix: "GenreSync",
- })
+ logger.Infof("GenreSync", "Fetched %d genres from MAL", len(genresResponse.Data))
- // Update or create genres in database
for _, genre := range genresResponse.Data {
- // Create a genre entry with AnimeID = 0 to indicate it's a master genre
- genreEntity := entities.AnimeGenre{
- AnimeID: 0, // Master genre, not tied to specific anime
+ genreEntity := entities.Genre{
GenreID: genre.MALID,
Name: genre.Name,
URL: genre.URL,
Count: genre.Count,
}
- // Update or create
- var existing entities.AnimeGenre
- result := database.DB.Where("genre_id = ? AND anime_id = 0", genre.MALID).First(&existing)
-
- if result.Error == nil {
- // Update existing
- existing.Name = genre.Name
- existing.URL = genre.URL
- existing.Count = genre.Count
- if err := database.DB.Save(&existing).Error; err != nil {
- logger.Log(fmt.Sprintf("Failed to update genre %s: %v", genre.Name, err), logger.LogOptions{
- Level: logger.Warn,
- Prefix: "GenreSync",
- })
- }
- } else {
- // Create new
- if err := database.DB.Create(&genreEntity).Error; err != nil {
- logger.Log(fmt.Sprintf("Failed to create genre %s: %v", genre.Name, err), logger.LogOptions{
- Level: logger.Warn,
- Prefix: "GenreSync",
- })
- }
+ if err := repositories.CreateOrUpdateGenre(&genreEntity); err != nil {
+ logger.Warnf("GenreSync", "Failed to sync genre %s: %v", genre.Name, err)
}
}
- logger.Log("Genre Sync completed successfully", logger.LogOptions{
- Level: logger.Success,
- Prefix: "GenreSync",
- })
-
+ logger.Successf("GenreSync", "Genre Sync completed successfully. Synced %d genres", len(genresResponse.Data))
return nil
}