""" Authentication models - RefreshToken and AuthAuditLog. Job ID: MTAD-IMPL-2025-11-18-CL """ from sqlalchemy import Column, String, DateTime, ForeignKey, Integer from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.database import Base class RefreshToken(Base): """Refresh Token entity - Session management.""" __tablename__ = "refresh_tokens" id = Column(String(36), primary_key=True, index=True) user_id = Column(String(36), ForeignKey("users.id"), index=True, nullable=False) token_hash = Column(String(255), unique=True, nullable=False) expires_at = Column(DateTime, nullable=False, index=True) created_at = Column(DateTime, server_default=func.now()) revoked_at = Column(DateTime, nullable=True) # Relationships user = relationship("User", back_populates="refresh_tokens") class AuthAuditLog(Base): """Auth Audit Log - Compliance and security auditing.""" __tablename__ = "auth_audit_logs" id = Column(String(36), primary_key=True, index=True) user_id = Column(String(36), ForeignKey("users.id"), index=True, nullable=True) event_type = Column(String(50), index=True, nullable=False) # signup, login_success, login_fail, password_reset, mfa_enable, etc. ip_address = Column(String(45), nullable=True) user_agent = Column(String(500), nullable=True) created_at = Column(DateTime, server_default=func.now(), index=True) # Relationships user = relationship("User", back_populates="audit_logs")