""" Модели для служебной базы данных """ from sqlalchemy import Column, Integer, String, Date, ForeignKey, DateTime, Boolean from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.core.database import Base class AppRole(Base): """Роли пользователей сервиса""" __tablename__ = "app_roles" id = Column(Integer, primary_key=True, index=True) role_name = Column(String(50), unique=True, nullable=False) users = relationship("AppUser", back_populates="role") class AppUser(Base): """Пользователи сервиса дашбордов""" __tablename__ = "app_users" id = Column(Integer, primary_key=True, index=True) login = Column(String(100), unique=True, nullable=False, index=True) hashed_password = Column(String(255), nullable=False) role_id = Column(Integer, ForeignKey("app_roles.id"), nullable=False) created_at = Column(DateTime(timezone=True), server_default=func.now()) is_active = Column(Boolean, default=True) role = relationship("AppRole", back_populates="users") leave_events = relationship("LeaveEvent", back_populates="user") class LeaveEvent(Base): """События отпусков и больничных""" __tablename__ = "leave_events" id = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("app_users.id"), nullable=False) start_date = Column(Date, nullable=False) end_date = Column(Date, nullable=False) leave_type = Column(String(50), nullable=False) # 'Отпуск', 'Больничный' created_at = Column(DateTime(timezone=True), server_default=func.now()) user = relationship("AppUser", back_populates="leave_events") class AppConfiguration(Base): """Конфигурация сервиса (нечувствительные данные)""" __tablename__ = "app_configuration" id = Column(Integer, primary_key=True, index=True) key = Column(String(100), unique=True, nullable=False, index=True) value = Column(String(500), nullable=True) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())