"""SQLAlchemy ORM models for users and duties.""" from sqlalchemy import ForeignKey, Integer, BigInteger, Text from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship class Base(DeclarativeBase): """Declarative base for all models.""" pass class User(Base): __tablename__ = "users" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) telegram_user_id: Mapped[int] = mapped_column(BigInteger, unique=True, nullable=False) full_name: Mapped[str] = mapped_column(Text, nullable=False) username: Mapped[str | None] = mapped_column(Text, nullable=True) first_name: Mapped[str | None] = mapped_column(Text, nullable=True) last_name: Mapped[str | None] = mapped_column(Text, nullable=True) duties: Mapped[list["Duty"]] = relationship("Duty", back_populates="user") class Duty(Base): __tablename__ = "duties" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) user_id: Mapped[int] = mapped_column(Integer, ForeignKey("users.id"), nullable=False) start_at: Mapped[str] = mapped_column(Text, nullable=False) # ISO 8601 end_at: Mapped[str] = mapped_column(Text, nullable=False) # ISO 8601 user: Mapped["User"] = relationship("User", back_populates="duties")