# Code of Conquest - API Backend Flask-based REST API backend for Code of Conquest, an AI-powered D&D-style game. ## Overview This is the **API backend** component of Code of Conquest. It provides: - RESTful API endpoints for game functionality - Business logic and game mechanics - Database operations (Appwrite) - AI integration (Claude, Replicate) - Background job processing (RQ + Redis) - Authentication and authorization ## Architecture **Tech Stack:** - **Framework:** Flask 3.x - **Database:** Appwrite (NoSQL) - **Job Queue:** RQ (Redis Queue) - **Cache:** Redis - **AI:** Anthropic Claude, Replicate - **Logging:** Structlog - **WSGI Server:** Gunicorn **Key Components:** - `/app/api` - API endpoint blueprints - `/app/models` - Data models (dataclasses) - `/app/services` - Business logic and external integrations - `/app/utils` - Helper functions - `/app/tasks` - Background job handlers - `/app/data` - Game data (YAML files) ## Setup ### Prerequisites - Python 3.11+ - Redis server - Appwrite instance (cloud or self-hosted) ### Installation 1. Create virtual environment: ```bash python3 -m venv venv source venv/bin/activate ``` 2. Install dependencies: ```bash pip install -r requirements.txt ``` 3. Configure environment: ```bash cp .env.example .env # Edit .env with your credentials ``` 4. Initialize database: ```bash python scripts/init_database.py ``` ### Running Locally **Development mode:** ```bash # Make sure Redis is running docker-compose up -d # Activate virtual environment source venv/bin/activate # Set environment export FLASK_ENV=development # Run development server python wsgi.py ``` The API will be available at `http://localhost:5000` **Production mode:** ```bash gunicorn --bind 0.0.0.0:5000 --workers 4 wsgi:app ``` ## Configuration Environment-specific configs are in `/config`: - `development.yaml` - Local development settings - `production.yaml` - Production settings Key settings: - **Server:** Port, workers - **Redis:** Connection settings - **RQ:** Queue configuration - **AI:** Model settings, rate limits - **Auth:** Session, password requirements - **CORS:** Allowed origins ## API Documentation See [API_REFERENCE.md](docs/API_REFERENCE.md) for complete endpoint documentation. ### Base URL - **Development:** `http://localhost:5000` - **Production:** `https://api.codeofconquest.com` ### Authentication Uses Appwrite session-based authentication with HTTP-only cookies. ### Response Format All endpoints return standardized JSON responses: ```json { "app": "Code of Conquest", "version": "0.1.0", "status": 200, "timestamp": "2025-01-15T10:30:00Z", "result": {...}, "error": null } ``` ## Testing Run tests with pytest: ```bash # Activate virtual environment source venv/bin/activate # Run all tests pytest # Run with coverage pytest --cov=app tests/ # Run specific test file pytest tests/test_character.py ``` ## Background Jobs The API uses RQ for background processing: **Start RQ worker:** ```bash rq worker ai_tasks combat_tasks marketplace_tasks --url redis://localhost:6379 ``` **Monitor jobs:** ```bash rq info --url redis://localhost:6379 ``` ## Directory Structure ``` api/ ├── app/ # Application code │ ├── api/ # API endpoint blueprints │ ├── models/ # Data models │ ├── services/ # Business logic │ ├── utils/ # Utilities │ ├── tasks/ # Background jobs │ ├── ai/ # AI integration │ ├── game_logic/ # Game mechanics │ └── data/ # Game data (YAML) ├── config/ # Configuration files ├── tests/ # Test suite ├── scripts/ # Utility scripts ├── logs/ # Application logs ├── docs/ # API documentation ├── requirements.txt # Python dependencies ├── wsgi.py # WSGI entry point ├── docker-compose.yml # Redis service └── .env.example # Environment template ``` ## Development See [CLAUDE.md](../CLAUDE.md) in the project root for: - Coding standards - Development workflow - Project structure guidelines - Git conventions ## Deployment See [DEPLOYMENT.md](../docs/DEPLOYMENT.md) for production deployment instructions. ## Related Components - **Public Web:** `/public_web` - Traditional web frontend - **Godot Client:** `/godot_client` - Native game client Both frontends consume this API backend. ## License Proprietary - All rights reserved