152 lines
4.2 KiB
Markdown
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)
|