Files
service-finder/docs/database_address_audit_2026-06-17.md

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

  1. Cím szétdarabolás hiánya: address_street_name = "Egressy u. 4." — a teljes utca+házszám egyben. A street_type és house_number feldolgozatlan.
  2. Nincs kapcsolatfelvételi adat: contact_phone, contact_email, website — mind null a ServiceProfile-ban.
  3. Nincs adószám: tax_number = null — bár ez egy Kft.
  4. 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:

  1. P1: A ProviderQuickAddIn és ProviderUpdateIn sémák kiterjesztése atomizált mezőkkel (address_street_name, address_street_type, address_house_number)
  2. P2: A ProviderSearchResult kibővítése az atomizált címmezőkkel
  3. P3: A frontend űrlapok kiegészítése telefonszám, email és weboldal mezőkkel a gyors felvételnél
  4. P5: A Branch létrehozásánál a street_type és house_number mezők feltöltése