- Remove better-sqlite3, add pg driver - Convert schema to PostgreSQL types (serial, timestamp, boolean, jsonb) - Generate fresh PostgreSQL migrations - Update database connection layer with pg.Pool - Fix all API routes: remove JSON.parse/stringify, use native timestamps and booleans - Update drizzle.config.ts and .env.example for PostgreSQL
3.4 KiB
3.4 KiB
MODIFIED Requirements
Requirement: Docker Compose configuration
The project SHALL include docker-compose.yml for simplified deployment orchestration.
Scenario: Service definition
- WHEN docker-compose.yml is parsed
- THEN defines service named 'candle-annotator' using Dockerfile from current directory
Scenario: Port mapping
- WHEN docker-compose up runs
- THEN maps host port 3000 to container port 3000
Scenario: Volume mounting for ML data
- WHEN docker-compose up runs
- THEN mounts named volume 'ml-data' to /app/ml-data in the candle-annotator container
Scenario: Frontend depends on PostgreSQL
- WHEN docker-compose up runs
- THEN the candle-annotator service starts only after the postgres service is healthy (
depends_on: postgres: condition: service_healthy)
Scenario: Frontend DATABASE_URL
- WHEN the candle-annotator service starts
- THEN the
DATABASE_URLenvironment variable is set topostgresql://ml_user:ml_password@postgres:5432/candle_annotator
Scenario: Restart policy
- WHEN container crashes or stops
- THEN docker-compose automatically restarts container unless explicitly stopped (restart: unless-stopped)
Scenario: No SQLite volume
- WHEN docker-compose.yml is parsed
- THEN there is no
candle-datavolume defined or mounted
Requirement: Environment variable configuration
The project SHALL use environment variables for runtime configuration.
Scenario: .env.example file
- WHEN repository is cloned
- THEN includes .env.example file documenting all configurable environment variables with example values
Scenario: DATABASE_URL configuration
- WHEN
DATABASE_URLenvironment variable is set - THEN the Next.js application connects to the PostgreSQL database at the specified URL
Scenario: No DATABASE_PATH variable
- WHEN environment variables are inspected
- THEN there is no
DATABASE_PATHvariable (SQLite path is removed)
Scenario: PORT configuration
- WHEN PORT environment variable is set
- THEN Next.js server listens on specified port (default: 3000)
Scenario: NODE_ENV configuration
- WHEN NODE_ENV environment variable is set to 'production'
- THEN Next.js runs in production mode with optimizations enabled
Requirement: Database persistence
The deployment SHALL ensure PostgreSQL data persists across container restarts.
Scenario: PostgreSQL volume
- WHEN docker-compose up runs
- THEN the
postgres-datanamed volume is mounted to/var/lib/postgresql/datain the postgres container
Scenario: Container restart preserves data
- WHEN the postgres container is stopped and restarted
- THEN all database tables and data remain intact
Scenario: PostgreSQL database name
- WHEN the postgres service starts
- THEN the
POSTGRES_DBenvironment variable is set tocandle_annotator
Requirement: Health check endpoint
The API SHALL provide a health check endpoint for container orchestration.
Scenario: Health check endpoint responds
- WHEN GET request sent to
/api/health - THEN system returns 200 status with JSON
{ status: 'ok', timestamp: <unix_timestamp> }
Scenario: Database connection check
- WHEN GET request sent to
/api/health?check=db - THEN system attempts a PostgreSQL query and returns 200 if successful, 503 if database unavailable