from sqlalchemy import Column, Integer, String, Float, Text, Date, Boolean, JSON from sqlalchemy.orm import relationship from app.db.base_class import Base class Anime(Base): id = Column(Integer, primary_key=True, index=True) title = Column(String(255), index=True, nullable=False) alternative_titles = Column(String(500), nullable=True) synopsis = Column(Text, nullable=True) episodes = Column(Integer, nullable=True) status = Column(String(50), nullable=True) # airing, finished, upcoming aired_from = Column(Date, nullable=True) aired_to = Column(Date, nullable=True) duration = Column(String(50), nullable=True) # per episode (e.g., "24 min per ep") rating = Column(String(50), nullable=True) # PG-13, R, etc. score = Column(Float, nullable=True) ranked = Column(Integer, nullable=True) popularity = Column(Integer, nullable=True) studio = Column(String(100), nullable=True) source = Column(String(50), nullable=True) # manga, light novel, etc. image_url = Column(String(255), nullable=True) # New fields: Season information season = Column(String(20), nullable=True) # "Winter", "Spring", "Summer", "Fall" season_year = Column(Integer, nullable=True) # Year of the season # New fields: Rating details score_count = Column(Integer, nullable=True) # Number of people who rated favorites_count = Column(Integer, nullable=True) # Number of people who favorited # Additional metadata broadcast_day = Column(String(20), nullable=True) # Day of the week broadcast_time = Column(String(20), nullable=True) # Time of day is_airing = Column(Boolean, nullable=True) # Whether it's currently airing licensors = Column(String(255), nullable=True) # Companies with licenses producers = Column(String(255), nullable=True) # Production companies # Related anime info related_anime = Column(JSON, nullable=True) # JSON field to store related anime info # Content tags themes = Column(String(255), nullable=True) # Themes like "School", "Military" demographics = Column(String(100), nullable=True) # Target audience like "Shounen", "Seinen" # Relationships characters = relationship("Character", back_populates="anime", cascade="all, delete-orphan")