Initial commit: API Anime Tracker avec authentification et synchronisation

This commit is contained in:
ɧσℓσ
2025-12-01 22:22:15 +01:00
commit 467cf313e4
11 changed files with 820 additions and 0 deletions

42
models.py Normal file
View File

@@ -0,0 +1,42 @@
"""
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")