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:
Usertábla (id= 28) - technikai fiókPersontá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 |