133 lines
4.0 KiB
Markdown
133 lines
4.0 KiB
Markdown
# MTG Online Backend - Ported State and Next Steps
|
|
|
|
## Project Overview
|
|
The `mtgonline` project is a Magic: The Gathering online application with a Docker-based stack:
|
|
- Two PostgreSQL containers (card data + user data)
|
|
- Backend application on port 5555
|
|
- MTGJSON data loading pipeline
|
|
|
|
## Recent Work Summary
|
|
|
|
### What Was Done
|
|
1. **Created comprehensive interaction router** (`backend/app/routers/interactions.py`)
|
|
- Synergies search with filters (type, strength, confidence, pagination)
|
|
- Counters search with filters
|
|
- Evolutions search with filters
|
|
- Card recommendations (synergy, counter, evolution types)
|
|
- Card interaction statistics
|
|
- Redis caching for performance
|
|
|
|
2. **Fixed main.py** to properly mount all routers
|
|
- Removed duplicate search implementation
|
|
- Added all routers: auth, users, decks, rooms, games, admin, card_router, interactions
|
|
- Added verbose logging configuration
|
|
- Added lifespan events for startup/shutdown
|
|
|
|
3. **Updated __init__.py** to export all routers
|
|
- Centralized router imports
|
|
- Proper package structure
|
|
|
|
4. **Updated Dockerfile** to include interaction scripts
|
|
- Added scripts directory to container
|
|
- Made scripts executable
|
|
- Proper permissions for appuser
|
|
|
|
### Files Modified/Created
|
|
- `backend/app/routers/interactions.py` - NEW
|
|
- `backend/app/main.py` - REWRITTEN
|
|
- `backend/app/routers/__init__.py` - REWRITTEN
|
|
- `backend/Dockerfile` - REWRITTEN
|
|
|
|
### Key Technical Decisions
|
|
- All interactions use async SQLAlchemy with mtg_get_db dependency
|
|
- Redis caching with 10-30 minute TTLs
|
|
- Proper error handling with HTTPException
|
|
- Consistent database connection pattern across all endpoints
|
|
- Logging setup with debug/verbose support
|
|
|
|
## Next Steps (Execute in Order)
|
|
|
|
### 1. Stop and Destroy All Docker Containers
|
|
```bash
|
|
cd /home/wall-o/projects/mtgonline
|
|
docker compose down -v
|
|
```
|
|
|
|
### 2. Build the Backend Docker Container
|
|
```bash
|
|
cd /home/wall-o/projects/mtgonline
|
|
docker compose build backend
|
|
```
|
|
|
|
### 3. Deploy the Stack as a Test Instance
|
|
```bash
|
|
cd /home/wall-o/projects/mtgonline
|
|
docker compose up -d
|
|
```
|
|
|
|
### 4. Verify Stack Health
|
|
```bash
|
|
# Check all containers are running
|
|
docker compose ps
|
|
|
|
# Check backend health endpoint
|
|
curl http://localhost:5555/health
|
|
```
|
|
|
|
### 5. Check Logs for Issues
|
|
```bash
|
|
# View backend logs
|
|
docker compose logs backend
|
|
|
|
# View PostgreSQL logs if needed
|
|
docker compose logs db_card
|
|
docker compose logs db_user
|
|
```
|
|
|
|
### 6. Troubleshoot Issues
|
|
If errors are found:
|
|
- **Import errors**: Check that all router modules exist and are properly imported
|
|
- **Database connection errors**: Verify `.env` file has correct database URLs
|
|
- **Port conflicts**: Ensure port 5555 is available
|
|
- **Permission errors**: Check Dockerfile has proper user/permissions setup
|
|
|
|
## Commands to Monitor Progress
|
|
```bash
|
|
# Watch logs in real-time
|
|
docker compose logs -f backend
|
|
|
|
# Check container status
|
|
docker compose ps
|
|
|
|
# Restart specific container
|
|
docker compose restart backend
|
|
|
|
# View specific container logs
|
|
docker compose logs --tail=50 backend
|
|
```
|
|
|
|
## Key Configuration
|
|
- Backend port: 5555
|
|
- Database URLs in `.env` file
|
|
- Two PostgreSQL databases: `mtgdata` (card data) and `users` (user data)
|
|
- Redis for caching
|
|
- All routers mounted in `app/main.py`
|
|
|
|
## Expected Behavior
|
|
Once healthy, the backend should:
|
|
- Serve API documentation at `/docs`
|
|
- Respond to health checks at `/health`
|
|
- Have all interaction endpoints available at `/interactions/*`
|
|
- Show proper logging output indicating successful startup
|
|
|
|
## Error Resolution Strategy
|
|
1. **Simple errors**: Fix directly (typos, import paths, missing dependencies)
|
|
2. **Complex issues**: Document the problem, check Docker logs for stack traces, and consult with user
|
|
3. **Database issues**: Verify connection strings, check PostgreSQL logs, ensure databases exist
|
|
|
|
## Important Notes
|
|
- All code execution must be as wall-o user (not root)
|
|
- Use `/home/wall-o/workspace/venv` for Python dependencies
|
|
- Docker commands should be run from `/home/wall-o/projects/mtgonline`
|
|
- The `.env` file is separate from application config
|