from sqlalchemy import ( Column, Integer, String, DateTime, Float, Text, Boolean, ) from sqlalchemy.ext.declarative import declarative_base from datetime import datetime Base = declarative_base() class CacheMetadata(Base): __tablename__ = "cache_metadata" id = Column(Integer, primary_key=True, autoincrement=True) cache_type = Column(String(50), unique=True, nullable=False) last_refresh = Column(DateTime, default=datetime.now) item_count = Column(Integer, default=0) refresh_duration_ms = Column(Float, nullable=True) last_error = Column(Text, nullable=True) error_count = Column(Integer, default=0) def __repr__(self): return f"" class AuditLog(Base): __tablename__ = "audit_logs" id = Column(Integer, primary_key=True, autoincrement=True) action = Column(String(100), nullable=False, index=True) ressource_type = Column(String(50), nullable=True) ressource_id = Column(String(100), nullable=True, index=True) utilisateur = Column(String(100), nullable=True) ip_address = Column(String(45), nullable=True) succes = Column(Boolean, default=True) details = Column(Text, nullable=True) erreur = Column(Text, nullable=True) date_action = Column(DateTime, default=datetime.now, nullable=False, index=True) def __repr__(self): return f"" class RefreshToken(Base): __tablename__ = "refresh_tokens" id = Column(String(36), primary_key=True) user_id = Column(String(36), nullable=False, index=True) token_hash = Column(String(255), nullable=False, unique=True, index=True) device_info = Column(String(500), nullable=True) ip_address = Column(String(45), nullable=True) expires_at = Column(DateTime, nullable=False) created_at = Column(DateTime, default=datetime.now, nullable=False) is_revoked = Column(Boolean, default=False) revoked_at = Column(DateTime, nullable=True) def __repr__(self): return f"" class LoginAttempt(Base): __tablename__ = "login_attempts" id = Column(Integer, primary_key=True, autoincrement=True) email = Column(String(255), nullable=False, index=True) ip_address = Column(String(45), nullable=False, index=True) user_agent = Column(String(500), nullable=True) success = Column(Boolean, default=False) failure_reason = Column(String(255), nullable=True) timestamp = Column(DateTime, default=datetime.now, nullable=False, index=True) def __repr__(self): return f""