package database import ( "context" "log/slog" "git.jmbit.de/jmb/scanfile/server/internal/sqlc" "github.com/jackc/pgx/v5/pgtype" ) // NewProcessingJob() Creates a new Processing Job in the Database func NewProcessingJob(ctx context.Context, fileid pgtype.UUID, jobType string) (sqlc.ProcessingJob, error) { job := sqlc.ProcessingJob{} job.FileID = fileid query := sqlc.New(pool) job, err := query.CreateProcessingJob(ctx, fileid) if err != nil { slog.Error("Unable to create new processing job", "file-uuid", fileid.String()) return job, err } return job, nil } // StartProcessingJob() starts the job func StartProcessingJob(jobid int64) error { query := sqlc.New(pool) err := query.StartProcessingJob(context.Background(), jobid) if err != nil { slog.Error("Unable to start processing job", "job-id", jobid) } return err } // FinishProcessingJob() marks the job as completed func FinishProcessingJob(jobid int64) error { query := sqlc.New(pool) err := query.FinishProcessingJob(context.Background(), jobid) if err != nil { slog.Error("Unable to finish processing job", "job-id", jobid) } return err } // FailProcessingJob() marks the job as completed func FailProcessingJob(jobid int64, jobErr error) error { slog.Error("Job failed", "job-id", jobid, "error", jobErr) query := sqlc.New(pool) var params sqlc.FailProcessingJobParams params.ID = jobid params.Error.String = jobErr.Error() err := query.FailProcessingJob(context.Background(), params) if err != nil { slog.Error("Unable to mark processing job as failed", "job-id", jobid, "error", err) } return err } func AddProcessingJobMessage(jobid int64, message string) error { _, err := pool.Exec(context.Background(), ` UPDATE processing_jobs SET messages = messages || $2::JSONB WHERE id = $1; `, jobid, message) if err != nil { slog.Error("Unable to finish processing job", "job-id", jobid) } return err } func ALlProcessingJobs() ([]sqlc.ProcessingJob, error) { query := sqlc.New(pool) jobs, err := query.GetAllJobs(context.Background()) if err != nil { slog.Error("Unable to retrieve processing jobs", "error", err) } return jobs, err }