"""Модели запросов (заявок).""" from datetime import datetime from sqlalchemy import DateTime, ForeignKey, String, Text, func from sqlalchemy.orm import Mapped, mapped_column, relationship from app.db.session import Base from app.models.enums import RequestStatus, RequestType from app.models.types import enum_col class Request(Base): __tablename__ = "requests" id: Mapped[int] = mapped_column(primary_key=True) type: Mapped[RequestType] = mapped_column(enum_col(RequestType)) user_id: Mapped[int | None] = mapped_column(ForeignKey("users.id")) region_id: Mapped[int | None] = mapped_column(ForeignKey("regions.id")) subject: Mapped[str | None] = mapped_column(String(300)) body: Mapped[str | None] = mapped_column(Text) status: Mapped[RequestStatus] = mapped_column( enum_col(RequestStatus), default=RequestStatus.NEW ) assigned_to: Mapped[int | None] = mapped_column(ForeignKey("users.id")) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now() ) comments: Mapped[list["RequestComment"]] = relationship(back_populates="request") class RequestComment(Base): __tablename__ = "request_comments" id: Mapped[int] = mapped_column(primary_key=True) request_id: Mapped[int] = mapped_column(ForeignKey("requests.id", ondelete="CASCADE")) author_id: Mapped[int | None] = mapped_column(ForeignKey("users.id")) body: Mapped[str] = mapped_column(Text) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) request: Mapped[Request] = relationship(back_populates="comments")