# 🔧 Fix Plan: Provider Update 500 Error (folder_slug Truncation) ## 🎯 Cél A `PUT /api/v1/providers/{id}` végpont által dobott 500-as hiba kijavítása, amikor a felhasználó egy olyan szolgáltató adatait szerkeszti, amely még **nincs** átmigrálva az `Organization` táblába (csak `ServiceStaging`-ben létezik). ## 🔍 Root Cause Analysis ### Hibajelenség `PUT /api/v1/providers/4859` → `500 Internal Server Error` ``` value too long for type character varying(12) ``` ### Kiváltó ok A provider ID=4859 a `marketplace.service_staging` táblában létezik, de **nincs** még `fleet.organizations` rekordja. Az [`update_provider()`](backend/app/services/provider_service.py:786) függvény a migrációs ágon (ServiceStaging → Organization) a `folder_slug`-ot az alábbi képlettel generálja: ```python folder_slug = f"sp-{staging.id}-{uuid.uuid4().hex[:6]}", ``` - `"sp-"` = 3 karakter - `"4859"` = 4 karakter (provider_id hossza) - `"-"` = 1 karakter - `"4d45d3"` = 6 karakter (uuid hex) - **Összesen: 14 karakter** Az [`Organization`](backend/app/models/marketplace/organization.py:75) modellben a `folder_slug` mező: ```python folder_slug: Mapped[str] = mapped_column(String(12), unique=True, index=True) ``` **Csak 12 karaktert enged!** → PostgreSQL `StringDataRightTruncationError`. **Ugyanez a hiba** a crowd-sourced migrációs ágon is (line 820): ```python folder_slug = f"cr-{crowd.id}-{uuid.uuid4().hex[:6]}", ``` ### Összehasonlítás - **`quick_add_provider`** (line 501-503): `hashlib.md5(...).hexdigest()[:12]` → pontosan 12 karakter → **MŰKÖDIK** - **`update_provider` migration** (line 786, 820): `"sp-{id}-{hex}"` / `"cr-{id}-{hex}"` → **TÚL HOSSZÚ** ## 📋 Javítási Terv ### 1. Model fix: [`backend/app/models/marketplace/organization.py`](backend/app/models/marketplace/organization.py:75) **Változtatás:** `folder_slug` oszlop méretének növelése `String(12)` → `String(24)` Indoklás: - A jelenlegi 12 karakter túl szűk - A `quick_add_provider` pontosan 12 karaktert használ → kompatibilis - A migrációs slug-ok (pl. `sp-{id}-{hex6}`) elférnek - A `unique=True` megszorítás megmarad ### 2. Service fix: [`backend/app/services/provider_service.py`](backend/app/services/provider_service.py:786) **Változtatás:** A migrációs `folder_slug` generálás módosítása konzisztens `hashlib.md5` alapú generálásra. **Staging ág (line 786):** ```python # EZT: folder_slug = f"sp-{staging.id}-{uuid.uuid4().hex[:6]}" # HELYETTE: folder_slug = hashlib.md5(f"sp-{staging.id}-{uuid.uuid4()}".encode()).hexdigest()[:12] ``` **Crowd ág (line 820):** ```python # EZT: folder_slug = f"cr-{crowd.id}-{uuid.uuid4().hex[:6]}" # HELYETTE: folder_slug = hashlib.md5(f"cr-{crowd.id}-{uuid.uuid4()}".encode()).hexdigest()[:12] ``` Indoklás: - Konzisztens a `quick_add_provider` által használt módszerrel - Mindig pontosan 12 karakter → garantáltan elfér a `String(12)` mezőben is - Elég nagy entrópia az egyediséghez (`hashlib.md5(...)` → 32 hex, `[:12]` → 48 bit) ### 3. Adatbázis szinkronizáció Mivel az oszlop mérete változik (`String(12)` → `String(24)`), futtatni kell: ```bash docker exec sf_api python -m app.scripts.sync_engine ``` ## ✅ Elfogadási kritériumok 1. `PUT /api/v1/providers/4859` sikeresen lefut (200 OK) 2. A migrált Organization `folder_slug` pontosan 12 karakter hosszú 3. Meglévő provider-ek (`quick_add`-ból) továbbra is működnek 4. A `folder_slug` `unique` megszorítás nem sérül 5. A logokban nincs `StringDataRightTruncationError`