aboutsummaryrefslogtreecommitdiff
path: root/tasks
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-02-09 13:38:49 +0530
committerBobby <[email protected]>2026-02-09 13:38:49 +0530
commitdd17b2c4ccf8f2cfc38a02a15d33ba8b40b665ac (patch)
treeb9d867b3e41261807311732cb1d1b3d0cade09c5 /tasks
parent185d84e2dbe18dca60592bb33f491c5cd3d09403 (diff)
downloadmetachan-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.go39
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)
}