scanfile/server/internal/database/processingJob.go
2025-07-25 12:43:28 +02:00

81 lines
2.1 KiB
Go

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
}