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