first commit
This commit is contained in:
204
api/README.md
Normal file
204
api/README.md
Normal file
@@ -0,0 +1,204 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user