# /opt/docker/dev/service_finder/backend/app/models/marketplace/service_request.py """ ServiceRequest - Piactér központi tranzakciós modellje. Epic 7: Marketplace ServiceRequest dedikált modell. """ from typing import Optional from datetime import datetime from sqlalchemy import String, ForeignKey, Text, DateTime, Numeric, Integer, Index from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql import func from app.database import Base class ServiceRequest(Base): """ Szervizigény (ServiceRequest) tábla. Egy felhasználó által létrehozott szervizigényt reprezentál, amely lehetővé teszi a szervizszolgáltatók számára árajánlatok készítését és a tranzakciók lebonyolítását. """ __tablename__ = "service_requests" __table_args__ = ( Index('idx_service_request_status', 'status'), Index('idx_service_request_user_id', 'user_id'), Index('idx_service_request_asset_id', 'asset_id'), Index('idx_service_request_branch_id', 'branch_id'), {"schema": "marketplace"} ) id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True) # Idegen kulcsok (Kapcsolódási pontok) user_id: Mapped[int] = mapped_column( ForeignKey("identity.users.id", ondelete="CASCADE"), nullable=False, index=True, comment="A szervizigényt létrehozó felhasználó" ) asset_id: Mapped[Optional[int]] = mapped_column( ForeignKey("vehicle.assets.id", ondelete="SET NULL"), nullable=True, comment="Érintett jármű (opcionális)" ) branch_id: Mapped[Optional[int]] = mapped_column( ForeignKey("fleet.branches.id", ondelete="SET NULL"), nullable=True, comment="Célzott szerviz (ha van)" ) # Üzleti logika mezők status: Mapped[str] = mapped_column( String(50), server_default="pending", index=True, comment="pending, quoted, accepted, scheduled, completed, cancelled" ) description: Mapped[Optional[str]] = mapped_column( Text, nullable=True, comment="A szervizigény részletes leírása" ) price_estimate: Mapped[Optional[float]] = mapped_column( Numeric(10, 2), nullable=True, comment="Becsült ár (opcionális)" ) requested_date: Mapped[Optional[datetime]] = mapped_column( DateTime(timezone=True), nullable=True, comment="Kért szerviz dátum" ) # Audit created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False, comment="Létrehozás időbélyege" ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, comment="Utolsó módosítás időbélyege" ) # Relationships (opcionális, de ajánlott a lazy loading miatt) user = relationship("User", back_populates="service_requests", lazy="selectin") asset = relationship("Asset", back_populates="service_requests", lazy="selectin") branch = relationship("Branch", back_populates="service_requests", lazy="selectin") def __repr__(self) -> str: return f""