Jesús Pérez 9cef9b8d57 refactor: consolidate configuration directories
Merge _configs/ into config/ for single configuration directory.
Update all path references.

Changes:
- Move _configs/* to config/
- Update .gitignore for new patterns
- No code references to _configs/ found

Impact: -1 root directory (layout_conventions.md compliance)
2025-12-26 18:36:23 +00:00

341 lines
8.1 KiB
Markdown

# Lifecycle API Server
REST API for syntaxis management with explicit configuration file support.
## Configuration
The API server is **completely configuration-driven** and requires an explicit configuration file path via the `--config` argument.
### Running the Server
```bash
# Required: pass configuration file path
./syntaxis-api --config /path/to/config.toml
```
### Configuration File Format
Create a TOML configuration file:
```toml
[server]
host = "127.0.0.1" # Server host (required)
port = 3000 # Server port (required)
database_path = "/tmp/data.db" # Database file path (required, can be absolute or relative)
cors_enabled = true # Enable CORS (required)
log_level = "info" # Log level: trace/debug/info/warn/error (required)
```
### Environment Variable Overrides
Environment variables override TOML configuration:
```bash
# Override specific settings
LIFECYCLE_API_HOST=0.0.0.0 LIFECYCLE_API_PORT=8080 ./syntaxis-api --config /path/to/config.toml
# Change log level
LIFECYCLE_API_LOG_LEVEL=debug ./syntaxis-api --config /path/to/config.toml
# Use custom database path
LIFECYCLE_API_DATABASE_PATH=/var/lib/lifecycle/data.db ./syntaxis-api --config /path/to/config.toml
# Disable CORS
LIFECYCLE_API_CORS_ENABLED=false ./syntaxis-api --config /path/to/config.toml
```
## Configuration Examples
### Development Configuration
Create `~/.config/syntaxis-api/dev.toml`:
```toml
[server]
host = "127.0.0.1"
port = 3000
database_path = "/tmp/syntaxis-dev.db"
cors_enabled = true
log_level = "debug"
```
Run:
```bash
./syntaxis-api --config ~/.config/syntaxis-api/dev.toml
```
### Production Configuration
Create `/etc/syntaxis-api/prod.toml`:
```toml
[server]
host = "0.0.0.0"
port = 8080
database_path = "/var/lib/lifecycle/data.db"
cors_enabled = true
log_level = "info"
```
Run:
```bash
./syntaxis-api --config /etc/syntaxis-api/prod.toml
```
### Docker Configuration
Create `./config/docker.toml`:
```toml
[server]
host = "0.0.0.0"
port = 3000
database_path = "/data/project.db"
cors_enabled = true
log_level = "info"
```
Dockerfile:
```dockerfile
FROM rust:1.75 as builder
WORKDIR /app
COPY . .
RUN cargo build -p syntaxis-api --release
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y sqlite3
COPY --from=builder /app/target/release/syntaxis-api /usr/local/bin/
WORKDIR /app
VOLUME ["/data"]
EXPOSE 3000
ENTRYPOINT ["syntaxis-api", "--config", "/etc/syntaxis-api/config.toml"]
```
Run with Docker:
```bash
docker run -p 3000:3000 -v /path/to/config.toml:/etc/syntaxis-api/config.toml -v /path/to/data:/data syntaxis-api
```
## Configuration Schema
| Setting | Type | Required | Environment Variable | Notes |
|---------|------|----------|----------------------|-------|
| `host` | string | Yes | `LIFECYCLE_API_HOST` | Server bind address |
| `port` | u16 | Yes | `LIFECYCLE_API_PORT` | Server port number |
| `database_path` | string | Yes | `LIFECYCLE_API_DATABASE_PATH` | Path to SQLite database file |
| `cors_enabled` | bool | Yes | `LIFECYCLE_API_CORS_ENABLED` | Enable CORS headers (true/false) |
| `log_level` | string | Yes | `LIFECYCLE_API_LOG_LEVEL` | trace/debug/info/warn/error |
## Usage Examples
### Local Development
```bash
./syntaxis-api --config ~/config/local.toml
```
### Remote Server (Environment Variables Override)
```bash
LIFECYCLE_API_HOST=0.0.0.0 LIFECYCLE_API_PORT=8080 LIFECYCLE_API_DATABASE_PATH=/data/prod.db \
./syntaxis-api --config /etc/syntaxis-api/prod.toml
```
### Testing
```bash
./syntaxis-api --config /tmp/test-config.toml
```
### systemd Service
Create `/etc/systemd/system/syntaxis-api.service`:
```ini
[Unit]
Description=Lifecycle API Server
After=network.target
[Service]
Type=simple
User=lifecycle
ExecStart=/usr/local/bin/syntaxis-api --config /etc/syntaxis-api/config.toml
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
```
Enable and start:
```bash
sudo systemctl daemon-reload
sudo systemctl enable syntaxis-api
sudo systemctl start syntaxis-api
```
## Health Check
```bash
curl http://localhost:3000/api/health
```
## API Endpoints
All endpoints are relative to `/api`.
### Health Check
- `GET /health` - Server health status
### Projects
- `POST /projects` - Create project
- `GET /projects` - List projects
- `GET /projects/:id` - Get project
- `PUT /projects/:id` - Update project
- `DELETE /projects/:id` - Delete project
### Phases
- `GET /projects/:id/phases` - Get current phase
- `POST /projects/:id/phases/transition` - Transition to next phase
- `GET /projects/:id/phases/history` - Get phase history
### Checklists
- `GET /projects/:id/checklists` - Get all checklists
- `GET /projects/:id/checklists/phases/:phase` - Get checklist for phase
- `POST /projects/:id/checklists` - Add checklist item
- `PUT /projects/:id/checklists/items/:item_id` - Update checklist item
### Security
- `GET /projects/:id/security` - Get security assessment
- `POST /projects/:id/security/assess` - Run security assessment
### Status
- `GET /projects/:id/status` - Get project status
### Tools
- `GET /projects/:id/tools` - List tools
- `POST /projects/:id/tools/:name/enable` - Enable tool
- `POST /projects/:id/tools/:name/disable` - Disable tool
## Database
### SQLite Database
The API uses SQLite for data persistence. The database file is created automatically on first run at the path specified in configuration.
### Database Path
Paths can be absolute or relative:
- **Absolute**: `/var/lib/lifecycle/data.db`
- **Relative**: `./data/project.db` (relative to working directory)
### Directory Creation
The parent directory for the database file is created automatically if it doesn't exist.
## Logging
Logging uses the `tracing` crate with `tracing-subscriber` for output.
### Log Levels
- `trace` - Very detailed diagnostic information
- `debug` - Detailed debugging information
- `info` - General informational messages (default)
- `warn` - Warning messages
- `error` - Error messages only
### Setting Log Level
In configuration file:
```toml
[server]
log_level = "debug"
```
Or via environment variable:
```bash
LIFECYCLE_API_LOG_LEVEL=debug ./syntaxis-api --config config.toml
```
## PAP Compliance
This configuration system follows **Project Agnostic Practice (PAP)** principles:
**Explicit configuration** - Configuration file path must be provided via CLI
**No project-specific paths** - Works anywhere with any config file
**Configuration-driven** - All settings in TOML file or environment variables
**Environment variable overrides** - Runtime customization
**Clean error handling** - Exact configuration errors with file path information
**No hardcoded defaults** - All settings must be explicitly configured
**Portable** - Works across any environment with explicit config
## Troubleshooting
### Missing Configuration File
**Error**: `Failed to read config file "...": No such file or directory`
**Solution**: Pass valid config file path:
```bash
./syntaxis-api --config /path/to/config.toml
```
### Invalid TOML Syntax
**Error**: `Failed to parse TOML config from "...": ...`
**Solution**: Check TOML file syntax and try online TOML validator
### Database Directory Not Writable
**Error**: `Failed to create database directory: Permission denied`
**Solutions**:
1. Check directory permissions: `ls -la /path/to/dir`
2. Create directory manually: `mkdir -p /path/to/data`
3. Change ownership: `sudo chown user:group /path/to/data`
### Port Already in Use
**Error**: `Failed to bind to 0.0.0.0:8080`
**Solutions**:
1. Check what's using the port: `lsof -i :8080`
2. Use different port in config file
3. Override via environment variable: `LIFECYCLE_API_PORT=9000 ./syntaxis-api --config config.toml`
### Help Command
```bash
./syntaxis-api --help
```
## Building
```bash
cargo build -p syntaxis-api --release
```
Binary location: `target/release/syntaxis-api`
## Testing
```bash
cargo test -p syntaxis-api
```
## Code Quality
```bash
cargo fmt -p syntaxis-api
cargo clippy -p syntaxis-api --all-targets
```
## See Also
- `config.rs` - Configuration module implementation
- `src/main.rs` - Server entry point and CLI argument handling