Files
service-finder/plans/vehicle_edit_404_fix_analysis.md
2026-06-11 11:22:47 +00:00

4.3 KiB

🚗 Járműszerkesztés 404-es hiba - Teljes analízis és javítási terv

📋 Probléma Leírása

A manager dashboardon a járműkártya szerkesztésekor a Mentés gombra kattintva a böngésző PUT /api/v1/assets/vehicles/{id} kérést küld, amely HTTP 404 Not Found hibával tér vissza.


🔍 Root Cause #1 - Stale uvicorn folyamat (MÁR JAVÍTVA)

Tünet

A PUT végpont 404-et adott, pedig a kód a fájlokban létezett.

Ok

A sf_api konténerben az uvicorn --reload nélkül indult PID 1-ként. Amikor a kódot módosították a konténer indulása után, a futó Python folyamat továbbra is a régi, cache-elt modulokat használta (sys.modules).

Bizonyíték

  • TestClient (friss Python import): PUT /vehicles/{id}401 (route létezik)
  • httpx a futó uvicorn-hoz: PUT /vehicles/{id}404 (route nem létezik a cache-ben)

Javítás

docker compose restart sf_api

Elvégezve - a konténer újraindult, a PUT végpont már 401-et ad (route létezik, auth kell).


🔍 Root Cause #2 - Dual Entity ID mismatch (MÉG JAVÍTANDÓ)

Tünet

A konténer újraindítás után a PUT végpont 401 helyett továbbra is 404-et ad hitelesített kérésekre.

Ok

A projekt Dual Entity modellt használ:

  • User tábla (id = 28) - technikai fiók
  • Person tábla (id = 29) - valós személy

A járművek (Asset) owner_person_id mezője a Person ID-t (29) tárolja. A GET végpont helyesen használja a current_user.person_id-t, de a PUT végpont hibásan current_user.id-t használ.

Hiba helye

backend/app/api/v1/endpoints/assets.py, 278. és 280. sor:

Asset.owner_person_id == current_user.id,    # 278: HIBA - .id helyett .person_id kell
Asset.operator_person_id == current_user.id,  # 280: HIBA - .id helyett .person_id kell

Helyes megoldás

A GET /vehicles végpont mintája alapján:

Asset.owner_person_id == current_user.person_id,    # ✅ 
Asset.operator_person_id == current_user.person_id,  # ✅

Tesztelési eredmények

Teszt Eredmény Státusz
current_user.id = 28 Asset.owner_person_id(29) == 28 → false → 404
current_user.person_id = 29 Asset.owner_person_id(29) == 29 → true → 200 (várt)

Backend-Adatbázis Kommunikáció

GET /health  {"status": "ok", "database": "connected"}

Adatbázis kapcsolat rendben működik.


📝 Javítási Terv

1. Backend javítás (PUT végpont)

Fájl: backend/app/api/v1/endpoints/assets.py Módosítandó sorok: 278, 280

# 278. sor HIBA:
Asset.owner_person_id == current_user.id,
# 278. sor JAVÍTVA:
Asset.owner_person_id == current_user.person_id,

# 280. sor HIBA:
Asset.operator_person_id == current_user.id,
# 280. sor JAVÍTVA:
Asset.operator_person_id == current_user.person_id,

2. Frontend ellenőrzés

A frontend kód (VehicleFormModal.vue és vehicle.ts) helyesen hívja a PUT /assets/vehicles/{id} végpontot. Nem szorul javításra.

3. Tesztelés javítás után

# 1. Bejelentkezés
curl -X POST https://app.servicefinder.hu/api/v1/auth/login \
  -d "username=tester_pro@profibot.hu&password=Tesztelek99!"

# 2. Jármű lista lekérése
curl -H "Authorization: Bearer {token}" \
  https://app.servicefinder.hu/api/v1/assets/vehicles

# 3. Jármű szerkesztése (az első jármű ID-jával)
curl -X PUT -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"current_mileage": 50000}' \
  https://app.servicefinder.hu/api/v1/assets/vehicles/{id}

# Várt eredmény: HTTP 200 + frissített jármű adatok

📊 Összefoglaló táblázat

# Hiba Státusz Javítás
1 uvicorn --reload nélkül fut, nem tölti be az új kódot Javítva (restart) docker compose restart sf_api
2 PUT végpontban current_user.id vs current_user.person_id mismatch Javítandó assets.py:278,280 .id.person_id
3 Adatbázis kapcsolat Rendben Health check OK
4 Frontend kód Rendben Nem szorul javításra