Files
dash/backend/app/models/service_db.py

58 lines
2.2 KiB
Python
Raw Normal View History

"""
Модели для служебной базы данных
"""
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())