diff options
| author | Bobby <[email protected]> | 2026-02-09 13:38:49 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-02-09 13:38:49 +0530 |
| commit | dd17b2c4ccf8f2cfc38a02a15d33ba8b40b665ac (patch) | |
| tree | b9d867b3e41261807311732cb1d1b3d0cade09c5 /tasks | |
| parent | 185d84e2dbe18dca60592bb33f491c5cd3d09403 (diff) | |
| download | metachan-dd17b2c4ccf8f2cfc38a02a15d33ba8b40b665ac.tar.xz metachan-dd17b2c4ccf8f2cfc38a02a15d33ba8b40b665ac.zip | |
Refactor BatchCreateProducers: implement transaction handling and improve error logging; add title and external URL associations
Diffstat (limited to 'tasks')
| -rw-r--r-- | tasks/producersync.task.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/tasks/producersync.task.go b/tasks/producersync.task.go index 6949e70..8c8bb79 100644 --- a/tasks/producersync.task.go +++ b/tasks/producersync.task.go @@ -94,6 +94,25 @@ func ProducerSync() error { } } + titleMap := make(map[string]entities.SimpleTitle) + for _, pd := range producersData { + for _, title := range pd.producer.Titles { + key := title.Type + ":" + title.Title + titleMap[key] = title + } + } + + if len(titleMap) > 0 { + titles := make([]entities.SimpleTitle, 0, len(titleMap)) + for _, title := range titleMap { + titles = append(titles, title) + } + if err := repositories.BatchCreateSimpleTitles(titles); err != nil { + logger.Errorf("ProducerSync", "Failed to batch insert titles: %v", err) + return err + } + } + var dbImages []entities.SimpleImage if err := repositories.DB.Select("id, image_url").Find(&dbImages).Error; err != nil { logger.Errorf("ProducerSync", "Failed to query images: %v", err) @@ -105,6 +124,18 @@ func ProducerSync() error { imageIDMap[img.ImageURL] = img.ID } + var dbTitles []entities.SimpleTitle + if err := repositories.DB.Select("id, type, title").Find(&dbTitles).Error; err != nil { + logger.Errorf("ProducerSync", "Failed to query titles: %v", err) + return err + } + + titleIDMap := make(map[string]uint) + for _, title := range dbTitles { + key := title.Type + ":" + title.Title + titleIDMap[key] = title.ID + } + producers := make([]entities.Producer, 0, len(producersData)) for _, pd := range producersData { if pd.imageURL != "" { @@ -112,6 +143,14 @@ func ProducerSync() error { pd.producer.ImageID = &id } } + + for i := range pd.producer.Titles { + key := pd.producer.Titles[i].Type + ":" + pd.producer.Titles[i].Title + if id, exists := titleIDMap[key]; exists { + pd.producer.Titles[i].ID = id + } + } + producers = append(producers, pd.producer) } |
