82 lines
2.2 KiB
Go
82 lines
2.2 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()
|
|
params.Error.Valid = true
|
|
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
|
|
}
|