201 előtti mentés

This commit is contained in:
Roo
2026-03-26 07:09:44 +00:00
parent 89668a9beb
commit 03258db091
124 changed files with 13619 additions and 13347 deletions

View File

@@ -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. """

View File

@@ -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",

View File

@@ -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"
)

View File

@@ -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())

View File

@@ -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})>"

View File

@@ -13,6 +13,7 @@ class ParameterScope(str, Enum):
GLOBAL = "global"
COUNTRY = "country"
REGION = "region"
ORGANIZATION = "organization"
USER = "user"
class SystemParameter(Base):

View File

@@ -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")