Files
mtgonline/backend/PORTED_STATE.md
T

4.0 KiB

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

cd /home/wall-o/projects/mtgonline
docker compose down -v

2. Build the Backend Docker Container

cd /home/wall-o/projects/mtgonline
docker compose build backend

3. Deploy the Stack as a Test Instance

cd /home/wall-o/projects/mtgonline
docker compose up -d

4. Verify Stack Health

# Check all containers are running
docker compose ps

# Check backend health endpoint
curl http://localhost:5555/health

5. Check Logs for Issues

# 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

# 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