Files
service-finder/plans/logic_spec_provider_update_fix.md
2026-06-17 22:07:55 +00:00

3.5 KiB

🔧 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/4859500 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() függvény a migrációs ágon (ServiceStaging → Organization) a folder_slug-ot az alábbi képlettel generálja:

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 modellben a folder_slug mező:

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):

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

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

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):

# 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):

# 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:

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