# Issue #167: Runner jobs CRUD and queue submission ## Objective Implement runner-jobs module for job lifecycle management and queue submission, integrating with BullMQ for async job processing. ## Prerequisites - #164 (Database schema) - RunnerJob model available ✅ - #165 (BullMQ module) - BullMqService available for queue submission ✅ ## Approach 1. Review existing CRUD patterns (tasks, events modules) 2. Review RunnerJob schema and BullMqService interface 3. Follow TDD: Write tests first (RED phase) 4. Implement service layer with Prisma + BullMQ integration (GREEN phase) 5. Implement controller layer (GREEN phase) 6. Refactor and optimize (REFACTOR phase) 7. Run quality gates (typecheck, lint, build, test) ## API Endpoints - POST /runner-jobs - Create and queue a new job - GET /runner-jobs - List jobs (with filters) - GET /runner-jobs/:id - Get job details - POST /runner-jobs/:id/cancel - Cancel a running job - POST /runner-jobs/:id/retry - Retry a failed job ## Progress - [x] Review existing patterns and dependencies - [x] Create DTOs (CreateJobDto, QueryJobsDto) - [x] Write service tests (RED phase) - [x] Implement service with Prisma + BullMQ (GREEN phase) - [x] Write controller tests (RED phase) - [x] Implement controller (GREEN phase) - [x] Create module configuration - [x] Run quality gates (typecheck, lint, build, test) - [x] Commit changes ## Quality Gates Results - Typecheck: ✅ PASSED - Lint: ✅ PASSED (auto-fixed formatting) - Build: ✅ PASSED - Tests: ✅ PASSED (24/24 tests passing) ## Testing - Unit tests for RunnerJobsService - Unit tests for RunnerJobsController - Mock BullMqService for queue operations - Mock Prisma for database operations - Target: ≥85% coverage ## Notes - Follow existing CRUD patterns from tasks/events modules - Use DTOs for validation - Integrate with BullMqService for queue submission - Use Prisma for all database operations - Follow PDA-friendly language principles in responses