sp2-verify-1770324794/.sdlc/features/async-jobs/tasks.md
rdev-worker 154c535204
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
build: /implement-feature async-jobs --requirements 'API: POST /jobs pushes ...
2026-02-05 21:04:47 +00:00

152 lines
4.2 KiB
Markdown

# Implementation Tasks: Async Jobs
**Feature:** async-jobs
**Status:** approved
**Author:** Claude
**Created:** 2026-02-05
## Task List
### Task 1: Create Redis Queue Package
**ID:** task-1-redis-queue-pkg
**Status:** pending
**Blocked By:** none
Create the shared `pkg/redisqueue` package with job queue abstractions.
**Files to create:**
- `pkg/redisqueue/job.go` - Job struct and JobStatus constants
- `pkg/redisqueue/queue.go` - RedisQueue implementation
**Acceptance Criteria:**
- Job struct with ID, Type, Payload, Status, timestamps
- JobStatus constants: pending, running, completed, failed
- Enqueue: store job data + push ID to queue
- Dequeue: BLPOP queue + fetch job data + set running
- GetJob: fetch job by ID
- UpdateStatus: update job status fields
---
### Task 2: Add Redis Configuration to API Service
**ID:** task-2-api-redis-config
**Status:** pending
**Blocked By:** task-1-redis-queue-pkg
Add Redis URL configuration and client initialization to the API service.
**Files to modify:**
- `services/api/internal/config/config.go` - Add RedisURL field
- `services/api/cmd/server/main.go` - Initialize Redis client
**Acceptance Criteria:**
- Config loads REDIS_URL from environment
- Redis client created in main.go
- Graceful handling of connection errors
---
### Task 3: Implement Job Port and Service
**ID:** task-3-job-service
**Status:** pending
**Blocked By:** task-2-api-redis-config
Create the job port interface and service layer for job operations.
**Files to create:**
- `services/api/internal/port/job.go` - JobQueue interface
- `services/api/internal/service/job.go` - JobService implementation
**Acceptance Criteria:**
- JobQueue interface defines Create and Get operations
- JobService implements business logic
- Service validates input before queue operations
---
### Task 4: Implement Job HTTP Handlers
**ID:** task-4-job-handlers
**Status:** pending
**Blocked By:** task-3-job-service
Create HTTP handlers for POST /jobs and GET /jobs/{id}.
**Files to create:**
- `services/api/internal/api/handlers/job.go` - Job handlers
- `services/api/internal/api/handlers/job_test.go` - Handler tests
**Files to modify:**
- `services/api/internal/api/routes.go` - Register routes
**Acceptance Criteria:**
- POST /api/api/jobs creates job, returns 201
- GET /api/api/jobs/{id} returns job status
- GET /api/api/jobs/{id} returns 404 for unknown
- Request validation with proper error messages
- Tests cover success and error cases
---
### Task 5: Add Redis Configuration to Worker
**ID:** task-5-worker-redis-config
**Status:** pending
**Blocked By:** task-1-redis-queue-pkg
Add Redis URL and job simulation configuration to the worker.
**Files to modify:**
- `workers/background-processor/internal/config/config.go` - Add Redis and simulation config
**Acceptance Criteria:**
- Config loads REDIS_URL from environment
- Config loads JOB_SIMULATION_DURATION with default (2s)
---
### Task 6: Implement Worker Job Processing
**ID:** task-6-worker-job-processing
**Status:** pending
**Blocked By:** task-5-worker-redis-config
Implement the async job handler in the background worker.
**Files to create:**
- `workers/background-processor/internal/handlers/jobs.go` - Job processor
**Files to modify:**
- `workers/background-processor/cmd/worker/main.go` - Register job handler
**Acceptance Criteria:**
- Worker dequeues jobs from Redis
- Worker simulates work with configurable delay
- Worker updates job status to completed
- Worker handles errors and marks jobs failed
- Graceful shutdown waits for in-flight jobs
---
## Dependency Graph
```
task-1-redis-queue-pkg
├───────────────────┐
▼ ▼
task-2-api-redis-config task-5-worker-redis-config
│ │
▼ ▼
task-3-job-service task-6-worker-job-processing
task-4-job-handlers
```
## Implementation Order
1. task-1-redis-queue-pkg (no dependencies)
2. task-2-api-redis-config (depends on 1)
3. task-5-worker-redis-config (depends on 1, can run in parallel with 2)
4. task-3-job-service (depends on 2)
5. task-4-job-handlers (depends on 3)
6. task-6-worker-job-processing (depends on 5)