146 lines
7.0 KiB
Markdown
146 lines
7.0 KiB
Markdown
# 📊 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
|