92 lines
2.2 KiB
Markdown
92 lines
2.2 KiB
Markdown
# MTG Online Backend
|
|
|
|
FastAPI application for processing MTG card data and managing user decks.
|
|
|
|
## Overview
|
|
|
|
Python FastAPI application that:
|
|
- Downloads and processes MTGJSON v5 data
|
|
- Stores card data in PostgreSQL (`mtgdata` database)
|
|
- Manages user accounts, decks, and card imports
|
|
- Exposes REST API for deckbuilding and card search
|
|
|
|
## Key Features
|
|
|
|
- **MTGJSON Data Pipeline** — Downloads and upserts MTGJSON v5 dataset
|
|
- **Card Import** — Users import card collections with fuzzy matching
|
|
- **Deck Management** — Create, edit, and finalize decks with precedents
|
|
- **Card Search** — Fast card lookup for deckbuilding
|
|
- **JWT Authentication** — Secured API endpoints
|
|
|
|
## API Endpoints
|
|
|
|
### Card Import (`/api/v1/card-import/`)
|
|
|
|
| Method | Endpoint | Description |
|
|
|--------|----------|-------------|
|
|
| `GET` | `/status` | Get import status |
|
|
| `POST` | `/` | Import/update cards |
|
|
| `DELETE` | `/` | Delete import |
|
|
| `GET` | `/summary` | Match results summary |
|
|
|
|
### User Data (`/api/v1/user-data/`)
|
|
|
|
| Method | Endpoint | Description |
|
|
|--------|----------|-------------|
|
|
| `GET/PUT` | `/profile` | User profile |
|
|
| `GET` | `/collection` | Card collection |
|
|
| `GET` | `/groups` | User groups |
|
|
| `GET` | `/preferences` | User preferences |
|
|
| `GET` | `/replays` | User replays |
|
|
|
|
### Decks (`/api/v1/decks/`)
|
|
|
|
| Method | Endpoint | Description |
|
|
|--------|----------|-------------|
|
|
| CRUD | `/{deck_id}` | Deck management |
|
|
| `POST` | `/{deck_id}/cards` | Add card to deck |
|
|
| `POST` | `/{deck_id}/finalize` | Finalize deck |
|
|
| `POST` | `/search/cards` | Search cards |
|
|
| CRUD | `/precedents/` | Deck precedents |
|
|
| CRUD | `/suggestions/` | Card suggestions |
|
|
|
|
## Tech Stack
|
|
|
|
- **Language:** Python 3.12
|
|
- **Framework:** FastAPI
|
|
- **Database:** PostgreSQL (async via asyncpg)
|
|
- **ORM:** SQLAlchemy 2.0
|
|
- **Migrations:** Alembic
|
|
- **Cache:** Redis
|
|
- **Auth:** JWT (python-jose + bcrypt)
|
|
|
|
## Running Locally
|
|
|
|
```bash
|
|
# Start services
|
|
docker compose -f ../docker-compose.dev.yml up -d
|
|
|
|
# Run migrations
|
|
cd app && alembic upgrade head
|
|
|
|
# Access API
|
|
curl http://localhost:5555/health
|
|
```
|
|
|
|
## Migrations
|
|
|
|
```bash
|
|
# Create new migration
|
|
alembic revision --autogenerate -m "description"
|
|
|
|
# Run migrations
|
|
alembic upgrade head
|
|
|
|
# Rollback
|
|
alembic downgrade -1
|
|
```
|
|
|
|
## License
|
|
|
|
MIT
|