"""SQLAlchemy ORM model for card import batches.""" from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Text, JSON from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.core.database import Base class CardImportBatch(Base): """ Card import batch record. Tracks a single file import with its status and match results. """ __tablename__ = "card_import_batches" id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column(Integer, ForeignKey("mtgonline_users.id", ondelete="CASCADE"), nullable=False, index=True) filename = Column(String(255), nullable=False) file_type = Column(String(10), nullable=False) # xlsx, csv, json, ods file_size = Column(Integer, nullable=False) # File size in bytes status = Column(String(20), nullable=False, default="pending", index=True) # pending, processing, completed, failed total_cards = Column(Integer, default=0) matched_cards = Column(Integer, default=0) unmatched_cards = Column(Integer, default=0) match_results = Column(JSON, nullable=True) # Store match results for later retrieval error_message = Column(Text, nullable=True) created_at = Column(DateTime, server_default=func.now()) updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) # Relationships user = relationship("User", backref="import_batches") def __repr__(self) -> str: return f"" class UserCardImportRecord(Base): """ Confirmed user card import record. Stores the confirmed state of an imported card collection. """ __tablename__ = "user_card_imports_confirmed" id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column(Integer, ForeignKey("mtgonline_users.id", ondelete="CASCADE"), nullable=False, index=True) batch_id = Column(Integer, ForeignKey("card_import_batches.id", ondelete="CASCADE"), nullable=False, index=True) is_confirmed = Column(Boolean, nullable=False, default=True) confirmed_at = Column(DateTime, server_default=func.now()) # Relationships user = relationship("User", backref="confirmed_imports") batch = relationship("CardImportBatch", backref="confirmations") def __repr__(self) -> str: return f""