package database import ( "context" "gitea.mrixs.me/minecraft-platform/backend/internal/models" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" ) type JobRepository struct { DB *pgxpool.Pool } // CreateJob создает новую задачу со статусом pending func (r *JobRepository) CreateJob(ctx context.Context) (int, error) { var jobID int query := `INSERT INTO modpack_import_jobs (status, progress, created_at, updated_at) VALUES ($1, $2, NOW(), NOW()) RETURNING id` err := r.DB.QueryRow(ctx, query, models.JobStatusPending, 0).Scan(&jobID) return jobID, err } // UpdateJobStatus обновляет статус и прогресс задачи func (r *JobRepository) UpdateJobStatus(ctx context.Context, jobID int, status models.ImportJobStatus, progress int, errorMessage string) error { query := `UPDATE modpack_import_jobs SET status = $1, progress = $2, error_message = $3, updated_at = NOW() WHERE id = $4` _, err := r.DB.Exec(ctx, query, status, progress, errorMessage, jobID) return err } // GetJob получает задачу по ID func (r *JobRepository) GetJob(ctx context.Context, jobID int) (*models.ImportJob, error) { job := &models.ImportJob{} query := `SELECT id, status, progress, error_message, created_at, updated_at FROM modpack_import_jobs WHERE id = $1` var errMsg *string // Для обработки NULL err := r.DB.QueryRow(ctx, query, jobID).Scan( &job.ID, &job.Status, &job.Progress, &errMsg, &job.CreatedAt, &job.UpdatedAt, ) if err != nil { if err == pgx.ErrNoRows { return nil, nil // Или спец ошибка } return nil, err } if errMsg != nil { job.ErrorMessage = *errMsg } return job, nil }