From 973188b65d1bfccf5acb67af49f209b82558184c Mon Sep 17 00:00:00 2001 From: Volker Schukai <volker.schukai@schukai.com> Date: Mon, 13 Nov 2023 00:21:42 +0100 Subject: [PATCH] fix: update jobs (sql if job exists) #18 --- database.go | 26 ++++++++++++++++++-------- persistence.go | 2 +- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/database.go b/database.go index 0bde584..00fb684 100644 --- a/database.go +++ b/database.go @@ -1,6 +1,7 @@ package jobqueue import ( + "errors" "gorm.io/gorm" "sync" ) @@ -100,14 +101,23 @@ func (s *DBSaver) Start() error { memLogs := permJob.Logs permJob.Logs = nil - result := tx.FirstOrCreate(&permJob, map[string]interface{}{"id": permJob.GetID()}). - Assign(permJob) - - err := result.Error - - // Find or create JobMeta - if err != nil { - s.logError("Error while saving job", "error", err) + var existingJob GenericJob + result := tx.Where("id = ?", permJob.GetID()).First(&existingJob) + + if result.Error != nil { + if errors.Is(result.Error, gorm.ErrRecordNotFound) { + err := tx.Create(&permJob).Error + if err != nil { + return err + } + } else { + return result.Error + } + } else { + err := tx.Model(&existingJob).Updates(permJob).Error + if err != nil { + return err + } } if result.RowsAffected == 0 { diff --git a/persistence.go b/persistence.go index f5bb440..67b84a4 100644 --- a/persistence.go +++ b/persistence.go @@ -265,8 +265,8 @@ func CreateJobAndSchedulerFromPersistence(jobImport JobPersistence, manager *Man } case "delay": - scheduler = &DelayScheduler{Delay: jobImport.Scheduler.Delay} + scheduler = &DelayScheduler{Delay: jobImport.Scheduler.Delay} case "event": scheduler = &EventScheduler{Event: EventName(jobImport.Scheduler.Event)} -- GitLab