Files
mtgonline/backend/app/schemas/game_schemas.py
T
akadmin 1df04aea52 Phase 7: End-to-End API Testing - Database setup, migrations, and application fixes
- Switched from psycopg2 to asyncpg for async SQLAlchemy support
- Fixed router registration in main.py - removed duplicate prefixes
- Added user_data export to routers/__init__.py
- Refactored decks router to use DeckManager service layer
- Integrated FuzzyCardMatcher into card_router search endpoints
- Made WishlistCreate.card_id optional for proper schema validation
- Set PostgreSQL password and configured scram-sha-256 auth
- Updated alembic.ini to use local PostgreSQL instead of Docker hostname
- Created generic_schemas.py for reusable schema patterns
- Added test_routers.py and test_schema_validation.py test files
- All 6 Alembic migrations applied successfully (37 tables created)
- Application running on port 8000 with all services connected
2026-08-18 03:35:19 +00:00

60 lines
1.3 KiB
Python

"""Pydantic schemas for game features."""
from pydantic import BaseModel, Field, ConfigDict
from typing import Optional, List
from datetime import datetime
class GameCreate(BaseModel):
"""Game creation request."""
room_id: int
game_type: Optional[str] = None
description: Optional[str] = None
password: Optional[str] = None
class GameResponse(BaseModel):
"""Game response payload."""
id: int
room_id: int
game_type: Optional[str]
description: Optional[str]
with_password: bool
max_players: int
player_count: int
started: bool
creation_date: datetime
model_config = ConfigDict(from_attributes=True)
class GameJoinRequest(BaseModel):
"""Game join request."""
game_id: int
class GameLeaveRequest(BaseModel):
"""Game leave request."""
game_id: int
class GameListResponse(BaseModel):
"""List of games."""
games: List[GameResponse]
total: int
class GamePlayerResponse(BaseModel):
"""Game player response."""
user_id: int
username: str
deck_id: Optional[int] = None
deck_name: Optional[str] = None
class GameStateResponse(BaseModel):
"""Game state response."""
game_id: int
state: str
players: List[GamePlayerResponse]
turn: Optional[int] = None