""" Modèles de base de données """ from sqlalchemy import Column, Integer, String, DateTime, Text, Float, ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.sql import func from database import Base class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) username = Column(String(50), unique=True, index=True, nullable=False) email = Column(String(100), unique=True, index=True, nullable=False) hashed_password = Column(String(255), nullable=False) created_at = Column(DateTime(timezone=True), server_default=func.now()) animes = relationship("Anime", back_populates="user", cascade="all, delete-orphan") class Anime(Base): __tablename__ = "animes" id = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("users.id"), nullable=False, index=True) anime_id = Column(String(100), nullable=False, index=True) # ID unique de l'animé (généré par l'extension) title = Column(String(255), nullable=False) current_episode = Column(Integer, default=1) total_episodes = Column(Integer, nullable=True) last_url = Column(Text, nullable=True) source = Column(String(50), nullable=True) # 'crunchyroll' ou 'voiranime' status = Column(String(20), default='en_cours') # 'en_cours' ou 'termine' comment = Column(Text, nullable=True) rating = Column(Float, default=0.0) anilist_id = Column(Integer, nullable=True) cover_image = Column(Text, nullable=True) description = Column(Text, nullable=True) last_updated = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now()) user = relationship("User", back_populates="animes")