# 🚗 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`](docker-compose.yml:21) kontĂ©nerben az uvicorn [`--reload` nĂ©lkĂŒl](backend/app/scripts/pre_start.sh) 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 ```bash 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`](backend/app/api/v1/endpoints/assets.py), 278. Ă©s 280. sor: ```python 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`](backend/app/api/v1/endpoints/assets.py:62-63) vĂ©gpont mintĂĄja alapjĂĄn: ```python 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Ăł ```json 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 ```python # 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 ```bash # 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 |