scanfile/server/internal/database/processingJob.go

72 lines
1.9 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
}