package worker import ( "alpenqueue/pkg/db" "bytes" "database/sql" "encoding/json" "fmt" "log" "net/http" "time" ) func Start(database *sql.DB) { go func() { for { jobs, err := db.GetPendingJobs(database) if err != nil { log.Printf("Error fetching jobs: %v", err) time.Sleep(5 * time.Second) continue } for _, job := range jobs { log.Printf("Processing job %d", job.ID) start := time.Now() time.Sleep(2 * time.Second) duration := time.Since(start) if job.WebhookURL != "" { payload := map[string]string{ "status": "ok", "took": fmt.Sprintf("%.1fs", duration.Seconds()), } jsonData, _ := json.Marshal(payload) resp, err := http.Post(job.WebhookURL, "application/json", bytes.NewBuffer(jsonData)) if err != nil { log.Printf("Error posting webhook for job %d: %v", job.ID, err) } else { resp.Body.Close() log.Printf("Webhook posted for job %d", job.ID) } } if err := db.MarkJobDone(database, job.ID); err != nil { log.Printf("Error marking job %d done: %v", job.ID, err) } else { log.Printf("Job %d completed", job.ID) } } time.Sleep(5 * time.Second) } }() }