7.7 KiB
🔍 Deep Dive Audit Jelentés — Címek, API sémák & Autónyíri Kft. (ID 58)
Dátum: 2026-06-17 Auditor: Architect Mode Cél: A cím szétdarabolás, kapcsolatfelvételi mezők és API sémák állapotának felmérése
1. ADATBÁZIS SÉMA AUDIT — Organization modell
Fájl: backend/app/models/marketplace/organization.py
1.1 Cím mezők az Organization táblában (fleet.organizations)
A modell rendelkezik atomizált címmezőkkel:
| Mező | Típus | Hossz | Leírás |
|---|---|---|---|
address_id |
PG_UUID, FK→system.addresses.id |
- | Opcionális hivatkozás a központi cím táblára |
address_zip |
String | 10 | Irányítószám |
address_city |
String | 100 | Város |
address_street_name |
String | 150 | Utca név (pl. "Egressy u.") |
address_street_type |
String | 50 | Közterület típus (pl. "utca", "út", "tér") — jelenleg null |
address_house_number |
String | 20 | Házszám (pl. "4.") — jelenleg null |
address_hrsz |
String | 50 | Helyrajzi szám |
Megjegyzés: A Branch modell még tovább bontja: stairwell, floor, door — ezek az Organization-ben nincsenek implementálva, de a CorpOnboardIn séma tartalmazza őket.
1.2 Kapcsolatfelvételi mezők
Az Organization modell NEM tartalmazza a következőket:
- ❌
contact_phone - ❌
contact_email - ❌
website
Ezek a ServiceProfile modellben vannak (backend/app/models/marketplace/service.py):
| Mező | Típus | Tábla |
|---|---|---|
contact_phone |
String | marketplace.service_profiles |
contact_email |
String | marketplace.service_profiles |
website |
String | marketplace.service_profiles |
Következtetés: A kapcsolatfelvételi adatok szét vannak szórva két tábla között. Az Organization-ben tárolódnak a címadatok, míg a ServiceProfile-ban a telefon/email/weboldal. Ez egy 1:1 kapcsolat organization_id-n keresztül.
2. API SÉMA AUDIT — Provider Pydantic sémák
Fájl: backend/app/schemas/provider.py
2.1 CRITICAL BUG: A ProviderQuickAddIn és ProviderUpdateIn sérülékeny
Mindkét séma összevont street mezőt használ:
# provider.py sor 59
street: Optional[str] = Field(None, max_length=255, description="Utca, házszám")
Eközben a modell (Organization) atomizált mezőket vár:
# organization.py sor 83-86
address_street_name: Mapped[Optional[str]] # Utca név
address_street_type: Mapped[Optional[str]] # Közterület típus
address_house_number: Mapped[Optional[str]] # Házszám
A quick_add_provider() függvény (provider_service.py:403) a teljes street sztringet az address_street_name-be tömöríti:
org.address_street_name = data.street, # "Egressy u. 4." → address_street_name
Következmény: address_street_type és address_house_number mindig null maradnak a crowdsource-olt szolgáltatóknál!
2.2 A ProviderSearchResult séma hiányosságai
A ProviderSearchResult (provider.py:21) nem tartalmazza az atomizált címmezőket:
- ❌
address_street_name— hiányzik - ❌
address_street_type— hiányzik - ❌
address_house_number— hiányzik - ❌
address_hrsz— hiányzik - ✅
address_zip— van - ⚠️
address— generic string (összefűzött) - ⚠️
city— generic string
2.3 A CorpOnboardIn séma (organization.py) helyes
A CorpOnboardIn helyesen tartalmazza az összes atomizált mezőt:
address_zip, address_city, address_street_name, address_street_type, address_house_number, address_stairwell, address_floor, address_door, address_hrsz
Az OrganizationUpdate is helyes.
3. NYERS ADAT — Autónyíri Kft. (ID 58)
3.1 Organization rekord
{
"id": 58,
"name": "Autónyíri Kft.",
"full_name": "Autónyíri Kft.",
"org_type": "service_provider",
"status": "pending_verification",
"is_verified": false,
"is_active": true,
"is_deleted": false,
"tax_number": null,
"reg_number": null,
"country_code": "HU",
"language": "hu",
"default_currency": "HUF",
"address_id": null,
"address_zip": null,
"address_city": "Dunakeszi",
"address_street_name": "Egressy u. 4.",
"address_street_type": null,
"address_house_number": null,
"address_hrsz": null,
"first_registered_at": "2026-06-16 23:16:23",
"lifecycle_index": 1,
"subscription_plan": "FREE",
"owner_id": 2,
"legal_owner_id": null,
"folder_slug": "84632013004e",
"aliases": [],
"tags": [],
"external_integration_config": {},
"visual_settings": {"theme": "default", "primary_color": null, "wall_logo_url": null}
}
3.2 ServiceProfile rekord
{
"id": 3,
"organization_id": 58,
"status": "ghost",
"contact_phone": null,
"contact_email": null,
"website": null,
"bio": null,
"is_verified": false,
"trust_score": 30,
"rating": null,
"specialization_tags": {"primary_category": "auto_szerelo"}
}
3.3 Branch rekord
{
"id": "3b80ee85-7712-4b17-b992-d62dcefdf5e2",
"name": "Autónyíri Kft.",
"is_main": true,
"status": "active",
"city": "Dunakeszi",
"street_name": "Egressy u. 4.",
"street_type": null,
"house_number": null,
"postal_code": null
}
3.4 Megállapítások az ID=58-ról
- Cím szétdarabolás hiánya:
address_street_name= "Egressy u. 4." — a teljes utca+házszám egyben. Astreet_typeéshouse_numberfeldolgozatlan. - Nincs kapcsolatfelvételi adat:
contact_phone,contact_email,website— mindnulla ServiceProfile-ban. - Nincs adószám:
tax_number= null — bár ez egy Kft. - Crowdsource-olt rekord:
external_integration_config={}(üres) — a source nincs beállítva, bár a kód logikája szerint "crowdsourced" kéne legyen.
4. ÖSSZEFOGLALÓ — Feltárt problémák
| # | Probléma | Hatás | Súlyosság |
|---|---|---|---|
| P1 | ProviderQuickAddIn és ProviderUpdateIn összevont street mezőt használ atomizált address_street_name/_type/_house_number helyett |
A cím soha nem kerül szétdarabolásra. A street_type és house_number mindig null marad. |
🔴 MAGAS |
| P2 | ProviderSearchResult séma nem tartalmazza az atomizált címmezőket |
A frontend nem tudja megjeleníteni a szétdarabolt címet. | 🟠 KÖZEPES |
| P3 | Kapcsolatfelvételi adatok (telefon, email, weboldal) a ServiceProfile-ban vannak, de a gyors felvételkor üresen maradnak | Az Autónyíri Kft.-nek nincs elérhetősége az adatbázisban. | 🟠 KÖZEPES |
| P4 | OrganizationResponse séma nem adja vissza a címmezőket |
A frontend OrganizationUpdate-on keresztül írhat címet, de OrganizationResponse-on keresztül nem olvassa vissza. |
🟡 ALACSONY |
| P5 | A Branch modellben is hiányzik a street_type/house_number az autónyíris rekordnál |
A Branch címe is strukturálatlan | 🟡 ALACSONY |
Javasolt javítási sorrend:
- P1: A
ProviderQuickAddInésProviderUpdateInsémák kiterjesztése atomizált mezőkkel (address_street_name,address_street_type,address_house_number) - P2: A
ProviderSearchResultkibővítése az atomizált címmezőkkel - P3: A frontend űrlapok kiegészítése telefonszám, email és weboldal mezőkkel a gyors felvételnél
- P5: A Branch létrehozásánál a
street_typeéshouse_numbermezők feltöltése