53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"git.threesix.ai/jordan/sp2-verify-1770324794/pkg/logging"
|
|
"git.threesix.ai/jordan/sp2-verify-1770324794/pkg/redisqueue"
|
|
"git.threesix.ai/jordan/sp2-verify-1770324794/services/api/internal/port"
|
|
)
|
|
|
|
// JobService handles job-related business logic.
|
|
type JobService struct {
|
|
queue port.JobQueue
|
|
logger *logging.Logger
|
|
}
|
|
|
|
// NewJobService creates a new job service.
|
|
func NewJobService(queue port.JobQueue, logger *logging.Logger) *JobService {
|
|
return &JobService{
|
|
queue: queue,
|
|
logger: logger.WithService("JobService"),
|
|
}
|
|
}
|
|
|
|
// CreateInput contains the data needed to create a job.
|
|
type CreateJobInput struct {
|
|
Type string
|
|
Payload map[string]any
|
|
}
|
|
|
|
// Create creates a new async job.
|
|
// Returns an error if the job type is empty.
|
|
func (s *JobService) Create(ctx context.Context, input CreateJobInput) (*redisqueue.Job, error) {
|
|
if input.Type == "" {
|
|
return nil, fmt.Errorf("job type is required")
|
|
}
|
|
|
|
job, err := s.queue.Enqueue(ctx, input.Type, input.Payload)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
s.logger.Info("job created", "job_id", job.ID, "type", job.Type)
|
|
return job, nil
|
|
}
|
|
|
|
// Get retrieves a job by ID.
|
|
// Returns redisqueue.ErrJobNotFound if the job doesn't exist.
|
|
func (s *JobService) Get(ctx context.Context, jobID string) (*redisqueue.Job, error) {
|
|
return s.queue.GetJob(ctx, jobID)
|
|
}
|