egyedi jármű szerkesztés előtti mentés
This commit is contained in:
145
docs/database_catalog_reconnaissance_2026-06-11.md
Normal file
145
docs/database_catalog_reconnaissance_2026-06-11.md
Normal file
@@ -0,0 +1,145 @@
|
||||
# 📊 Adatbázis Katalógus & Szótár Felderítés
|
||||
**Dátum:** 2026-06-11
|
||||
**Vizsgált rendszer:** Service Finder Backend (PostgreSQL + SQLAlchemy)
|
||||
**Cél:** Karosszéria/Kivitel (Body Type / Trim) funkció előfeltérképezése
|
||||
|
||||
---
|
||||
|
||||
## 1. SQL Adatbázis Felfedezés
|
||||
|
||||
### 1.1 Katalógus-táblák a `vehicle` sémában
|
||||
|
||||
Az `information_schema.tables` lekérdezés alapján az összes releváns tábla a **`vehicle`** sémában található. Nincs külön `catalog` vagy `dictionary` séma.
|
||||
|
||||
| # | Tábla | Típus | Sorok száma | Állapot |
|
||||
|---|-------|-------|-------------|---------|
|
||||
| 1 | `vehicle.vehicle_model_definitions` | BASE TABLE | **345,400** | ✅ Feltöltve (MDM master) |
|
||||
| 2 | `vehicle.vehicle_catalog` | BASE TABLE | **1,596,564** | ✅ Feltöltve (variánsok) |
|
||||
| 3 | `vehicle.vehicle_types` | BASE TABLE | **1** | ❌ Csak 1 rekord (`car`) |
|
||||
| 4 | `vehicle.feature_definitions` | BASE TABLE | **16** | ⚠️ Csak 16 felszereltség |
|
||||
| 5 | `vehicle.model_feature_maps` | BASE TABLE | **0** | ❌ Üres kapcsolótábla |
|
||||
| 6 | `vehicle.catalog_discovery` | BASE TABLE | **172,525** | ✅ Feltöltve (robot várólista) |
|
||||
| 7 | `vehicle.gb_catalog_discovery` | BASE TABLE | **0** | ❌ Üres (UK piac) |
|
||||
|
||||
### 1.2 Body Típusok (Karosszéria) Állapota
|
||||
|
||||
- **152 különböző `body_type` érték** létezik az adatbázisban
|
||||
- **4,050 rekordnál** (~1.17%) hiányzik a body_type
|
||||
- **Probléma:** Az értékek **nem normalizáltak** — ugyanaz a karosszéria többféleképpen van tárolva:
|
||||
- `"SUV"` vs `"SUV, Crossover"` vs `"SUV, Fastback"`
|
||||
- `"SEDAN"` vs `"Sedan"` vs `"sedan"`
|
||||
- `"CONVERTIBLE"` vs `"Cabriolet"` vs `"cabriolet"`
|
||||
- Hollandi nyelvű RDW értékek: `"hatchback"`, `"stationwagen"`, `"cabriolet"` stb.
|
||||
|
||||
### 1.3 Trim Szintek (Kivitelek) Állapota
|
||||
|
||||
- **22,375 különböző `trim_level` érték**
|
||||
- **187,159 rekordnál** (~54%) hiányzik a trim_level
|
||||
- Az értékek többsége kódolt (#BK, #LE, #LF stb.) — nem emészthető emberi szemmel
|
||||
|
||||
### 1.4 Vehicle Típusok
|
||||
|
||||
- Csak **1 rekord**: `code='car'`, `name='Személyautó'`
|
||||
- A `motorcycle`, `truck`, `bus` stb. típusok nincsenek feltöltve
|
||||
|
||||
### 1.5 Vehicle Class
|
||||
|
||||
4 érték található: `car`, `motorcycle`, `other`, `truck`
|
||||
|
||||
---
|
||||
|
||||
## 2. SQLAlchemy Modellek Állapota
|
||||
|
||||
### 2.1 A `vehicle_definitions.py` modelljei
|
||||
|
||||
| Modell | Tábla | Oszlopok | Létezik? |
|
||||
|--------|-------|----------|----------|
|
||||
| `VehicleType` (`vehicle_definitions.py:17`) | `vehicle.vehicle_types` | `id, code, name, icon, units` | ✅ Van |
|
||||
| `FeatureDefinition` (`vehicle_definitions.py:33`) | `vehicle.feature_definitions` | `id, vehicle_type_id, code, name, category` | ✅ Van |
|
||||
| `VehicleModelDefinition` (`vehicle_definitions.py:48`) | `vehicle.vehicle_model_definitions` | `id, make, marketing_name, body_type, trim_level, vehicle_class, fuel_type...` | ✅ Van (MDM) |
|
||||
| `ModelFeatureMap` (`vehicle_definitions.py:145`) | `vehicle.model_feature_maps` | `id, model_definition_id, feature_id, is_standard` | ✅ Van |
|
||||
|
||||
### 2.2 A `asset.py` modelljei
|
||||
|
||||
| Modell | Tábla | Oszlopok | Létezik? |
|
||||
|--------|-------|----------|----------|
|
||||
| `AssetCatalog` (`asset.py:14`) | `vehicle.vehicle_catalog` | `id, make, model, generation, year_from, year_to, fuel_type...` | ✅ Van |
|
||||
| `Asset` (`asset.py:69`) | `vehicle.assets` | `id, vin, brand, model, trim_level, vehicle_class...` | ✅ Van |
|
||||
| `CatalogDiscovery` (`asset.py:402`) | `vehicle.catalog_discovery` | `id, make, model, vehicle_class, market, model_year, status` | ✅ Van |
|
||||
| `GbCatalogDiscovery` (`vehicle.py:195`) | `vehicle.gb_catalog_discovery` | `id, vrm, make, model, status` | ✅ Van |
|
||||
|
||||
### 2.3 Egyéb releváns modellek
|
||||
|
||||
| Fájl | Modell | Tábla |
|
||||
|------|--------|-------|
|
||||
| `external_reference.py:6` | `ExternalReferenceLibrary` | `vehicle.external_reference_library` |
|
||||
| `motorcycle_specs.py:6` | `MotorcycleSpecs` | `vehicle.motorcycle_specs` |
|
||||
| `reference_data.py:6` | `ReferenceLookup` | `vehicle.reference_lookup` |
|
||||
|
||||
### 2.4 ⚠️ Kritikus hiányosság: NINCS BodyType modell!
|
||||
|
||||
**Nincs önálló `BodyType` SQLAlchemy modell!** A `body_type` jelenleg egy szabad szöveges (`String(100)`) mező a `VehicleModelDefinition` osztályban (`vehicle_definitions.py:92`). Ez magyarázza a 152 nem normalizált értéket.
|
||||
|
||||
Ugyanez igaz a `trim_level`-re is (`vehicle_definitions.py:94`): szabad szöveges mező, nincs normalizált szótár mögötte.
|
||||
|
||||
---
|
||||
|
||||
## 3. API Végpontok Állapota
|
||||
|
||||
### 3.1 Meglévő katalógus végpontok (`catalog.py`)
|
||||
|
||||
| Végpont | Módszer | Leírás | Védett? |
|
||||
|---------|---------|--------|---------|
|
||||
| `/makes` (`catalog.py:11`) | GET | Márkák listázása (opcionális vehicle_class szűrő) | ✅ Igen |
|
||||
| `/models` (`catalog.py:21`) | GET | Modellek listázása adott márkához | ✅ Igen |
|
||||
| `/generations` (`catalog.py:38`) | GET | Generációk/évjáratok listázása | ✅ Igen |
|
||||
| `/engines` (`catalog.py:55`) | GET | Motorváltozatok és specifikációk | ✅ Igen |
|
||||
|
||||
**Minden végpont az `AssetService`-t használja** (`asset_service.py:339-385`), ami a `vehicle_model_definitions` táblából lekérdezéseket futtat.
|
||||
|
||||
### 3.2 NEM létező, de szükséges végpontok
|
||||
|
||||
A Karosszéria/Kivitel funkcióhoz az alábbi végpontok **hiányoznak**:
|
||||
|
||||
- ❌ `GET /body-types` — Karosszéria típusok listázása
|
||||
- ❌ `GET /trims` — Kivitelek listázása (szűrhető márka/modell szerint)
|
||||
- ❌ `GET /vehicle-classes` — Jármű osztályok listázása
|
||||
- ❌ `POST /body-types` — Új karosszériatípus hozzáadása (admin)
|
||||
- ❌ `POST /trims` — Új kivitel hozzáadása (admin)
|
||||
|
||||
### 3.3 Meglévő jármű végpontok (`vehicles.py`)
|
||||
|
||||
| Végpont | Módszer | Leírás |
|
||||
|---------|---------|--------|
|
||||
| `/{vehicle_id}/ratings` (`vehicles.py:22`) | POST | Értékelés küldése |
|
||||
| `/{vehicle_id}/ratings` (`vehicles.py:94`) | GET | Értékelések lekérése |
|
||||
|
||||
---
|
||||
|
||||
## 4. Összefoglaló és Javaslatok
|
||||
|
||||
### 4.1 Adatbázis
|
||||
|
||||
✅ **345,400 járműdefiníció** és **1.59M katalógus variáns** — a botok jól dolgoztak
|
||||
⚠️ **`vehicle_types`** tábla majdnem üres (csak 1 rekord)
|
||||
⚠️ **`body_type`** és **`trim_level`** nem normalizált, szabad szöveges mezők
|
||||
⚠️ 152 féle body_type, nagy része duplikátum (kisbetű/nagybetű, holland/angol keverék)
|
||||
|
||||
### 4.2 Modellek
|
||||
|
||||
✅ Létezik `VehicleModelDefinition`, `VehicleType`, `FeatureDefinition`
|
||||
❌ **NINCS önálló `BodyType` modell** — ez a legnagyobb hiányosság
|
||||
❌ NINCS önálló `TrimLevel` modell sem
|
||||
|
||||
### 4.3 API
|
||||
|
||||
✅ Négy katalógus végpont működik (`/makes`, `/models`, `/generations`, `/engines`)
|
||||
❌ **NINCS** `/body-types`, `/trims`, `/vehicle-classes` végpont
|
||||
|
||||
### 4.4 Ajánlott következő lépések
|
||||
|
||||
1. **`BodyType` modell létrehozása** — normalizált karosszériatípus szótár (id, code, name, icon, vehicle_class_id)
|
||||
2. **`TrimLevel` modell létrehozása** — normalizált kivitel szótár (id, code, name)
|
||||
3. **Adatmigráció:** A 152 meglévő body_type érték normalizálása és deduplikálása
|
||||
4. **API végpontok:** `GET /body-types`, `GET /trims`, `GET /vehicle-classes`
|
||||
5. **`vehicle_types` feltöltése** — a hiányzó járműtípusok (motorcycle, truck, bus stb.) hozzáadása
|
||||
Reference in New Issue
Block a user