feat(api): implement OpenAPI/REST API for file conversions

- Add comprehensive REST API at /api/v1 with modular structure
- Implement authentication endpoints (register, login, logout, me)
- Add converter listing and format discovery endpoints
- Create job management and file download endpoints
- Add health check endpoint for monitoring
- Set up CORS support for browser-based API clients
- Create API middleware for JWT authentication
- Add environment variables for API configuration
- Include comprehensive API documentation and test script

Infrastructure:
- Enhanced CI/CD workflow for custom Docker registries
- Docker Compose setup with dev, prod, and monitoring profiles
- Claude.ai integration files for development workflow
- Environment-based configuration with .env.development

Known limitations:
- JWT authentication context needs fixing (using ALLOW_UNAUTHENTICATED=true)
- Swagger UI temporarily disabled due to composition error
- File upload endpoint needs multipart/form-data support

The API code is isolated in src/api/ directory to maintain separation
from the existing codebase, making it easy to maintain or contribute back.
This commit is contained in:
Dan Mestas 2025-07-30 14:18:13 -05:00
parent 394c98c65a
commit 71b52f6c5e
27 changed files with 3150 additions and 2 deletions

161
docker-compose.README.md Normal file
View file

@ -0,0 +1,161 @@
# Docker Compose Configuration
This project includes both `compose.yaml` (original) and `docker-compose.yml` (enhanced) for different use cases.
## Files
- **compose.yaml**: Original simple production deployment
- **docker-compose.yml**: Enhanced configuration with development, monitoring, and API features
## Quick Start
### Production Mode
```bash
# Using original compose file
docker compose -f compose.yaml up -d
# Using enhanced compose file (production service only)
docker compose up -d convertx
```
### Development Mode
```bash
# Start development server with hot reload
docker compose --profile dev up convertx-dev
# Start both production and development
docker compose --profile dev up
```
## Services
### convertx (Production)
- Main application service
- Port: 3000
- Includes health checks and auto-restart
### convertx-dev (Development)
- Hot reload enabled
- Port: 3001
- Mounts source code for live editing
- Profile: `dev`
### api-docs (API Documentation)
- Swagger UI for API documentation
- Port: 3002
- Profile: `docs`
### monitoring stack
- Prometheus (port 9090) and Grafana (port 3003)
- Profile: `monitoring`
## Profiles
Use profiles to enable optional services:
```bash
# Development only
docker compose --profile dev up
# With API documentation
docker compose --profile docs up
# With monitoring
docker compose --profile monitoring up
# Everything
docker compose --profile dev --profile docs --profile monitoring up
```
## Environment Variables
Create a `.env` file for custom configuration:
```env
# JWT Configuration
JWT_SECRET=your-secret-key-here
# API Configuration
API_ENABLED=true
API_PREFIX=/api/v1
API_RATE_LIMIT=100
API_RATE_WINDOW=15m
# Development
HTTP_ALLOWED=false
ALLOW_UNAUTHENTICATED=false
# Timezone
TZ=America/New_York
# Monitoring
GRAFANA_PASSWORD=secure-password
```
## Development Workflow
1. **Start development environment**:
```bash
docker compose --profile dev up convertx-dev
```
2. **Make code changes**: Edit files in `src/` - they'll auto-reload
3. **Test production build**:
```bash
docker compose up --build convertx
```
4. **View logs**:
```bash
docker compose logs -f convertx-dev
```
## Building Images
```bash
# Build all images
docker compose build
# Build specific service
docker compose build convertx
# Build with no cache
docker compose build --no-cache
```
## Data Persistence
- Application data: `./data` directory (mounted to `/app/data`)
- Prometheus data: `prometheus_data` volume
- Grafana data: `grafana_data` volume
## Networking
All services are on the `convertx-network` by default. To expose services to other containers:
```yaml
external_service:
networks:
- convertx-network
external_links:
- convertx
```
## Troubleshooting
1. **Port conflicts**: Change ports in docker-compose.yml if needed
2. **Permission issues**: Ensure `./data` directory has correct permissions
3. **Build failures**: Check Dockerfile and ensure all dependencies are available
4. **Hot reload not working**: Verify volume mounts and file permissions
## Production Deployment
For production, consider:
1. Use specific image tags instead of `latest`
2. Set strong JWT_SECRET
3. Disable HTTP_ALLOWED and ALLOW_UNAUTHENTICATED
4. Configure proper backup for data directory
5. Set up monitoring with the monitoring profile
6. Use external database for scale