diff --git a/backend/app/models/__pycache__/organization.cpython-312.pyc b/backend/app/models/__pycache__/organization.cpython-312.pyc index 35c7bef..915fd29 100644 Binary files a/backend/app/models/__pycache__/organization.cpython-312.pyc and b/backend/app/models/__pycache__/organization.cpython-312.pyc differ diff --git a/backend/app/models/organization.py b/backend/app/models/organization.py index 9e4693b..da087ee 100755 --- a/backend/app/models/organization.py +++ b/backend/app/models/organization.py @@ -16,14 +16,14 @@ class Organization(Base): id = Column(Integer, primary_key=True, index=True) name = Column(String, nullable=False) - org_type = Column(Enum(OrgType), default=OrgType.INDIVIDUAL) + # A stabilitás miatt VARCHAR-ként kezeljük a DB-ben + org_type = Column(String(50), default="individual") # A flotta technikai tulajdonosa (User) owner_id = Column(Integer, ForeignKey("data.users.id"), nullable=True) # Üzleti szabályok is_active = Column(Boolean, default=True) - # Privát flotta (INDIVIDUAL) esetén False, cégeknél True is_transferable = Column(Boolean, default=True) # Verifikáció @@ -33,7 +33,20 @@ class Organization(Base): created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) - # Kapcsolatok - vehicles = relationship("Vehicle", back_populates="current_org") + # Kapcsolatok (Asset-re hivatkozunk a Vehicle helyett) + assets = relationship("Asset", back_populates="organization", cascade="all, delete-orphan") members = relationship("OrganizationMember", back_populates="organization") - owner = relationship("User", back_populates="owned_organizations") \ No newline at end of file + owner = relationship("User", back_populates="owned_organizations") + +class OrganizationMember(Base): + __tablename__ = "organization_members" + __table_args__ = {"schema": "data"} + id = Column(Integer, primary_key=True, index=True) + organization_id = Column(Integer, ForeignKey("data.organizations.id"), nullable=False) + user_id = Column(Integer, ForeignKey("data.users.id"), nullable=False) + role = Column(String, default="driver") + + organization = relationship("Organization", back_populates="members") + +# --- EZT A SORT TEDD KÍVÜLRE, A MARGÓRA --- +Organization.vehicles = Organization.assets \ No newline at end of file diff --git a/docs/V01_gemini/15_Changelog.md b/docs/V01_gemini/15_Changelog.md index 2206888..756c847 100644 --- a/docs/V01_gemini/15_Changelog.md +++ b/docs/V01_gemini/15_Changelog.md @@ -117,4 +117,20 @@ A fejlesztések rendben tartásához javaslom a **`17_DEVELOPER_NOTES_AND_PITFAL - **Funkció:** Teljes körű személyazonosság-kezelés és fiókaktiválás. - **Automatizálás:** Regisztrációkor automatikusan létrejön a "Privát Flotta" (Organization) és a digitális pénztárca (Wallet). - **Adatvédelem:** Elkészült a "Digitális Széf" logika az okmányok és vészhelyzeti adatok biztonságos tárolására. -- **Technikai fix:** SQLAlchemy `joinedload` integráció az aszinkron adatkezeléshez és JSON-safe dátumkezelés. \ No newline at end of file +- **Technikai fix:** SQLAlchemy `joinedload` integráció az aszinkron adatkezeléshez és JSON-safe dátumkezelés. + +## [0.3.0] - 2026-02-07 + +### ✨ Hozzáadva (Added) +- **Asset DNS Modell:** Új, univerzális eszközkezelő rendszer (Assets, VehicleCatalog, AssetEvents, AssetRatings). +- **Harvester Robot:** Automata adatgyűjtő rendszer, amely külső forrásokból tölti fel a globális járműkatalógust. +- **UUID Implementáció:** Az eszközök (Assets) és események (Events) mostantól biztonságos UUID azonosítókat használnak. + +### ⚙️ Adatbázis Változások (Database) +- `data.vehicle_catalog` tábla létrehozva a globális specifikációknak. +- `data.assets` tábla létrehozva a konkrét példányok (VIN/HIN alapú) tárolására. +- `data.asset_events` és `data.asset_ratings` táblák az életút és közösségi visszajelzések kezelésére. + +### 🛠️ Refaktor (Refactor) +- **Modell Konszolidáció:** A korábbi `Vehicle` és `VehicleBrand` modellek beolvasztva az új `Asset` és `VehicleCatalog` struktúrába. +- **Kapcsolati Térkép:** Az `Organization` és `User` modellek frissítve az új Asset logikához. \ No newline at end of file diff --git a/docs/V01_gemini/18_ASSET_AND_FLEET_SPECIFICATION.md b/docs/V01_gemini/18_ASSET_AND_FLEET_SPECIFICATION.md index ef9d519..5afa6c5 100644 --- a/docs/V01_gemini/18_ASSET_AND_FLEET_SPECIFICATION.md +++ b/docs/V01_gemini/18_ASSET_AND_FLEET_SPECIFICATION.md @@ -66,4 +66,20 @@ A rendszer integritásáért és az adatok pontosságáért egy automata Robot f ### Adatforrások hierarchiája: 1. Hivatalos gyártói API-k (ahol elérhető). 2. Nyilvános műszaki adatbázisok (Auto-Data, UltimateSpecs). -3. VIN/HIN dekóder algoritmusok. \ No newline at end of file +3. VIN/HIN dekóder algoritmusok. + +## 7. Kivételkezelés: Ismeretlen és Egyedi Járművek + +Ha egy jármű nem található a globális katalógusban, a rendszer kétlépcsős mentőövet nyújt: + +### A) On-Demand Harvester (Robot hívása) +1. A felhasználó jelzi, hogy hiányzik a típus. +2. A Robot utasítást kap egy mélyebb keresésre (Deep Web Search). +3. Ha találat van, a Robot rögzíti a katalógusba, és a felhasználó folytathatja a rögzítést. + +### B) Custom Asset (Egyedi/Sport jármű rögzítése) +Ha a jármű sehol nem szerepel (pl. épített versenyautó, egyedi yacht): +1. **Manuális nyilatkozat:** A felhasználó rögzíti az adatokat. +2. **Dokumentum alapú validáció:** A forgalmi engedély vagy sportigazolvány fotóját kötelező feltölteni. +3. **AI Verifikáció:** A rendszer OCR-rel (szövegfelismerés) kiolvassa az adatokat a fotóról, és összeveti a manuális bevitelével. +4. **"Unverified Model" jelzés:** A katalógusban egyedi azonosítót kap, amíg egy admin vagy a Robot más forrásból meg nem erősíti. \ No newline at end of file