package db import ( "database/sql" "time" _ "github.com/mattn/go-sqlite3" ) type Job struct { ID int Status string CreatedAt time.Time WebhookURL string } func Init(dbPath string) (*sql.DB, error) { db, err := sql.Open("sqlite3", dbPath) if err != nil { return nil, err } schema := ` CREATE TABLE IF NOT EXISTS jobs ( id INTEGER PRIMARY KEY AUTOINCREMENT, status TEXT NOT NULL DEFAULT 'pending', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, webhook_url TEXT );` _, err = db.Exec(schema) if err != nil { return nil, err } return db, nil } func CreateJob(db *sql.DB, webhookURL string) (int64, error) { result, err := db.Exec("INSERT INTO jobs (status, webhook_url) VALUES ('pending', ?)", webhookURL) if err != nil { return 0, err } return result.LastInsertId() } func GetPendingJobs(db *sql.DB) ([]Job, error) { rows, err := db.Query("SELECT id, status, created_at, webhook_url FROM jobs WHERE status = 'pending'") if err != nil { return nil, err } defer rows.Close() var jobs []Job for rows.Next() { var job Job if err := rows.Scan(&job.ID, &job.Status, &job.CreatedAt, &job.WebhookURL); err != nil { return nil, err } jobs = append(jobs, job) } return jobs, nil } func MarkJobDone(db *sql.DB, id int) error { _, err := db.Exec("UPDATE jobs SET status = 'done' WHERE id = ?", id) return err }