Restructure into full project layout
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import enum
|
||||
from datetime import datetime
|
||||
from sqlalchemy import String, Boolean, Enum, DateTime, Integer, Float, ForeignKey, JSON, Text
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from app.core.database import Base
|
||||
|
||||
|
||||
class DeckMode(str, enum.Enum):
|
||||
GENERATE = "generate"
|
||||
COMPLETE = "complete"
|
||||
CULL = "cull"
|
||||
|
||||
|
||||
class CardSlot(str, enum.Enum):
|
||||
CREATURE = "creature"
|
||||
INSTANT = "instant"
|
||||
SORCERY = "sorcery"
|
||||
ENCHANTMENT = "enchantment"
|
||||
ARTIFACT = "artifact"
|
||||
PLANESWALKER = "planeswalker"
|
||||
LAND = "land"
|
||||
BATTLE = "battle"
|
||||
|
||||
|
||||
class Deck(Base):
|
||||
__tablename__ = "decks"
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
owner_id: Mapped[int] = mapped_column(ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True)
|
||||
name: Mapped[str] = mapped_column(String(200), nullable=False)
|
||||
commander: Mapped[str] = mapped_column(String(200), nullable=False)
|
||||
description: Mapped[str | None] = mapped_column(Text)
|
||||
mode: Mapped[DeckMode] = mapped_column(Enum(DeckMode), nullable=False)
|
||||
playstyle: Mapped[str | None] = mapped_column(String(100))
|
||||
prefer_owned: Mapped[bool] = mapped_column(Boolean, default=False)
|
||||
budget_enabled: Mapped[bool] = mapped_column(Boolean, default=False)
|
||||
budget_amount: Mapped[float | None] = mapped_column(Float)
|
||||
budget_scope: Mapped[str] = mapped_column(String(20), default="purchase")
|
||||
ai_reasoning: Mapped[dict | None] = mapped_column(JSON)
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
|
||||
updated_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
|
||||
class DeckCard(Base):
|
||||
__tablename__ = "deck_cards"
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
deck_id: Mapped[int] = mapped_column(ForeignKey("decks.id", ondelete="CASCADE"), nullable=False, index=True)
|
||||
scryfall_id: Mapped[str] = mapped_column(String(36), nullable=False)
|
||||
card_name: Mapped[str] = mapped_column(String(200), nullable=False)
|
||||
slot: Mapped[CardSlot] = mapped_column(Enum(CardSlot), nullable=False)
|
||||
quantity: Mapped[int] = mapped_column(Integer, default=1)
|
||||
is_owned: Mapped[bool] = mapped_column(Boolean, default=False)
|
||||
is_commander: Mapped[bool] = mapped_column(Boolean, default=False)
|
||||
ai_reasoning: Mapped[str | None] = mapped_column(Text)
|
||||
scryfall_data: Mapped[dict | None] = mapped_column(JSON)
|
||||
Reference in New Issue
Block a user