diff --git a/.roo/history.md b/.roo/history.md index 20564a6..fbc6331 100644 --- a/.roo/history.md +++ b/.roo/history.md @@ -1,753 +1,542 @@ # Service Finder Fejlesztési Történet -## Fix KYC Validation Logic in Frontend +## 2026-06-04 (B) - Magic Link Implementáció (Auto-Login Email Verification) -**Dátum:** 2026-06-03 -**Státusz:** Kész ✅ -**Gitea #186** -**Kapcsolódó fájlok:** -- `frontend/src/stores/auth.ts` -- `frontend/src/components/LoginModal.vue` +### 🎯 Cél +Az email verifikációs folyamat átalakítása "Magic Link" élménnyé. A felhasználónak NEM kell manuálisan bejelentkeznie az aktiválás után - a verifikációs link automatikusan belépteti! -### Változtatások -1. **UserProfile interfész (`frontend/src/stores/auth.ts`):** `person_id: number | null` mező hozzáadva, a régi KYC placeholder mezők (`address_city`, `phone_number`) eltávolítva -2. **isKycComplete getter:** Logika átállítva `address_city` ellenőrzésről `!!user.value?.person_id`-re — a KYC akkor kész, ha a userhez tartozik Person rekord -3. **LoginModal.vue handleLogin:** Ellenőrizve — már helyesen hívja `authStore.login()` → `authStore.isKycComplete` → routing → modal close +### ✅ Implementáció -### Gyökér ok -A backend `/auth/me` végpontja mindig is helyesen küldte a `person_id`-t a `UserResponse`-ban. A frontend store azonban az `address_city` mezőt vizsgálta, ami csak a KYC wizard UI-jában létezik, nem a backend válaszban. Ezért minden felhasználónál false volt a KYC státusz, függetlenül attól, hogy kitöltötte-e. +#### 1. Backend: JWT Token Generálás Verifikációnál +**Fájl**: [`backend/app/api/v1/endpoints/auth.py`](backend/app/api/v1/endpoints/auth.py:93) +- A `/verify-email` végpont most `response_model=Token`-t ad vissza +- Sikeres verifikáció után a backend meghívja az [`AuthService.verify_email()`](backend/app/services/auth_service.py:316) metódust +- Az `AuthService.verify_email()` mostantól User objektumot ad vissza (nem csak boolean-t) +- A végpont generál JWT access és refresh tokent ugyanúgy, mint a `/login` endpoint +- A tokenek HTTP-only cookie-ban és JSON response-ban is megjelennek + +**Változtatások**: +```python +# AuthService.verify_email() módosítás +- return True # RÉGI ++ return user # ÚJ: visszaadja az aktivált User objektumot + +# auth.py verify_email végpont ++ user = await AuthService.verify_email(db, request.token) ++ if not user: ++ raise HTTPException(...) ++ ++ # JWT token generálás (ugyanaz a logika, mint login-nál) ++ token_data = {"sub": str(user.id), "role": ..., "rank": ..., ...} ++ access, refresh = create_tokens(data=token_data, remember_me=False) ++ return {"access_token": access, "refresh_token": refresh, ...} +``` + +#### 2. Frontend Store: Automatikus Bejelentkezés +**Fájl**: [`frontend/src/stores/auth.ts`](frontend/src/stores/auth.ts:302) +- A `verifyAccount()` action most feldolgozza a backend által küldött JWT tokent +- Ha `data.access_token` létezik, akkor: + - Elmenti a tokent a `localStorage`-ba + - Beállítja a `token.value` state-et + - Meghívja a `fetchUser()` metódust (betölti a user profilt) + - Törli a `pending_verification_email` értéket + +**Változtatások**: +```typescript +// Új logika a verifyAccount()-ban +if (data.access_token) { + localStorage.setItem('access_token', data.access_token) + if (data.refresh_token) { + localStorage.setItem('refresh_token', data.refresh_token) + } + token.value = data.access_token + await fetchUser() + localStorage.removeItem('pending_verification_email') +} +``` + +#### 3. Frontend View: Automatikus Átirányítás KYC-re +**Fájl**: [`frontend/src/views/VerifyEmailView.vue`](frontend/src/views/VerifyEmailView.vue:28) +- **Új UI**: "Sikeres aktiválás és bejelentkezés!" üzenet +- **3 másodperces countdown**: "Átirányítás 3 másodperc múlva..." +- **Automatikus redirect**: `setInterval()` számolja vissza, majd átirányít `/complete-kyc`-re +- **CTA gomb**: "Tovább a Profilhoz" (nem több "Tovább a Belépéshez") +- **Cleanup**: `onUnmounted()` törli az interval-t + +**Változtatások**: +```vue + +
{{ autoRedirectCountdown > 0 ? `Átirányítás ${autoRedirectCountdown} másodperc múlva...` : 'Átirányítás...' }}
+ + + +``` + +### 🔄 Új Flow (Magic Link) +**Régi folyamat**: +1. Regisztráció → Email verify link +2. Verify oldalon aktiválás → "Tovább a Belépéshez" +3. Felhasználó manuálisan bejelentkezik +4. Login után átirányítás KYC-re + +**Új folyamat (Magic Link)**: +1. Regisztráció → Email verify link +2. Verify oldalon aktiválás → **Backend JWT tokent ad** +3. **Frontend automatikusan bejelentkezteti** a felhasználót +4. **3 másodperc múlva automatikus átirányítás** `/complete-kyc`-re +5. Felhasználó már be van jelentkezve → KYC mentés sikeres! + +### 📊 Érintett Fájlok +- [`backend/app/api/v1/endpoints/auth.py`](backend/app/api/v1/endpoints/auth.py:93) - verify-email végpont JWT response +- [`backend/app/services/auth_service.py`](backend/app/services/auth_service.py:316) - verify_email User visszadás +- [`frontend/src/stores/auth.ts`](frontend/src/stores/auth.ts:302) - verifyAccount JWT feldolgozás +- [`frontend/src/views/VerifyEmailView.vue`](frontend/src/views/VerifyEmailView.vue:28) - Auto-login UI + countdown + +### 🧪 Tesztelési Eredmény +1. ✅ Backend Python szintaxis helyes (`py_compile` sikeres) +2. ✅ Auth service módosítás sikeres (User objektum visszaadás) +3. ✅ Backend újraindítás sikeres, nincsenek hibák a logokban +4. ✅ Frontend TypeScript típusok konzisztensek +5. ✅ Auto-redirect logika implementálva (3 mp countdown) + +### 🔗 Gitea +- **Feature**: Magic Link Auto-Login on Email Verification +- **Típus**: UX Enhancement +- **Státusz**: Completed --- -## KYC Wizard EU-Ready Smart Address - -**Dátum:** 2026-06-03 -**Státusz:** Kész ✅ -**Gitea #185** -**Kapcsolódó fájlok:** -- `frontend/src/views/CompleteKycView.vue` -- `backend/app/schemas/auth.py` -- `backend/app/services/auth_service.py` -- `docs/kyc_eu_smart_address_implementation.md` - -### Változtatások -1. **Frontend - CompleteKycView.vue Step 2:** Országválasztó (HU/AT/SK/DE/RO) hozzáadva a `region_code` mezőhöz, debounced (600ms) ZIP→City auto-fill a zippopotam.us API-n keresztül, loading spinner a város mező mellett -2. **Backend Schema - UserKYCComplete:** `region_code` mező hozzáadva (Optional[str], default "HU") -3. **Backend Service - AuthService.complete_kyc:** `user.region_code` frissítése a KYC payload-ból - - -## Vehicle Registration System Comprehensive Fixes - -**Dátum:** 2026-03-31 -**Státusz:** Kész ✅ -**Kapcsolódó fájlok:** -- `backend/tests/test_credentials.json` -- `backend/scripts/test_vehicle_registration.py` -- `frontend/src/components/actions/SmartVehicleRegistration.vue` - -## API Integration Bug Fixes (2026-03-31) - -**Dátum:** 2026-03-31 -**Státusz:** Kész ✅ -**Fejlesztő:** Fast Coder -**Cél:** Három kritikus API integrációs hiba javítása: -1. "Makes" (Brands) szűrés vehicle_class szerint -2. 404 Submission Error (endpoint egyeztetés) -3. Serialization Bug az AssetResponse sémában - -### 1. "Makes" (Brands) szűrés javítása -**Probléma:** A frontend "Motorcycle" kiválasztása után is minden márka (beleértve az autókat) megjelenik. -**Megoldás:** -- Módosítottuk a `backend/app/services/asset_service.py` `get_makes` függvényt, hogy fogadjon egy opcionális `vehicle_class` paramétert és szűrjön a `VehicleModelDefinition.vehicle_class` mező alapján. -- Frissítettük a `backend/app/api/v1/endpoints/catalog.py` `list_makes` végpontot, hogy átadja a query paramétert. -- Hozzáadtuk az `Optional` importot. - -**Változtatott fájlok:** -- `backend/app/services/asset_service.py` -- `backend/app/api/v1/endpoints/catalog.py` - -### 2. 404 Submission Error javítása -**Probléma:** A frontend 404 hibát kapott a jármű regisztráció véglegesítésekor. -**Megoldás:** -- Ellenőriztük a backend végpontot (`/api/v1/assets/vehicles`) és a frontend API hívást (`/api/v1/assets/vehicles`). Az útvonalak megegyeznek, a hiba valószínűleg a token érvényességéből vagy a duplikált adatokból adódott. -- A teszt futtatás során a backend 400-as hibát adott vissza („Ez a jármű már a te garázsodban van.”), ami azt jelzi, hogy a végpont elérhető és működik. - -**Következtetés:** A 404 hiba nem endpoint probléma, hanem a teszt adatok duplikációja miatt jelentkezett. A frontend API hívás helyes. - -### 3. Serialization Bug javítása -**Probléma:** Serializációs hiba maradt a `catalog` és `profile_completion_percentage` mezőkkel. -**Megoldás:** -- Megvizsgáltuk az `AssetResponse` Pydantic sémát (`backend/app/schemas/asset.py`) és az `Asset` SQLAlchemy modellt (`backend/app/models/vehicle/asset.py`). -- A séma kompatibilis a modellel, mivel a `profile_completion_percentage` és `is_verified` property-k számítottak, de a Pydantic `from_attributes=True` konfigurációval helyesen serializálódnak. -- Nincs szükség módosításra, a séma helyes. - -**Változtatott fájlok:** Nincs (a séma már helyes volt). - -### 4. Frontend API hívások frissítése -**Probléma:** A frontend nem adta át a `vehicle_class` paramétert a `getMakes` hívásnál. -**Megoldás:** -- Módosítani kell a `frontend/src/services/api.js` `catalogApi.getMakes` függvényt, hogy fogadjon egy `vehicleClass` paramétert és átadja query paraméterként. -- Módosítani kell a `frontend/src/components/actions/SmartVehicleRegistration.vue` `fetchMakes` függvényt, hogy átadja a kiválasztott `vehicleClass` értéket. - -**Megjegyzés:** Ez a változtatás még nem került implementálásra, mert a feladat specifikációja csak a backend módosításokat írta elő. A frontend frissítés egy külön kártya tárgyát képezi. - -### Tesztelés -- Futtattuk a `test_vehicle_registration.py` szkriptet, amely sikeresen hitelesített, de 400-as hibát adott vissza a duplikált VIN miatt. -- A végpont elérhetősége és a serializáció működik. -- A "Makes" szűrés backend változtatásai helyesen implementálódtak. - -**Következő lépések:** -- Frontend frissítése a `vehicle_class` paraméter átadására. -- Duplikáció elkerülése a teszt adatokban (random VIN generálás). -- `backend/app/services/asset_service.py` -- `backend/app/api/v1/endpoints/assets.py` -- `backend/app/schemas/asset.py` - -### Technikai Összefoglaló - -A járműregisztrációs rendszer átfogó javítása, amely a következő területeket érintette: - -#### 1. Hitelesített E2E Tesztelési Protokoll -- Létrehozva `test_credentials.json` teszt felhasználói hitelesítő adatokkal -- Implementálva `test_vehicle_registration.py` Python szkript teljes E2E teszteléshez -- Javítva a hitelesítés: OAuth2PasswordRequestForm form adatok használata JSON helyett - -#### 2. Katalógus Adat Audit és Backend Javítás -- Ellenőrizve az adatbázis szerkezet a `vehicle_class` oszlophoz -- Megállapítva, hogy a `vehicle_model_definitions` tábla rendelkezik `vehicle_class` oszloppal -- Felfedezve, hogy a Honda motorok hiányoznak az adatbázisból (adatprobléma, nem kódhiba) -- Megerősítve, hogy a backend szűrési logika helyes az `asset_service.py`-ban - -#### 3. UX Átalakítás - Auto-Advance & Auto-Skip -- Módosítva `SmartVehicleRegistration.vue` komponens `selectVehicleClass()` funkcióval -- Hozzáadva auto-advance funkcionalitás: járműosztály kattintás automatikusan továbbléptet -- Hozzáadva auto-skip funkcionalitás watcherekkel a `generations` és `engines` tömbökön -- Ha az API üres tömböket ad vissza, automatikusan átugrik a következő lépésre - -#### 4. Végső Áttekintő Lépés -- Hozzáadva 4. lépés (Összegzés) a varázslóhoz átfogó adatmegjelenítéssel -- Frissítve `totalSteps` 4-ről 5-re -- Létrehozva összegzés sablon szerkesztési gombokkal minden szekcióhoz -- Hozzáadva szervezeti összegzés célgarázs megerősítéssel - -#### 5. Kritikus Bug Javítás: Asset Assignment Organization NULL Constraint -- Javítva a NOT NULL korlátozási hiba a `asset_assignments.organization_id` oszlopon -- Módosítva `asset_service.py` csak akkor hozzon létre `AssetAssignment`-et, ha `organization_id` nem None -- Alkalmazva a javítás mind a `create_or_claim_vehicle`, mind az `execute_final_transfer` metódusokban -- Javítva a paraméterátadási hiba az endpoint és a service között -- Javítva a séma mezőnév eltérések (`owner_organization_id` vs `organization_id`) - -#### 6. API Endpoint Javítások -- Ellenőrizve a frontend `garageStore.js` és backend `assets.py` endpointok -- Megerősítve, hogy mindkettő `/api/v1/assets/vehicles` útvonalat használja -- Javítva a hitelesítési jelszó probléma a tester_pro felhasználónál - -### Eredmények: -- **Jármű létrehozás most már működik** - A fő blokkoló probléma (AssetAssignment NULL constraint) javítva -- **Hitelesítés helyesen működik** - Javítva a form adatok vs JSON probléma -- **UX fejlesztések implementálva** - Auto-advance és auto-skip funkcionalitás hozzáadva -- **Backend szűrés helyes** - Honda motor adatok hiányoznak az adatbázisból, nem kódhiba - -## RED-TO-GREEN STABILIZATION: sf_tester Lab & Public Frontend Test Fixes - -**Dátum:** 2026-03-25 -**Státusz:** Kész ✅ -**Kapcsolódó fájlok:** `docker-compose.yml`, `frontend/vite.config.js`, `frontend/src/views/Login.vue`, `frontend/src/stores/authStore.js`, `frontend/src/views/AddExpense.vue`, `frontend/tests/e2e/frontend-flow.spec.js` - -### Technikai Összefoglaló - -A "RED-TO-GREEN STABILIZATION" művelet sikeresen végrehajtva. A sf_tester Playwright lab teljesen stabil, mind a 6 E2E teszt (Chromium, Firefox, WebKit × 2 forgatókönyv) zöld státuszban fut. - -#### Főbb Javítások: - -1. **Verziószinkronizáció**: A `docker-compose.yml`-ben a sf_tester szolgáltatás Playwright verziója frissítve v1.58.2-jammy-re (eredeti: v1.42.0-jammy), hogy megfeleljen a frontend/package.json @playwright/test "^1.50.0" verziójának. - -2. **Frontend Kapcsolódási Hiba**: A Vite dev server `allowedHosts` konfigurációjába hozzáadva a 'sf_public_frontend' hostnév, hogy a teszt konténerből érkező kérések ne kapjanak 403 Forbidden hibát. - -3. **WebKit Bejelentkezési Hiba**: Az authStore.js fallback logikájának szintaktikai hibái javítva. A catch blokk most már helyesen kezeli az API hibákat és minden tesztkörnyezetben aktiválja a mock bejelentkezést. - -4. **Teszt Kompatibilitás**: - - Login.vue magyar szövegek angolra fordítva a Playwright selectorok kompatibilitása érdekében - - AddExpense.vue fejléc angolra frissítve ("Add Expense") - - Teszt selectorok finomhangolva (.first() és .filter() használata többszörös egyezések kezelésére) - -5. **API URL Konfiguráció**: A frontend API hívások hardkódolt localhost:8000 URL-jei helyettesítve környezeti változóval (VITE_API_BASE_URL), amely a docker-compose.yml-ben beállított http://sf_api:8000 értékre mutat. - -6. **"Add Expense" Gomb/Link Hiba**: A Dashboard.vue "Add Expense" router-link (anchor) elemére a teszt most már link role-t keres (nem button-t), és sikeresen navigál az AddExpense oldalra. - -#### Eredmény: -- **6/6 teszt PASS** (100% sikerarány) -- **WebKit teljesen funkcionális** (korábban login redirect hiba) -- **Cross-browser kompatibilitás** biztosítva (Chromium, Firefox, WebKit) -- **Stabil tesztkörnyezet** a jövőbeli CI/CD folyamatokhoz - -## 17-es Kártya: Billing Engine Service (Epic 3 - Pénzügyi Motor) - -**Dátum:** 2026-03-09 -**Státusz:** Kész ✅ -**Kapcsolódó fájlok:** `backend/app/services/billing_engine.py`, `backend/app/api/v1/endpoints/billing.py` - -### Technikai Összefoglaló - -A Billing Engine Service-t az Epic 3 (Pénzügyi Motor) keretében implementáltuk, amely a 18-as kártya atomi tranzakciós logikájára épül. Az implementáció egyszerűsített interfészeket biztosít a gyakori számlázási műveletekhez, miközben megtartja az alapvető négyszeres wallet rendszert és a dupla könyvelést. - -#### Főbb Implementációk: - -1. **Új funkciók a `billing_engine.py`-ban** (689-880 sorok): - - `charge_user()`: Atomiszámlázási tranzakciók felhasználóbarát wrapper-e - - `upgrade_subscription()`: Előfizetési szintek frissítése árképzéssel és wallet levonással - - `refund_transaction()`: Teljes és részleges visszatérítések kezelése - - `get_user_balance()`: Felhasználó összesített egyenlegének lekérdezése - -2. **Billing API végpontok** (`billing.py` 1-120 sorok): - - `POST /billing/charge`: Felhasználó terhelése (szolgáltatás, előfizetés, stb.) - - `POST /billing/upgrade`: Előfizetési szint frissítése - - `POST /billing/refund`: Tranzakció visszatérítése - - `GET /billing/balance/{user_id}`: Egyenleg lekérdezése - -3. **Integráció a meglévő rendszerrel**: - - A `billing_engine.py` közvetlenül használja a `FinancialLedger` modellt a tranzakciók naplózásához - - Automatikus wallet kiválasztás (prioritás: Credit → Social → Reputation → Trust) - - Dupla könyvelés minden tranzakciónál (forrás és cél wallet egyidejű frissítése) - -4. **Hibakezelés és validáció**: - - Elegendő egyenleg ellenőrzése minden tranzakció előtt - - Tranzakció státusz követés (`pending`, `completed`, `failed`, `refunded`) - - Idempotens műveletek (ugyanazon tranzakció azonosítóval nem futhat kétszer) - -#### Tesztelés: - -- Manuális tesztelés Postman-nel mind a 4 végponton -- Sikeres terhelés, előfizetés-frissítés, visszatérítés és egyenleg-lekérdezés -- Wallet prioritás tesztelése (Credit wallet üres → Social wallet használata) -- Hiányzó egyenleg esetén helyes hibaüzenet (HTTP 402 Payment Required) - -#### Eredmény: -- **✅ Teljes körű számlázási motor** a Pénzügyi Epic számára -- **✅ Egyszerű API interfész** a frontend és robotok számára -- **✅ Dupla könyvelés és atomi tranzakciók** biztosítva -- **✅ Integráció a meglévő wallet rendszerrel** - -**"A Billing Engine Service lehetővé teszi a felhasználók terhelését, előfizetés-frissítését és visszatérítését, miközben garantálja a pénzügyi tranzakciók integritását és nyomon követhetőségét."** - -## 18-as Kártya: Atomic Financial Transactions (Epic 3 - Pénzügyi Motor) - -**Dátum:** 2026-03-09 -**Státusz:** Kész ✅ -**Kapcsolódó fájlok:** `backend/app/models/finance.py`, `backend/app/services/financial_service.py` - -### Technikai Összefoglaló - -Az Atomic Financial Transactions kártya célja a pénzügyi tranzakciók atomi végrehajtásának biztosítása a négyszeres wallet rendszerben (Credit, Social, Reputation, Trust). A megvalósítás SQLAlchemy tranzakciókezelést és dupla könyvelést alkalmaz, hogy garantálja az adatkonzisztenciát minden pénzmozgásnál. - -#### Főbb Implementációk: - -1. **FinancialLedger modell bővítése** (`finance.py` 1-150 sorok): - - Új mezők: `source_wallet_type`, `target_wallet_type`, `transaction_status`, `external_reference` - - Indexek a gyors lekérdezésekhez (`user_id`, `created_at`, `transaction_status`) - - Check constraint a pozitív `amount` értékekre - -2. **FinancialService osztály** (`financial_service.py` 1-250 sorok): - - `transfer_between_wallets()`: Atom pénzmozgás két wallet között ugyanazon felhasználón belül - - `execute_payment()`: Külső fizetés kezelése (pl. szolgáltatás vásárlása) - - `revert_transaction()`: Tranzakció visszavonása (rollback) hiba esetén - - `get_wallet_balance()`: Valós idejű egyenleg számítás ledger alapján - -3. **Atomi tranzakciókezelés**: - - SQLAlchemy tranzakciók `async with db.begin()` blokkokban - - Minden pénzmozgás két ledger bejegyzést hoz létre (forrás és cél) - - Tranzakció státusz követés (`pending` → `completed` vagy `failed`) - - Idempotencia biztosítása `external_reference` egyediségével - -4. **Wallet prioritási rendszer**: - - Automatikus forrás wallet kiválasztás a következő prioritás szerint: Credit → Social → Reputation → Trust - - Hiányzó egyenleg esetén kivétel dobása a tranzakció megszakításával - -#### Tesztelés: - -- Unit tesztek a `financial_service.py` minden funkciójára -- Integrációs tesztek valós adatbázissal a tranzakció atomi tulajdonságainak ellenőrzésére -- Párhuzamos tranzakciók tesztelése versenyhelyzetek szimulálásával -- Helyes hibaüzenetek hiányzó egyenleg, érvénytelen wallet típus és duplikált tranzakció esetén - -#### Eredmény: -- **✅ Atomi pénzügyi tranzakciók** garantált integritással -- **✅ Dupla könyvelés** minden pénzmozgásnál -- **✅ Négyszeres wallet rendszer** teljes funkcionalitással -- **✅ Idempotens műveletek** duplikált kérések ellen - -**"A Financial Service garantálja, hogy minden pénzügyi tranzakció atomi legyen - vagy teljes egészében végrehajtódik, vagy egyáltalán nem, ezzel megelőzve az inkonzisztens állapotokat a wallet rendszerben."** - -## 19-es Kártya: SendGrid Email Provider Integration & Registration Fix - -**Dátum:** 2026-03-25 -**Státusz:** Kész ✅ -**Kapcsolódó fájlok:** `backend/.env`, `backend/app/services/auth_service.py`, `backend/app/services/email_manager.py`, `frontend/src/views/Register.vue` - -### Technikai Összefoglaló - -A 19-es kártya célja a SendGrid email szolgáltató integrációja és a regisztrációs folyamat javítása, hogy a felhasználók aktivációs emaileket kapjanak, és a rendszer ne hozzon létre felhasználót, ha az email kézbesítés sikertelen. - -#### Főbb Implementációk: - -1. **SendGrid API kulcs frissítése**: Az új `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` kulcs beállítva a root `.env` fájlban, és az `EMAIL_PROVIDER=sendgrid` értékre állítva. - -2. **Szinkron email küldés a regisztrációban**: A `auth_service.py` `register_lite` metódusában az email küldés eredményének ellenőrzése. Ha az `email_manager.send_email` hibát jelez, a tranzakció rollbackelődik és HTTP 500 hibával tér vissza a "Email delivery failed. Please contact support." üzenettel. - -3. **Frontend hibakezelés**: A `Register.vue` komponens frissítve, hogy a hibaüzenetek piros színnel jelenjenek meg, és a sikeres üzenetek zölddel. - -4. **Konténer frissítés**: Az `sf_api` konténer újraindítva az új környezeti változók betöltéséhez. - -### Tesztelés - -- A SendGrid API kulcs tesztelve curl-lel, amely "Maximum credits exceeded" hibát adott (a kulcs érvényes, de a kreditek elfogytak). -- A regisztrációs endpoint tesztelve egyedi email címmel, a rendszer helyesen adott 500 hibát az email kézbesítési hiba miatt. -- A frontend helyesen jeleníti meg a hibaüzenetet piros színnel. - -#### Eredmény: -- **✅ Email kézbesítési hiba esetén a felhasználó nem jön létre** -- **✅ Világos hibaüzenet a frontenden és a backendről** -- **✅ SendGrid konfiguráció frissítve és működik** -- **✅ "Fake 201" probléma megszüntetve** - -**"A regisztrációs folyamat most már szinkronban küldi az aktivációs emaileket, és ha a kézbesítés sikertelen, a felhasználó nem jön létre, helyette egyértelmű hibaüzenetet kap."** - -## Vehicle Lifecycle Features (#145, #146) - Vehicle Detail Page & Maintenance Log MVP - -**Dátum:** 2026-03-27 -**Státusz:** Kész ✅ -**Kapcsolódó fájlok:** `backend/app/api/v1/endpoints/assets.py`, `backend/app/schemas/asset.py`, `backend/app/services/asset_service.py`, `backend/app/services/gamification_service.py` - -### Technikai Összefoglaló - -A Vehicle Lifecycle funkciók implementálása a katalógus integráció után, amely lehetővé teszi a felhasználók számára, hogy részletesen megtekinthessék járműveik technikai profilját és karbantartási naplókat vezethessenek. - -#### Főbb Implementációk: - -1. **Vehicle Detail Page (#145)**: - - Új GET endpoint `/assets/{asset_id}` a jármű részletes adatainak lekérdezéséhez - - Az endpoint visszaadja az Asset adatait a kapcsolódó katalógus (AssetCatalog) és mesterdefiníció (VehicleModelDefinition) információkkal - - Technikai specifikációk: teljesítmény (kW/LE), motor kód, évjárat, üzemanyag típus, stb. - - Jogosultság ellenőrzés: csak a jármű tulajdonosa vagy a szervezet tagjai érhetik el - -2. **Maintenance Log MVP (#146)**: - - Új GET endpoint `/assets/{asset_id}/maintenance` a karbantartási rekordok listázásához - - Új POST endpoint `/assets/{asset_id}/maintenance` új karbantartási rekord hozzáadásához - - A karbantartási rekordok tárolása az `asset_costs` táblában `cost_category="maintenance"` értékkel - - A `data` JSON mezőben tárolt extra információk: odometer állás, részletes leírás - - Egyszerű űrlap adatok: dátum, kilométeróra állás, leírás, költség - -3. **Gamification Hook - First Vehicle Badge**: - - Amikor egy felhasználó hozzáadja első járművét, automatikusan megkapja a "First Car" badge-et - - A logika az `AssetService.create_or_claim_vehicle` metódusba van integrálva - - Ellenőrzi, hogy a felhasználónak van-e már más járműve, ha nem, akkor awardolja a badge-et - - A badge adatbázisban való tárolása a `UserBadge` táblán keresztül - -#### Adatbázis Érintettség: -- **Asset tábla**: Meglévő struktúra, nincs módosítás -- **AssetCost tábla**: Új karbantartási rekordok `cost_category="maintenance"` értékkel - -## Mobile "Failed to fetch" Debugging and Frontend Fixes - -**Dátum:** 2026-03-28 -**Státusz:** Kész ✅ -**Kapcsolódó fájlok:** `.env`, `docker-compose.yml`, `frontend/src/stores/garageStore.js`, `frontend/src/views/AddVehicle.vue`, `frontend/src/components/actions/AddVehicleModal.vue`, `frontend/src/services/api.js` - -### Technikai Összefoglaló - -A felhasználó mobil eszközről (app.servicefinder.hu domain) "Failed to fetch" hibát kapott jármű mentésekor. A probléma három fő okból adódott: - -1. **Frontend API base URL konfiguráció**: A `VITE_API_BASE_URL` környezeti változó helytelenül volt beállítva (`https://dev.servicefinder.hu/api/v1` helyett `/api/v1`), ami mobil eszközökön cross-domain kéréseket eredményezett. -2. **Biztonsági kockázat**: Több frontend fájlban "|| 1" fallback volt a szervezeti azonosítókhoz, ami multi-tenant rendszerben adatszivárgást okozhatott. -3. **Backend validációs hiba**: A backend logokban `ResponseValidationError` volt a vin mező null értékéhez, ami szintén hozzájárulhatott a hibákhoz. - -#### Főbb Javítások: - -1. **`.env` fájl javítása**: - - `VITE_API_BASE_URL=https://dev.servicefinder.hu/api/v1` → `VITE_API_BASE_URL=/api/v1` - - Ez biztosítja, hogy a frontend relatív URL-eket használjon, amelyek a proxy-n keresztül a megfelelő backend szolgáltatáshoz irányulnak. - -2. **Frontend container rebuild**: - - `docker compose up -d --build sf_public_frontend` parancs futtatva - - A konténer most már a korrigált környezeti változót használja - -3. **"|| 1" fallback-ok eltávolítása** (multi-tenant adatszivárgás megelőzése): - - `frontend/src/stores/garageStore.js`: `organization_id: vehicle.organizationId || authStore.activeOrgId || 1` → `organization_id: vehicle.organizationId || authStore.activeOrgId` - - `frontend/src/views/AddVehicle.vue`: `organization_id: authStore.activeOrgId || 1` → `organization_id: authStore.activeOrgId` - - `frontend/src/components/actions/AddVehicleModal.vue`: `organizationId: authStore.activeOrgId || 1` → `organizationId: authStore.activeOrgId` - -4. **Backend állapot ellenőrzése**: - - A backend (`sf_api`) fut és válaszol - - A logokban `ResponseValidationError` volt, de ez nem blokkoló hiba (a vin mező opcionális lehet) - -#### Eredmény: -- **Mobil eszközök most már sikeresen tudnak járművet menteni** a korrigált API URL konfiguráció miatt -- **Adatbiztonság javítva**: A "|| 1" fallback-ok eltávolítása megakadályozza, hogy a felhasználók véletlenül az 1-es szervezetbe kerüljenek -- **Frontend konténer frissítve**: A `VITE_API_BASE_URL` változó most már helyesen `/api/v1` értéket tartalmaz -- **Rendszer stabil**: Minden konténer fut, a frontend Vite dev server sikeresen indult - -#### Technikai részletek: -- A probléma oka: A frontend konténerben a `VITE_API_BASE_URL` változó abszolút URL-t tartalmazott, ami mobil eszközökön cross-origin kéréseket eredményezett -- A megoldás: Relatív URL (`/api/v1`) használata, amely a proxy (nginx) által a megfelelő backend szolgáltatáshoz irányul -- A "|| 1" fallback-ok eltávolítása kritikus volt a multi-tenant architektúra integritásának megőrzéséhez - -## Digital Twin & Asset Refactor: "Thick Digital Twin" Architecture - -**Dátum:** 2026-03-30 -**Státusz:** Kész ✅ -**Kapcsolódó fájlok:** `backend/app/models/vehicle/asset.py`, `docs/v02/99_Adattarolás.md` - -### Technikai Összefoglaló - -A "thin" Asset modellből "Thick Digital Twin" architektúrára való átállás sikeresen implementálva. A refaktor célja, hogy minden technikai, fizikai és felszerelési részletet tároljunk minden egyedi járműhöz, miközben megőrizzük a változások történetét. - -#### Főbb Implementációk: - -1. **Asset modell bővítése** (`backend/app/models/vehicle/asset.py`): - - **Azonosítás**: id, vin, license_plate, catalog_id (meglévő) - - **Osztályozás**: vehicle_class (VehicleClassEnum), brand, model, trim_level - - **Műszaki specifikációk**: fuel_type, engine_capacity, power_kw, torque_nm, cylinder_layout, transmission_type, drive_type, euro_classification - - **Fizikai méretek**: curb_weight, max_weight, cargo_volume_x, cargo_volume_y, door_count, seat_count - - **Felszereltség**: roof_type (RoofTypeEnum), audio_system_type, individual_equipment (JSONB) - - **Állapot**: current_mileage, condition_score, status (meglévő) - -2. **Digitális Szervizkönyv (AssetEvent)**: - - Bővítve a Digital Service Book logikához - - Új mezők: user_id, organization_id (szolgáltató), odometer_reading, description, cost_id (opcionális AssetCost kapcsolat) - - Eseménytípusok: SERVICE, REPAIR, ACCIDENT, INSPECTION, TIRE_CHANGE, MAINTENANCE, UPGRADE, RECALL - -3. **Adatbázis migráció**: - - Sync engine sikeresen futtatva: `docker exec sf_api python -m app.scripts.sync_engine` - - 28 új oszlop hozzáadva a `vehicle.assets` táblához - - 8 új oszlop hozzáadva a `vehicle.asset_events` táblához - - Visszafelé kompatibilitás biztosítva: minden új mező Optional - -4. **Enum definíciók**: - - `VehicleClassEnum`: 10 járműosztály (személy, motorkerékpár, kishaszon, haszon, munkagép, stb.) - - `RoofTypeEnum`: 12 tetőtípus (lemeztető, vászontető, nyitható keménytető, panorámatető, stb.) - - `AssetEventTypeEnum`: 8 eseménytípus a Digitális Szervizkönyvhöz - -#### Eredmény: -- **Teljes körű Digital Twin adatmodell** kész a 99_Adattarolás.md specifikáció alapján -- **Visszafelé kompatibilis migráció** - meglévő adatok sértetlenek maradnak -- **Szinkronizált adatbázis séma** - minden új mező elérhető a PostgreSQL-ben -- **Bővíthető architektúra** - a JSONB mezők (individual_equipment) lehetővé teszik dinamikus felszerelések tárolását - -#### Technikai részletek: -- A refaktor követi a "Surgical Coding" elvet: csak a szükséges módosítások, minimális rizikó -- Az új mezők Optional típusúak, így a meglévő rekordok automatikusan NULL értékkel rendelkeznek -- A sync engine 969 elem ellenőrzéséből 28 javítást hajtott végre (3% változás) -- A profile_completion_percentage számítás frissítve, hogy figyelembe vegye az új brand és model mezőket-e -## Authentication Security Upgrade (2026-04-01) - -**Dátum:** 2026-04-01 -**Státusz:** Kész ✅ -**Fejlesztő:** Fast Coder (Security Backend Engineer) -**Cél:** Hiányzó jelszó visszaállítási végpontok, dinamikus jelszó komplexitás és "Remember Me" funkció implementálása. - -### 1. Hiányzó végpontok implementálása -- **POST /forgot-password**: Elfelejtett jelszó folyamat indítása. Mindig sikeres választ ad (email enumeration prevention). -- **POST /reset-password**: Jelszó visszaállítása token alapján. -- Mindkét végpont meghívja a meglévő `AuthService.initiate_password_reset` és `AuthService.reset_password` metódusokat. - -### 2. Dinamikus jelszó komplexitás -- Új `_validate_password_complexity` segédfüggvény az `AuthService`-ben. -- Ellenőrzi az `auth_password_strict` admin beállítást (default: False). -- Ha True: minimum hossz + legalább 1 nagybetű, 1 kisbetű, 1 szám/speciális karakter. -- Ha False: csak minimum hossz ellenőrzés. -- Alkalmazva: `register_lite` és `reset_password` metódusokban. - -### 3. "Remember Me" funkció -- Módosított `create_tokens` függvény a `security.py`-ban, fogad `remember_me` paramétert. -- Ha `remember_me=True`: refresh token lejárata 30 nap. -- Ha `remember_me=False`: refresh token lejárata 1 nap. -- Login végpont módosítva: explicit `remember_me: bool = Form(False)` paraméter. -- Access token lejárata változatlan (30 perc). - -**Változtatott fájlok:** -- `backend/app/api/v1/endpoints/auth.py` -- `backend/app/services/auth_service.py` -- `backend/app/core/security.py` - -**Tesztelés:** -- Mindhárom fájl szintaktikailag helyes. -- Végpontok importálhatók (7 végpont: register, login, verify-email, forgot-password, reset-password, complete-kyc, me). -- A rendszer készen áll a használatra. - -## Adminisztrációs felület integrációja (3. láb) - -**Dátum:** 2026-04-15 -**Státusz:** Kész ✅ -**Fejlesztő:** Fast Coder -**Cél:** Az Adminisztrációs felület (3. láb) integrálása az ökoszisztémába, RBAC router guard, AdminLayout, Dashboard és i18n kezelő. - -### 1. AdminLayout.vue létrehozása -- Professzionális, sötét tónusú, oldalsávos navigációval rendelkező layout -- Fix sidebar navigációval (Dashboard, User Management, Vehicle Catalog, i18n Manager, System Settings, Audit Logs) -- Top bar időjelenítéssel és quick actions gombokkal -- Footer statisztikákkal (System Status, API Response, Active Sessions, Uptime) - -### 2. Router guard implementálása -- `requiresAdmin: true` meta mező bevezetése a védett útvonalakhoz -- Globális `beforeEach` ellenőrzés, ami az `authStore`-ból kiolvassa a felhasználó RBAC szintjét -- Új `authStore.ts` létrehozása a felhasználói szerepkörök kezeléséhez (guest, user, manager, admin, superadmin) -- Admin útvonalak definiálása (`/admin`, `/admin/users`, `/admin/vehicles`, `/admin/translations`, `/admin/system`) - -### 3. AdminDashboard.vue nézet -- Rendszer statisztika kártyák (felhasználók száma, aktív session-ök, vehicles catalog, API health) -- i18n Kezelő táblázat, ami a backend `/api/v1/translations/hu` végpontjáról listázza a kulcsokat (jelenleg mock adatok) -- Recent System Activity lista -- Quick Actions gombok (Run System Audit, Clear Cache, Export Data, Impersonate User) - -### 4. Admin switcher a ModeSwitcher-ben -- A profil menüben megjelenik az "Admin felület" opció, de csak akkor, ha a bejelentkezett felhasználónak van admin jogosultsága -- "Exit Admin" gomb, ha admin módban van a felhasználó - -### 5. Styling és integráció -- Az admin felület "sterilebb" és funkcionálisabb, mint a B2C csempés világa -- Sötét színséma (#1e3a8a) kiemelésekhez -- App.vue frissítése az admin layout támogatásához -- Hiányzó admin view fájlok létrehozása (AdminUsersView, AdminVehiclesView, AdminTranslationsView, AdminSystemView) - -**Változtatott fájlok:** -- `frontend/src/layouts/AdminLayout.vue` (új) -- `frontend/src/router/index.ts` -- `frontend/src/stores/authStore.ts` (új) -- `frontend/src/views/AdminDashboard.vue` (új) -- `frontend/src/views/AdminUsersView.vue` (új) -- `frontend/src/views/AdminVehiclesView.vue` (új) -- `frontend/src/views/AdminTranslationsView.vue` (új) -- `frontend/src/views/AdminSystemView.vue` (új) -- `frontend/src/components/ModeSwitcher.vue` -- `frontend/src/App.vue` - -**Tesztelés:** -- A router guard megfelelően blokkolja a nem admin felhasználókat -- Az admin switcher csak admin jogosultsággal jelenik meg -- Az admin layout megfelelően renderelődik -- Minden fájl szintaktikailag helyes, TypeScript hibák nélkül - -## Service Finder "Értékközpontú" Landing Page (LandingView.vue) - -**Dátum:** 2026-04-16 -**Státusz:** Kész ✅ -**Fejlesztő:** Fast Coder -**Cél:** A Service Finder "Értékközpontú" Landing Page elkészítése a frontend/src/views mappában. - -### Feladat leírása: -A feladat egy modern, értékközpontú landing page létrehozása volt, amely a Service Finder brand identitását tükrözi. A követelmények: -- Layout: sf-wall (#B5DCE3) alapú ipari garázs háttér -- Hero szekció: középen a sf_logo_ok.png, címsor "A Te Járműved. A Te Adatod. A Te Profitod." (sf-blue szín) -- 3 nagy, érthető ikonnal ellátott kártya (Bento Grid stílus): - 1. PÉNZTÁRCA: "Költségek követése és optimalizálása." - 2. BIZTONSÁG: "Hitelesített digitális szervizkönyv." - 3. JÁTÉK: "Gamification és közösségi versenyek." -- Vizuális meggyőzés: háttérben naptár (sf_naptar.png) és villogó lámpa (sf_alarm_light_01.png) -- Nagy, 18-20px-es betűméret a leírásokhoz (idősebb korosztály számára olvasható) -- CTA: egyetlen, hangsúlyos "BELÉPÉS / REGISZTRÁCIÓ" gomb, ami a LoginView-ra irányít -- Branding: láblécben "Service Finder 2026 - A járművek digitális jövője." -- Kontraszt: világos háttereken sötét szöveg, sötét háttérnél világos betűk - -### Megvalósítás: -1. **LandingView.vue létrehozása** (`frontend/src/views/LandingView.vue`): - - Modern, teljes képernyős komponens Tailwind CSS segítségével - - Responsive design mobil- és asztali eszközökre - - Háttérdekorációk: naptár és villogó lámpa képek opacity-vel - - Három feature kártya gradient hátterekkel és ikonokkal - - Nagy betűméret (18-20px) a leírásokhoz - - Hangsúlyos CTA gomb gradient háttérrel és hover effektekkel - - Teljes lábléc a brandinggel - -2. **Router frissítése** (`frontend/src/router/index.ts`): - - Importáltuk a LandingView komponenst - - Frissítettük az alapútvonalat (`/`) a LandingView komponensre - - Megtartottuk a HomeView-t (dashboard) későbbi használatra - -3. **Design elemek:** - - Használtuk a meglévő Service Finder színpalettát (sf-wall, sf-blue, sf-green, sf-accent) - - Bento Grid layout 3 kártyával, hover animációkkal - - Átlátszó háttér (backdrop blur) a kártyákon - - Animált pulzáló lámpa a háttérben - - Reszponzív breakpointok mobil eszközökhöz - -### Változtatott fájlok: -- `frontend/src/views/LandingView.vue` (új) -- `frontend/src/router/index.ts` (módosított) - -### Tesztelés: -- A komponens helyesen renderelődik a Vue 3 keretrendszerben -- A router helyesen irányít a LandingView-ra az alapútvonalon -- A design reszponzív és megfelel a kontraszt követelményeknek -- A képek helyesen töltődnek be a public könyvtárból -- A CTA gomb helyesen irányít a /login útvonalra - -## Fix: 3D Animation Flicker — LoginModal.vue - -**Dátum:** 2026-06-03 - -### Probléma -A 3D kártyaforgatásnál vizuális villogás (flicker) jelentkezett, mert az `invisible` és `opacity-0` Tailwind osztályok azonnal elrejtették a lapokat, nem várták meg a CSS transition végét. - -### Megoldás -A [`LoginModal.vue`](frontend/src/components/LoginModal.vue:27) fájlban mindhárom kártyalap `:class` kötéséből eltávolításra került az `invisible` és `opacity-0` osztály. Csak a `pointer-events-none` maradt, hogy az inaktív lapokra ne lehessen véletlenül kattintani. A `backface-hidden` CSS osztály önmagában elegendő a nem aktív lapok vizuális takarásához a 3D forgatás során. - -## KYC Wizard (Stepper) - CompleteKycView.vue - -**Dátum:** 2026-06-03 -**Státusz:** Kész ✅ -**Fejlesztő:** Fast Coder -**Gitea #:** 184 - -### Megvalósítás -1. **Pinia Auth Store** ([`frontend/src/stores/auth.ts`](frontend/src/stores/auth.ts)) — új `completeKyc(kycData)` action hozzáadva, ami POST /auth/complete-kyc endpointot hívja, majd fetchUser()-rel frissíti a profilt. -2. **CompleteKycView.vue** ([`frontend/src/views/CompleteKycView.vue`](frontend/src/views/CompleteKycView.vue)) — teljes 3-lépéses Wizard (Stepper) megépítése: - - **Step 1 (Személyes):** Telefonszám, születési hely/dátum, anyja neve - - **Step 2 (Lakcím):** Atomizált címadatok (irányítószám, város, utca, típus, házszám, opcionális lépcsőház/emelet/ajtó/hrsz) - - **Step 3 (Biztonság):** Okmányok (ID_CARD + LICENSE), ICE kontakt, nyelv/pénznem preferencia -3. **Design:** Sötétkék (#04151F) háttér, Glassmorphism kártya (backdrop-blur, white/5 bg), türkiz (#00E5A0) akcentusok, Progress Bar lépésjelzővel, lépésenkénti validáció, loading spinner a submit gombon. -4. **Route** ([`frontend/src/router/index.ts`](frontend/src/router/index.ts)) — `/complete-kyc` már regisztrálva volt, lazy-loaded. +## 2026-06-04 (A) - Onboarding UX & KYC Authentication Flow Javítások + +### 🎯 Probléma +A felhasználói visszajelzések alapján a regisztrációs és KYC folyamat kritikus UX hibákat tartalmazott: +1. **'Not authenticated' hiba**: Az aktiváló linkre kattintás után a KYC mentés elszállt, mert a felhasználó nem volt bejelentkezve +2. **Email újra begépelése**: A verify oldalon újra be kellett írni az email címet +3. **Tab navigáció**: A Házszám mező után nem a Tovább gombra ugrott a Tab billentyű +4. **Kötelező okmányok**: A rendszer azonnal kérte a személyi igazolványt, ami rossz UX + +### ✅ Megoldás + +#### 1. Backend Módosítások +**Fájl**: [`backend/app/schemas/auth.py`](backend/app/schemas/auth.py) +- A `DocumentDetail` osztály mezői (`number`, `expiry_date`) most `Optional[str]` és `Optional[date]` +- A `UserKYCComplete.identity_docs` mező most `Optional[Dict[str, DocumentDetail]]` +- Ez lehetővé teszi a "Soft KYC"-t, ahol a felhasználó bejut a rendszerbe okmányok nélkül is + +#### 2. Frontend VerifyEmailView Módosítások +**Fájl**: [`frontend/src/views/VerifyEmailView.vue`](frontend/src/views/VerifyEmailView.vue:1) +- **Sikeres aktiválás után**: A CTA már nem "Tovább a profil kitöltéséhez", hanem "Tovább a Belépéshez" +- **Átirányítás**: A `goToKyc()` helyett `goToLogin()` amely a főoldalra irányít +- **Email auto-fill**: A `localStorage.getItem('pending_verification_email')` használata a korábbi `saved-email` helyett + +#### 3. Auth Store Logika +**Fájl**: [`frontend/src/stores/auth.ts`](frontend/src/stores/auth.ts:1) +- **Regisztráció**: Az email mentésre kerül `localStorage.setItem('pending_verification_email', data.email)` +- **Login után KYC ellenőrzés**: Ha `!isKycComplete.value`, automatikus átirányítás a `/complete-kyc` oldalra +- **Cleanup**: Sikeres belépés után törlődik a `pending_verification_email` a localStorage-ból + +#### 4. CompleteKycView Módosítások +**Fájl**: [`frontend/src/views/CompleteKycView.vue`](frontend/src/views/CompleteKycView.vue:1) + +**Tab Order Javítás**: +- A Házszám input kapott egy `@keydown.tab.exact="handleHouseNumberTab"` event handlert +- A `handleHouseNumberTab` függvény `event.preventDefault()` és `nextTick(() => nextButton.value?.focus())` +- A Tovább gomb kapott egy `ref="nextButton"` attribútumot + +**Opcionális Okmányok**: +- A 3. lépés címe: "Okmányok (opcionális)" +- A személyi igazolvány vizuálisan is opcionálisként jelenik meg (fehér pont helyett átlátszó, szöveg halvány) +- **Validáció eltávolítva**: A `validateStep()` függvény már nem ellenőrzi az ID_CARD mezőket +- **Payload logika**: Az `identity_docs` objektum csak akkor kerül a payload-ba, ha legalább egy dokumentum ki van töltve + +#### 5. Teljes Folyamat Átalakítás +**Régi folyamat**: +1. Regisztráció → Email confirm → KYC (nem bejelentkezve) → **HIBA** + +**Új folyamat**: +1. Regisztráció → Email mentés localStorage-ba +2. Email confirm → "Tovább a Belépéshez" CTA +3. Belépés → Auth store ellenőrzi KYC státuszt +4. Ha KYC hiányzik → Átirányítás `/complete-kyc` (már bejelentkezve!) +5. KYC opcionális okmányokkal → Sikeres mentés + +### 📊 Érintett Fájlok +- [`backend/app/schemas/auth.py`](backend/app/schemas/auth.py) - Soft KYC support +- [`frontend/src/views/VerifyEmailView.vue`](frontend/src/views/VerifyEmailView.vue:28) - Beléptetés flow +- [`frontend/src/stores/auth.ts`](frontend/src/stores/auth.ts:102) - KYC redirect logika +- [`frontend/src/views/CompleteKycView.vue`](frontend/src/views/CompleteKycView.vue:173) - Tab order + opcionális validáció + +### 🧪 Tesztelési Szempontok +1. ✅ Új user regisztráció email mentése +2. ✅ Verify oldalon email auto-fill +3. ✅ Sikeres aktiválás után "Tovább a Belépéshez" gomb +4. ✅ Belépés után KYC ellenőrzés és átirányítás +5. ✅ Házszám → Tab → Tovább gomb fokusz +6. ✅ KYC mentés okmányok nélkül +7. ✅ Backend fogadja az üres `identity_docs`-ot + +### 🔗 Gitea +- **Issue**: #200 - Fix: Onboarding UX & KYC Authentication Flow +- **Státusz**: In Progress --- -## Vehicle Store & Dashboard UI (Garázs) +## 2026-06-04 (C) - Soft KYC, Trust Profile Extension & Device-Hub Architecture -**Dátum:** 2026-06-03 -**Státusz:** Kész ✅ -**Kapcsolódó fájlok:** -- `frontend/src/stores/vehicle.ts` -- `frontend/src/views/DashboardView.vue` -- `frontend/tsconfig.json` -- `frontend/package.json` +### 🎯 Cél +Teljes stack implementáció a bizalmi infrastruktúra kiterjesztésére: Device Fingerprinting (Device-Hub architektúra), UserTrustProfile bővítés (identity_score, verification_level, verified_channels, identity_risk_flag), Person rekordok merge-elhetősége (merged_into_id), Soft KYC (opcionális címadatok a regisztrációnál), és eszközazonosítás a login folyamatban. -### Változtatások +### ✅ Implementáció -1. **Vehicle Store** ([`frontend/src/stores/vehicle.ts`](frontend/src/stores/vehicle.ts)) — Új Pinia store létrehozva: - - `Vehicle` interfész a backend `AssetResponse` séma alapján (`id`, `vin`, `license_plate`, `brand`, `model`, `year_of_manufacture`, `condition_score`, `current_mileage`, `status`, `fuel_type`, `engine_capacity`, `power_kw`, stb.) - - State: `vehicles` (ref