# 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