frontend 2026-06-10 bontva a 2 felület
This commit is contained in:
287
.roo/history.md
287
.roo/history.md
@@ -1,5 +1,79 @@
|
||||
# Service Finder Fejlesztési Történet
|
||||
|
||||
## 2026-06-08 - F5 Refresh Logout Bug Fix & HeaderLogo Contextual Navigation
|
||||
|
||||
### 🎯 Cél
|
||||
Két frontend hiba javítása: (1) F5 oldalfrissítéskor a Vue Router guard hamarabb fut le, mint a Pinia Auth Store init() befejeződik, ami kijelentkezést okoz. (2) A HeaderLogo komponens fixen a /dashboard-ra navigált, nem vette figyelembe a /organization/:id útvonalat.
|
||||
|
||||
### 🔧 Változtatások
|
||||
|
||||
**1. `frontend/src/stores/auth.ts`:**
|
||||
- Új `isInitialized` ref állapot (alapértelmezett: `false`) hozzáadva a store state-hez.
|
||||
- Az `init()` függvény legvégén `isInitialized.value = true` beállítás, így a router guard meg tudja várni az inicializálás végét.
|
||||
- Az `isInitialized` exportálva a return objektumban.
|
||||
|
||||
**2. `frontend/src/router/index.ts`:**
|
||||
- A `beforeEach` guard elején ellenőrzés: ha `!authStore.isInitialized`, akkor `await authStore.init()` meghívása.
|
||||
- Ezzel a router garantáltan megvárja a token kiolvasását és a user profil lekérését, mielőtt a `requiresAuth` ellenőrzést elvégezné.
|
||||
|
||||
**3. `frontend/src/components/header/HeaderLogo.vue`:**
|
||||
- `useRoute()` importálva a Vue Router-ből.
|
||||
- `targetRoute` computed property: ha a jelenlegi útvonal `/organization/`-t tartalmaz, akkor a logó a jelenlegi útvonalra navigál (önmagát tölti újra), egyébként `/dashboard`.
|
||||
- A prop-alapú `to` helyett a `:to="targetRoute"` használata a template-ben.
|
||||
|
||||
### ✅ Eredmény
|
||||
- Vite build hiba nélkül lefutott (136 modul, 3.23s).
|
||||
- Nincs több F5 utáni hamis kijelentkezés.
|
||||
- A logó szervezeti oldalon nem dobja ki a felhasználót a dashboard-ra.
|
||||
|
||||
|
||||
## 2026-06-08 - Issue #237: API Endpoints for visual_settings
|
||||
|
||||
### 🎯 Cél
|
||||
Backend API végpontok felkészítése a `visual_settings` módosítására. Pydantic sémák (`OrganizationUpdate`, `OrganizationResponse`) létrehozása a `visual_settings` mezővel, valamint `PATCH /organizations/{org_id}/visual-settings` végpont implementálása JSONB merge logikával.
|
||||
|
||||
### ✅ Implementáció
|
||||
|
||||
#### 1. Pydantic Sémák
|
||||
- **`OrganizationUpdate`**: [`backend/app/schemas/organization.py`](backend/app/schemas/organization.py:40) - Új séma `visual_settings: Optional[dict]`, `display_name`, `default_currency`, `language` mezőkkel
|
||||
- **`OrganizationResponse`**: [`backend/app/schemas/organization.py`](backend/app/schemas/organization.py:49) - Új DTO séma `visual_settings: Optional[dict]` mezővel, `from_attributes=True` konfigurációval
|
||||
|
||||
#### 2. API Végpont
|
||||
- **`PATCH /organizations/{org_id}/visual-settings`**: [`backend/app/api/v1/endpoints/organizations.py`](backend/app/api/v1/endpoints/organizations.py:207) - Új végpont JSONB merge logikával:
|
||||
- OWNER/ADMIN jogosultság ellenőrzés
|
||||
- Mély merge: a meglévő `visual_settings` kulcsok megmaradnak, csak a kapottak frissülnek
|
||||
- Pl. `{"theme": "dark"}` küldése nem írja felül a `wall_logo_url`-t
|
||||
- Egyéb mezők (`display_name`, `language`, `default_currency`) is frissíthetők
|
||||
|
||||
#### 3. Meglévő Végpontok Bővítése
|
||||
- **`GET /organizations/my`**: [`backend/app/api/v1/endpoints/organizations.py`](backend/app/api/v1/endpoints/organizations.py:203) - `visual_settings` mező hozzáadva a response-hoz
|
||||
- **`PATCH /users/me/preferences`**: [`backend/app/api/v1/endpoints/users.py`](backend/app/api/v1/endpoints/users.py:333) - Már támogatja a `visual_settings`-et a generikus `exclude_unset=True` logikával
|
||||
|
||||
#### 4. Verifikáció
|
||||
- Python syntax check: minden fájl hibátlanul lefordul
|
||||
- Import teszt: `OrganizationUpdate`, `OrganizationResponse`, `UserUpdate`, `UserResponse` mindegyike tartalmazza a `visual_settings` mezőt
|
||||
|
||||
|
||||
## 2026-06-08 - Issue #228: Add visual_settings to Models
|
||||
|
||||
### 🎯 Cél
|
||||
`visual_settings` JSONB mező hozzáadása a User és Organization modellekhez, a Pydantic sémák frissítése, majd az adatbázis szinkronizálása a sync_engine segítségével.
|
||||
|
||||
### ✅ Implementáció
|
||||
|
||||
#### 1. SQLAlchemy Modellek
|
||||
- **User modell**: [`backend/app/models/identity/identity.py`](backend/app/models/identity/identity.py:157) - `visual_settings` JSONB oszlop hozzáadva a `ui_mode` után, `server_default` JSONB default értékkel (`{"theme": "default", "primary_color": null, "wall_logo_url": null}`)
|
||||
- **Organization modell**: [`backend/app/models/marketplace/organization.py`](backend/app/models/marketplace/organization.py:109) - `visual_settings` JSONB oszlop hozzáadva az `external_integration_config` után, azonos default értékkel
|
||||
|
||||
#### 2. Pydantic Sémák
|
||||
- **UserResponse**: [`backend/app/schemas/user.py`](backend/app/schemas/user.py:62) - `visual_settings: Optional[dict]` mező hozzáadva default értékkel
|
||||
- **UserUpdate**: [`backend/app/schemas/user.py`](backend/app/schemas/user.py:107) - `visual_settings: Optional[dict]` mező hozzáadva
|
||||
|
||||
#### 3. Adatbázis Szinkronizálás
|
||||
- `sync_engine` sikeresen lefuttatva: 2 hiányzó oszlopot észlelt és hozzáadott (`identity.users.visual_settings` és `fleet.organizations.visual_settings`)
|
||||
- Verifikáció: mindkét oszlop `jsonb` típusként létezik az adatbázisban
|
||||
|
||||
|
||||
## 2026-06-04 (B) - Magic Link Implementáció (Auto-Login Email Verification)
|
||||
|
||||
### 🎯 Cél
|
||||
@@ -196,3 +270,216 @@ Az [`tests/active/e2e_profile_address.py`](tests/active/e2e_profile_address.py)
|
||||
- Ha be van állítva → `pw.chromium.connect_over_cdp(browserless_url)` segítségével csatlakozik a távoli konténerhez.
|
||||
- Ha nincs beállítva → lokális `pw.chromium.launch()` fallback, a `HEADLESS` env var figyelembevételével.
|
||||
- **Gitea Issue**: #215 - létrehozva, elindítva és lezárva.
|
||||
|
||||
## 2026-06-07 (C) - NAV API UX & Adatbázis Finomhangolás
|
||||
|
||||
### 🎯 Cél
|
||||
A NAV API működik, de a felhasználói élmény és az adatbázis szigorúsága finomhangolást igényelt.
|
||||
|
||||
### ✅ Implementáció
|
||||
|
||||
#### 1. Cégjegyzékszám (company_registry_number) opcionálissá tétele
|
||||
- **Modell**: [`backend/app/models/marketplace/organization.py`](backend/app/models/marketplace/organization.py:89) - `reg_number: Mapped[Optional[str]]` már eleve nullable volt
|
||||
- **Schema**: [`backend/app/schemas/organization.py`](backend/app/schemas/organization.py:17) - `reg_number: Optional[str] = None` már eleve opcionális volt
|
||||
- **Adatbázis**: A `sync_engine` audit szerint a séma tökéletesen szinkronban van (1017/1017 elem OK)
|
||||
|
||||
#### 2. Duplikáció szűrése a NAV lekérdezés előtt
|
||||
- **Végpont**: [`backend/app/api/v1/endpoints/organizations.py`](backend/app/api/v1/endpoints/organizations.py:124) - `GET /lookup-tax/{tax_number}`
|
||||
- Injektált `db: AsyncSession = Depends(get_db)` függőség
|
||||
- Mielőtt a NAV-hoz fordul, ellenőrzi az adatbázist az adószám első 8 számjegye (törzsszám) alapján
|
||||
- Ha létezik aktív cég (`is_deleted == False`), azonnal `HTTPException(status_code=409, detail="Ez az adószám már regisztrálva van a rendszerben.")` hibát dob
|
||||
|
||||
#### 3. Rövid név okosítása (filler words filtering)
|
||||
- **Service**: [`backend/app/services/nav_service.py`](backend/app/services/nav_service.py:105) - `_format_company_names()` metódus
|
||||
- `filler_words` lista: `["és", "szolgáltató", "kereskedelmi", "üzleti", "tanácsadó", "ipari", "építőipari", "termelő", "fejlesztő", "kivitelező", "általános"]`
|
||||
- A rövid név generálásakor a név szavakra bontva, csak a nem-töltelék szavak maradnak meg
|
||||
- A cégforma rövidítés (pl. "Kft.") a legvégére kerül hozzáfűzésre
|
||||
- Fallback: ha minden szó töltelék volt, az eredeti név marad
|
||||
|
||||
### ✅ Verifikáció
|
||||
- Python import check: `nav_service.py` és `organizations.py` sikeresen importálódott
|
||||
- `sync_engine` audit: 1017/1017 elem OK, 0 hiba, teljes szinkron
|
||||
|
||||
## 2026-06-08 - UI/UX Navigációs Hibák Javítása (3 Bugfix)
|
||||
|
||||
### 🎯 Cél
|
||||
Három UI/UX és navigációs hiba javítása a Vue 3 frontendben: (1) cégnév/"Cégem" gomb navigáció `/company/garage`-ba, (2) Profil oldal bezárása backdrop overlay-re kattintva, (3) Avatar dropdown bezárása kattintáskor az elemen kívül.
|
||||
|
||||
### ✅ Implementáció
|
||||
|
||||
#### 1. ProfileView.vue - Backdrop Overlay
|
||||
**Fájl**: [`frontend/src/views/ProfileView.vue`](frontend/src/views/ProfileView.vue:14)
|
||||
- Teljes oldalt lefedő backdrop overlay (`fixed inset-0 z-10 bg-black/30 backdrop-blur-[2px]`) a profil kártya körül
|
||||
- `@click="closeProfile"` a backdrop-on → kattintásra `router.push('/dashboard')`
|
||||
- `@click.stop` a belső kártya `div`-en → megakadályozza a bezáródást a kártyán belüli kattintáskor
|
||||
- `handleEscapeKey()`: Escape billentyűre bezárja a profilt (vagy a jelszó módosító modalt, ha az nyitva van)
|
||||
- `onMounted`/`onUnmounted`: `keydown` eseményfigyelő regisztráció/törlés
|
||||
|
||||
#### 2. DashboardHeader.vue - Cégnév Navigáció
|
||||
**Fájl**: [`frontend/src/components/DashboardHeader.vue`](frontend/src/components/DashboardHeader.vue:157)
|
||||
- Cégnév (`activeCompanyName`) `<button>`-ként jelenik meg, `@click="goToCompanyGarage"`
|
||||
- `goToCompanyGarage()`: bezárja az összes dropdown-t, majd `router.push('/company/garage')`
|
||||
- `handleCompanySelect(orgId)`: ha a szervezet már aktív, akkor is navigál `/company/garage`-ba (nem tér vissza korán)
|
||||
|
||||
#### 3. DashboardHeader.vue - Avatar Dropdown Click-Outside
|
||||
**Fájl**: [`frontend/src/components/DashboardHeader.vue`](frontend/src/components/DashboardHeader.vue:394)
|
||||
- `avatarContainerRef` template ref az avatar konténeren
|
||||
- `handleOutsideClick()`: `avatarContainerRef.value.contains(target)` ellenőrzés → ha a kattintás az avatar konténeren kívül van, bezárja a `isUserMenuOpen` dropdown-t
|
||||
|
||||
#### 4. auth.ts - Store Navigáció Eltávolítása
|
||||
**Fájl**: [`frontend/src/stores/auth.ts`](frontend/src/stores/auth.ts:524)
|
||||
- `switchOrganization()` már nem tartalmaz `router.push()` hívásokat
|
||||
- A navigáció kizárólag a komponensek felelőssége (Separation of Concerns)
|
||||
|
||||
### ✅ Verifikáció
|
||||
- Vite production build: 121 module transformed, 0 hiba, 3.35s alatt
|
||||
|
||||
## 2026-06-08 - Frontend Architektúra 2.0 & Dinamikus Megjelenítési Rendszer Mérföldkő Létrehozása
|
||||
|
||||
### 🎯 Cél
|
||||
Új Gitea mérföldkő (ID: 26) létrehozása a frontend architektúrális átalakításához, valamint a hozzá tartozó 8 issue (ID: #228-#236) létrehozása a `gitea_manager.py` script segítségével.
|
||||
|
||||
### ✅ Elkészült elemek
|
||||
|
||||
#### Mérföldkő
|
||||
- **Frontend Architektúra 2.0 & Dinamikus Megjelenítési Rendszer** (ID: 26)
|
||||
|
||||
#### 1. FÁZIS: Adatbázis és Backend Alapozás
|
||||
- **#228** - 1.1: Adatbázis sémák bővítése vizuális konfigurációval (Skins/Themes) - JSONB mezők User és Organization táblákhoz
|
||||
- **#229** - 1.2: Engedélyezési szintek és Funkciókapcsolók (Feature Flags / RBAC) - ABAC kiterjesztés
|
||||
- **#230** - 1.3: Dinamikus (Adatbázis) és Statikus fordítási rendszer alapjai - Translation tábla
|
||||
|
||||
#### 2. FÁZIS: Frontend Struktúra & Layout Szétválasztás
|
||||
- **#231** - 2.1: Független Layout komponensek felépítése (Vue 3) - PrivateLayout & OrganizationLayout
|
||||
- **#232** - 2.2: Vue Router átírás (Nested Routing) - Hierarchikus útvonalak
|
||||
|
||||
#### 3. FÁZIS: Többnyelvűség (i18n) & Vizuális Témaváltó (Theming Engine)
|
||||
- **#233** - 3.1: i18n audit & Szövegek kiszervezése nyelvi kulcsokra
|
||||
- **#234** - 3.2: Tailwind CSS Változók és Témakezelő implementálása (AppThemeStore)
|
||||
|
||||
#### 4. FÁZIS: Animált UI Készlet
|
||||
- **#235** - 4.1: "App Store" típusú kiterjedő kártya (Expansion Card)
|
||||
- **#236** - 4.2: Kontextuális Vészjelző Rendszer (Villogó Hibajelző Lámpa)
|
||||
|
||||
## 2026-06-08 - Frontend Architektúra 2.0 - Megvalósíthatósági Elemzés
|
||||
|
||||
### 🎯 Cél
|
||||
A létrehozott 8 Gitea issue (#228-#236) kód-szintű felmérése: mi az, ami már létezik, mi hiányzik, és milyen függőségi sorrendben kell implementálni.
|
||||
|
||||
### ✅ Elemzés eredménye
|
||||
|
||||
#### Készültségi Tábla
|
||||
| Issue | Kártya | Kész | Megjegyzés |
|
||||
|-------|--------|------|------------|
|
||||
| #228 | JSONB visual_settings | **0%** | Nincs visual_settings mező semelyik modellben |
|
||||
| #229 | RBAC/ABAC | **40%** | UserRole, OrgUserRole, subscription_plan létezik; feature flag-ok hiányoznak |
|
||||
| #230 | Dinamikus Fordítás | **80%** | Translation modell, vue-i18n, 6 nyelvi fájl, translationService kész |
|
||||
| #231 | Layout komponensek | **60%** | 3 layout létezik, de `<slot />`-ot használnak `<router-view />` helyett |
|
||||
| #232 | Nested Routing | **50%** | 8 route létezik, de flat struktúrában, nincs layout nesting |
|
||||
| #233 | i18n audit | **30%** | 17+ hardcoded szöveg azonosítva 5 komponensben |
|
||||
| #234 | Tailwind Témaváltó | **0%** | Nincs CSS variable, nincs AppThemeStore, nincsenek `dark:` osztályok |
|
||||
| #235 | Expansion Card | **0%** | Nincs dedikált komponens |
|
||||
| #236 | Vészjelző Rendszer | **10%** | hotspot-pulse/ring animációk léteznek, de nincs ContextAlert komponens |
|
||||
|
||||
#### Feltárt fájlok (18+ darab)
|
||||
- Backend: [`identity.py`](backend/app/models/identity/identity.py:122), [`organization.py`](backend/app/models/marketplace/organization.py:35), [`translation.py`](backend/app/models/system/translation.py:8)
|
||||
- Frontend Store: [`auth.ts`](frontend/src/stores/auth.ts:54), [`appModeStore.ts`](frontend/src/stores/appModeStore.ts:6)
|
||||
- Frontend Layout: [`ConsumerLayout.vue`](frontend/src/layouts/ConsumerLayout.vue:1), [`CorporateLayout.vue`](frontend/src/layouts/CorporateLayout.vue:1), [`AdminLayout.vue`](frontend/src/layouts/AdminLayout.vue:1)
|
||||
- Frontend Router: [`index.ts`](frontend/src/router/index.ts:1)
|
||||
- Frontend i18n: [`hu.ts`](frontend/src/i18n/hu.ts:1), [`en.ts`](frontend/src/i18n/en.ts:1), [`translationService.ts`](frontend/src/services/translationService.ts:5)
|
||||
- Frontend Komponens: [`DashboardHeader.vue`](frontend/src/components/DashboardHeader.vue:1), [`DashboardView.vue`](frontend/src/views/DashboardView.vue:1), [`CompanyGarageView.vue`](frontend/src/views/organization/CompanyGarageView.vue:1)
|
||||
- Frontend Config: [`tailwind.config.js`](frontend/tailwind.config.js:1), [`main.css`](frontend/src/assets/main.css:1), [`main.ts`](frontend/src/main.ts:30)
|
||||
- Frontend Types: [`organization.ts`](frontend/src/types/organization.ts:5)
|
||||
|
||||
#### Ajánlott implementációs sorrend
|
||||
1. **#228** (JSONB) → **#229** (RBAC) → **#234** (Témaváltó)
|
||||
2. **#230** (Fordítás) → **#233** (i18n audit)
|
||||
3. **#231** (Layout) → **#232** (Router) → **#235** (Expansion) → **#236** (Alert)
|
||||
|
||||
#### Dokumentáció
|
||||
- Teljes elemzés: [`docs/frontend_architecture_2_0_feasibility_analysis.md`](docs/frontend_architecture_2_0_feasibility_analysis.md)
|
||||
|
||||
## 2026-06-08 - Frontend Architektúra 2.0 - Hiányzó Alkártyák Létrehozása
|
||||
|
||||
### 🎯 Cél
|
||||
Az elemzés alapján azonosított hiányzó komponensekhez 14 új Gitea alkártya (#237-#250) létrehozása, majd hozzárendelése a "Frontend Architektúra 2.0 & Dinamikus Megjelenítési Rendszer" mérföldkőhöz (ID: 26).
|
||||
|
||||
### ✅ Elkészült elemek
|
||||
|
||||
#### 1. FÁZIS: Adatbázis és Backend Alapozás (Alkártyák)
|
||||
- **#237** - 1.1-A: Backend API végpontok visual_settings kezelésére (GET/PUT /users/me/visual-settings, GET/PUT /organizations/{id}/visual-settings)
|
||||
- **#238** - 1.1-B: Frontend useVisualSettings() composable + UserProfile/OrganizationItem interface bővítés visual_settings mezővel
|
||||
- **#239** - 1.2-A: Backend subscription_service.py + SUBSCRIPTION_FEATURES config dict (allow_custom_skin, allow_advanced_animations)
|
||||
- **#240** - 1.2-B: Frontend useFeatureFlag() composable + auth store bővítés subscription_features mezővel
|
||||
|
||||
#### 2. FÁZIS: Frontend Struktúra & Layout Szétválasztás (Alkártyák)
|
||||
- **#241** - 2.1-A: PrivateLayout komponens kialakítása (ConsumerLayout átnevezés)
|
||||
- **#242** - 2.1-B: OrganizationLayout komponens kialakítása (CorporateLayout átnevezés)
|
||||
- **#243** - 2.2-A: Nested Router struktúra kialakítása (layout → child route)
|
||||
- **#244** - 2.2-B: Route transition guard + breadcrumb komponens
|
||||
|
||||
#### 3. FÁZIS: Többnyelvűség & Témaváltó (Alkártyák)
|
||||
- **#245** - 3.1-A: i18n audit - hardcoded szövegek kiszervezése
|
||||
- **#246** - 3.1-B: i18n audit - hiányzó nyelvi kulcsok pótlása
|
||||
- **#247** - 3.2-A: AppThemeStore implementálása (CSS variable binding)
|
||||
- **#248** - 3.2-B: Tailwind CSS dark mode + skin class binding
|
||||
|
||||
#### 4. FÁZIS: Animált UI Készlet (Alkártyák)
|
||||
- **#249** - 4.1: ExpansionCard komponens (App Store típusú kártya)
|
||||
- **#250** - 4.2: ContextAlert komponens (Vészjelző Rendszer)
|
||||
|
||||
### 🔗 Gitea
|
||||
- **Mérföldkő**: Frontend Architektúra 2.0 & Dinamikus Megjelenítési Rendszer (ID: 26)
|
||||
- **Státusz**: Alkártyák létrehozva, mérföldkőhöz rendelve
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-09 - Széf→Garázs Terminológia Javítás & Regisztrációs Hiba Javítás
|
||||
|
||||
### 🎯 Cél
|
||||
Két kritikus hiba javítása a járművek csatlakoztatása előtt: (1) "Széf" terminológia cseréje "Garázs"-ra a backend kódban, (2) Regisztrációs hiba javítása, ahol az opcionális címmezők kitöltetlenül hagyása csendes hibát okozott.
|
||||
|
||||
### ✅ Javítások
|
||||
|
||||
#### 1. Terminológia Javítás ("Széf" → "Garázs")
|
||||
|
||||
**Elsődleges - Backend organization létrehozás**:
|
||||
- **Fájl**: [`backend/app/services/auth_service.py`](backend/app/services/auth_service.py:253)
|
||||
- **Hiba**: A `complete_kyc()` metódusban a személyes garázs organization `name` mezője `f"{p.last_name} Széfe"` volt hardkódolva
|
||||
- **Javítás**: `f"{p.last_name} Széfe"` → `f"{p.last_name} Garázsa"`
|
||||
- **Hatás**: A regisztráció után a felhasználó a sárga gombban "{Vezetéknév} Garázsa" feliratot látja
|
||||
|
||||
**Másodlagos - Dokumentum archiválás üzenet**:
|
||||
- **Fájl**: [`backend/app/api/v1/endpoints/documents.py`](backend/app/api/v1/endpoints/documents.py:63)
|
||||
- **Hiba**: `"Dokumentum sikeresen archiválva a széfben."`
|
||||
- **Javítás**: `"Dokumentum sikeresen archiválva a garázsban."`
|
||||
|
||||
**Ellenőrzött frontend fájlok (nem volt szükség módosításra)**:
|
||||
- [`frontend/src/i18n/hu.ts`](frontend/src/i18n/hu.ts:38) - Már "garázs"-t használ (`personalGarage`, `privateGarage`, `companyGarageLabel`, `personalGarageLabel`)
|
||||
- [`frontend/src/i18n/en.ts`](frontend/src/i18n/en.ts:41) - Már "garage"-t használ helyesen
|
||||
- [`frontend/src/layouts/PrivateLayout.vue`](frontend/src/layouts/PrivateLayout.vue:42) - i18n kulcsokat használ, nincs hardkódolt "széf"
|
||||
- [`frontend/src/layouts/OrganizationLayout.vue`](frontend/src/layouts/OrganizationLayout.vue:10) - Már "garázsa" szerepel a template-ben
|
||||
|
||||
#### 2. Regisztrációs Csendes Hiba Javítása
|
||||
|
||||
**Gyökér Ok**:
|
||||
- **Fájl**: [`backend/app/services/geo_service.py`](backend/app/services/geo_service.py:50)
|
||||
- A `get_or_create_full_address()` metódusban a `street_name`, `street_type` és `house_number` paraméterek **kötelezőek** voltak (`str` típus, nem `Optional[str]`)
|
||||
- A KYC űrlapról ezek a mezők `None` értékkel érkezhetnek (opcionális mezők)
|
||||
- A `UserKYCComplete` Pydantic séma helyesen `Optional[str] = None`-ként deklarálta őket
|
||||
- A frontend helyesen kihagyta az üres mezőket a payload-ból
|
||||
- **A hiba**: A `GeoService.get_or_create_full_address()` nem fogadott el `None` értéket ezekre a paraméterekre
|
||||
|
||||
**Javítás**:
|
||||
- `street_name: str` → `street_name: Optional[str] = None`
|
||||
- `street_type: str` → `street_type: Optional[str] = None`
|
||||
- `house_number: str` → `house_number: Optional[str] = None`
|
||||
|
||||
**Ellenőrzött fájlok (nem volt szükség módosításra)**:
|
||||
- [`backend/app/schemas/auth.py`](backend/app/schemas/auth.py:28) - `UserKYCComplete` séma helyesen `Optional[str] = None`-t használ
|
||||
- [`frontend/src/views/CompleteKycView.vue`](frontend/src/views/CompleteKycView.vue:411) - A `handleSubmit()` helyesen szűri az üres stringeket
|
||||
|
||||
### ✅ Verifikáció
|
||||
- Vite production build: 121 module transformed, 0 hiba, 3.56s alatt
|
||||
- Python syntax check: minden módosított fájl hibátlan
|
||||
- `sync_engine` futtatva: séma konzisztens
|
||||
Reference in New Issue
Block a user