201 előtti mentés
This commit is contained in:
@@ -18,6 +18,7 @@ if TYPE_CHECKING:
|
||||
from .gamification import UserStats
|
||||
from .payment import PaymentIntent, WithdrawalRequest
|
||||
from .social import ServiceReview, SocialAccount
|
||||
from ..marketplace.service_request import ServiceRequest
|
||||
|
||||
class UserRole(str, enum.Enum):
|
||||
superadmin = "superadmin"
|
||||
@@ -135,6 +136,7 @@ class User(Base):
|
||||
preferred_language: Mapped[str] = mapped_column(String(5), server_default="hu")
|
||||
region_code: Mapped[str] = mapped_column(String(5), server_default="HU")
|
||||
preferred_currency: Mapped[str] = mapped_column(String(3), server_default="HUF")
|
||||
ui_mode: Mapped[str] = mapped_column(String(20), server_default="personal")
|
||||
|
||||
scope_level: Mapped[str] = mapped_column(String(30), server_default="individual")
|
||||
scope_id: Mapped[Optional[str]] = mapped_column(String(50))
|
||||
@@ -182,6 +184,7 @@ class User(Base):
|
||||
# Pénzügyi és egyéb kapcsolatok
|
||||
withdrawal_requests: Mapped[List["WithdrawalRequest"]] = relationship("WithdrawalRequest", foreign_keys="[WithdrawalRequest.user_id]", back_populates="user", cascade="all, delete-orphan")
|
||||
service_reviews: Mapped[List["ServiceReview"]] = relationship("ServiceReview", back_populates="user", cascade="all, delete-orphan")
|
||||
service_requests: Mapped[List["ServiceRequest"]] = relationship("ServiceRequest", back_populates="user", cascade="all, delete-orphan")
|
||||
|
||||
class Wallet(Base):
|
||||
""" Felhasználói pénztárca. """
|
||||
|
||||
@@ -15,6 +15,7 @@ from .service import (
|
||||
ServiceProfile,
|
||||
ExpertiseTag,
|
||||
ServiceExpertise,
|
||||
Cost,
|
||||
)
|
||||
|
||||
from .logistics import Location, LocationType
|
||||
@@ -44,6 +45,7 @@ __all__ = [
|
||||
"ServiceProfile",
|
||||
"ExpertiseTag",
|
||||
"ServiceExpertise",
|
||||
"Cost",
|
||||
"ServiceStaging",
|
||||
"DiscoveryParameter",
|
||||
"Location",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import enum
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from typing import Any, List, Optional
|
||||
from typing import Any, List, Optional, TYPE_CHECKING
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey, JSON, text, Numeric, BigInteger, Float
|
||||
from sqlalchemy.dialects.postgresql import ENUM as PG_ENUM, UUID as PG_UUID, JSONB
|
||||
@@ -13,6 +13,9 @@ from geoalchemy2 import Geometry
|
||||
# MB 2.0: A központi aszinkron adatbázis motorból húzzuk be a Base-t
|
||||
from app.database import Base
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .service_request import ServiceRequest
|
||||
|
||||
class OrgType(str, enum.Enum):
|
||||
individual = "individual"
|
||||
service = "service"
|
||||
@@ -222,6 +225,13 @@ class Branch(Base):
|
||||
|
||||
# Kapcsolatok (Primaryjoin tartva a rating rendszerhez)
|
||||
reviews: Mapped[List["Rating"]] = relationship(
|
||||
"Rating",
|
||||
"Rating",
|
||||
primaryjoin="and_(Branch.id==foreign(Rating.target_branch_id))"
|
||||
)
|
||||
|
||||
# Kapcsolat a ServiceRequest modellel
|
||||
service_requests: Mapped[List["ServiceRequest"]] = relationship(
|
||||
"ServiceRequest",
|
||||
back_populates="branch",
|
||||
cascade="all, delete-orphan"
|
||||
)
|
||||
@@ -156,4 +156,21 @@ class DiscoveryParameter(Base):
|
||||
city: Mapped[str] = mapped_column(String(100))
|
||||
keyword: Mapped[str] = mapped_column(String(100))
|
||||
is_active: Mapped[bool] = mapped_column(Boolean, default=True)
|
||||
last_run_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True))
|
||||
last_run_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True))
|
||||
|
||||
|
||||
class Cost(Base):
|
||||
""" Költségnapló a trust engine számára. """
|
||||
__tablename__ = "costs"
|
||||
__table_args__ = {"schema": "marketplace"}
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||||
vehicle_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True)
|
||||
category: Mapped[str] = mapped_column(String(50), nullable=False, index=True)
|
||||
amount: Mapped[float] = mapped_column(Numeric(12, 2), nullable=False)
|
||||
currency: Mapped[str] = mapped_column(String(3), default="HUF")
|
||||
odometer_km: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
|
||||
occurrence_date: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, index=True)
|
||||
is_deleted: Mapped[bool] = mapped_column(Boolean, default=False)
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), onupdate=func.now(), server_default=func.now())
|
||||
@@ -4,7 +4,7 @@ ServiceRequest - Piactér központi tranzakciós modellje.
|
||||
Epic 7: Marketplace ServiceRequest dedikált modell.
|
||||
"""
|
||||
|
||||
from typing import Optional
|
||||
from typing import Optional, TYPE_CHECKING
|
||||
from datetime import datetime
|
||||
from sqlalchemy import String, ForeignKey, Text, DateTime, Numeric, Integer, Index
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
@@ -12,6 +12,11 @@ from sqlalchemy.sql import func
|
||||
|
||||
from app.database import Base
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ..identity.identity import User
|
||||
from ..vehicle.asset import Asset
|
||||
from ..marketplace.service import Branch
|
||||
|
||||
|
||||
class ServiceRequest(Base):
|
||||
"""
|
||||
@@ -87,9 +92,9 @@ class ServiceRequest(Base):
|
||||
)
|
||||
|
||||
# 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")
|
||||
user: Mapped["User"] = relationship("User", back_populates="service_requests", lazy="selectin")
|
||||
asset: Mapped[Optional["Asset"]] = relationship("Asset", back_populates="service_requests", lazy="selectin")
|
||||
branch: Mapped[Optional["Branch"]] = relationship("Branch", back_populates="service_requests", lazy="selectin")
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"<ServiceRequest(id={self.id}, status='{self.status}', user_id={self.user_id})>"
|
||||
@@ -13,6 +13,7 @@ class ParameterScope(str, Enum):
|
||||
GLOBAL = "global"
|
||||
COUNTRY = "country"
|
||||
REGION = "region"
|
||||
ORGANIZATION = "organization"
|
||||
USER = "user"
|
||||
|
||||
class SystemParameter(Base):
|
||||
|
||||
@@ -39,7 +39,7 @@ class Asset(Base):
|
||||
__table_args__ = {"schema": "vehicle"}
|
||||
|
||||
id: Mapped[uuid.UUID] = mapped_column(PG_UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
vin: Mapped[str] = mapped_column(String(17), unique=True, index=True, nullable=False)
|
||||
vin: Mapped[Optional[str]] = mapped_column(String(17), unique=True, index=True, nullable=True)
|
||||
license_plate: Mapped[Optional[str]] = mapped_column(String(20), index=True)
|
||||
name: Mapped[Optional[str]] = mapped_column(String)
|
||||
|
||||
@@ -79,6 +79,7 @@ class Asset(Base):
|
||||
telemetry: Mapped[Optional["AssetTelemetry"]] = relationship("AssetTelemetry", back_populates="asset", uselist=False)
|
||||
assignments: Mapped[List["AssetAssignment"]] = relationship("AssetAssignment", back_populates="asset")
|
||||
ownership_history: Mapped[List["VehicleOwnership"]] = relationship("VehicleOwnership", back_populates="asset")
|
||||
service_requests: Mapped[List["ServiceRequest"]] = relationship("ServiceRequest", back_populates="asset", cascade="all, delete-orphan")
|
||||
|
||||
# --- COMPUTED PROPERTIES (for Pydantic schema compatibility) ---
|
||||
@property
|
||||
@@ -255,4 +256,21 @@ class CatalogDiscovery(Base):
|
||||
attempts: Mapped[int] = mapped_column(Integer, server_default=text("0"))
|
||||
|
||||
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())
|
||||
updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
|
||||
|
||||
class VehicleExpenses(Base):
|
||||
""" Jármű költségek a jelentésekhez. """
|
||||
__tablename__ = "vehicle_expenses"
|
||||
__table_args__ = {"schema": "vehicle"}
|
||||
|
||||
id: Mapped[uuid.UUID] = mapped_column(PG_UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
vehicle_id: Mapped[uuid.UUID] = mapped_column(PG_UUID(as_uuid=True), ForeignKey("vehicle.assets.id"), nullable=False, index=True)
|
||||
category: Mapped[str] = mapped_column(String(50), nullable=False, index=True)
|
||||
amount: Mapped[float] = mapped_column(Numeric(18, 2), nullable=False)
|
||||
date: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now(), index=True)
|
||||
description: Mapped[Optional[str]] = mapped_column(Text)
|
||||
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
# Relationship
|
||||
asset: Mapped["Asset"] = relationship("Asset")
|
||||
Reference in New Issue
Block a user