diff --git a/.roo/history.md b/.roo/history.md index 468ffc7..42731a1 100644 --- a/.roo/history.md +++ b/.roo/history.md @@ -8,318 +8,124 @@ Teljes körű adatbázis konzisztencia ellenőrzés és zombie API végpontok fe ### 🔧 Eredmények **1. ADATBÁZIS TISZTASÁG:** ✅ PASS -- API modul import: ✅ Sikeres (2 route: GET, POST) -- Sync Engine: ✅ 1210 OK, 0 Fixed, 0 Extra -- E2E test: ⚠️ Pre-existing conftest hiba (verification token timeout - nem kapcsolódó) - -## 2026-06-30 - [#343] Fázis 4/7: Gamification kulcsok felvétele backend lokációs fájlokba - -### 🎯 Cél -GAMIFICATION szekció létrehozása a `backend/static/locales/en.json` és `hu.json` fájlokban a `docs/gamification_i18n_audit_and_fix_proposal.md` dokumentáció alapján. - -### 🔧 Módosított fájlok - -## 2026-07-01 - Opening Hours (JSONB) Admin UI támogatás - -### 🎯 Cél -Nyitvatartás (Opening Hours) JSONB mező adminisztrációs támogatásának megvalósítása: backend API (GET/PATCH), frontend edit UI (7 napos grid), frontend detail display. - -### 🔧 Módosított fájlok -- `backend/app/api/v1/endpoints/admin_providers.py` - ProviderDetail + ProviderUpdateInput sémák `opening_hours` mezővel; get_provider_detail() és update_provider() végpontok kiegészítése a ServiceProfile JSONB oszlop olvasásával/írásával -- `frontend_admin/pages/providers/[id]/edit.vue` - "Nyitvatartás" tab (4. tab) 7 napos grid-del, checkbox + time input párokkal, 24/7 gyorsgombbal, hétköznap másolással, összes törléssel -- `frontend_admin/pages/providers/[id]/index.vue` - Nyitvatartás megjelenítő tábla a részletes nézetben - -### ✅ Verifikáció -- Sync Engine: 1297 OK, 0 Fixed, 0 Extra - rendszer tökéletesen szinkronban -- GET /admin/providers/1 → 200, `opening_hours` mező visszatér -- PATCH /admin/providers/1 `opening_hours` → 200, adatok perzisztálódnak és visszaolvashatók - -## 2026-06-30 - [#377] M4: Többnyelvű támogatás bevezetése (DE, FR, RO, CZ, SK) - -### 🎯 Cél -5 új nyelv (Német, Francia, Román, Cseh, Szlovák) bevezetése a backend és frontend admin i18n rendszerekbe. - -### 🔧 Létrehozott fájlok -- `backend/static/locales/de.json` - Backend német lokációs fájl (7 szekció) -- `backend/static/locales/fr.json` - Backend francia lokációs fájl (7 szekció) -- `backend/static/locales/ro.json` - Backend román lokációs fájl (7 szekció) -- `backend/static/locales/cz.json` - Backend cseh lokációs fájl (7 szekció) -- `backend/static/locales/sk.json` - Backend szlovák lokációs fájl (7 szekció) -- `frontend_admin/locales/de.json` - Frontend admin német fő lokációs fájl -- `frontend_admin/locales/fr.json` - Frontend admin francia fő lokációs fájl -- `frontend_admin/locales/ro.json` - Frontend admin román fő lokációs fájl -- `frontend_admin/locales/cz.json` - Frontend admin cseh fő lokációs fájl -- `frontend_admin/locales/sk.json` - Frontend admin szlovák fő lokációs fájl -- `frontend_admin/i18n/locales/de.json` - Frontend admin német közös lokációs fájl -- `frontend_admin/i18n/locales/fr.json` - Frontend admin francia közös lokációs fájl -- `frontend_admin/i18n/locales/ro.json` - Frontend admin román közös lokációs fájl -- `frontend_admin/i18n/locales/cz.json` - Frontend admin cseh közös lokációs fájl -- `frontend_admin/i18n/locales/sk.json` - Frontend admin szlovák közös lokációs fájl - -### 🔧 Módosított fájlok -- `frontend_admin/nuxt.config.ts` - 5 új nyelv regisztrálása a @nuxtjs/i18n konfigurációban - -### ✅ Verifikáció -- Backend i18n: Mind az 5 nyelv betöltődik (7-7 szekció), leaf key fordítések működnek -- Sync Engine: 1293 OK, 0 Fixed, 0 Extra - rendszer tökéletesen szinkronban - -### 🎯 Cél -GAMIFICATION szekció létrehozása a `backend/static/locales/en.json` és `hu.json` fájlokban a `docs/gamification_i18n_audit_and_fix_proposal.md` dokumentáció alapján. - -### 🔧 Módosított fájlok - -## 2026-06-30 - [#376] M3: Admin nyelvválasztó átalakítása legördülő menüvé - -### 🎯 Cél -A jelenlegi kétállású HU/EN kapcsoló átalakítása bővíthető, legördülő nyelvválasztó dropdownná, amely a backend-ből érkező támogatott nyelveket listázza. - -### 🔧 Módosított fájlok -- `frontend_admin/components/LanguageSwitcher.vue` — **LÉTREHOZVA**: Új önálló LanguageSwitcher dropdown komponens zászló emoji-kkal, nyelv nevével, localStorage + backend perzisztálással -- `frontend_admin/layouts/default.vue` — **MÓDOSÍTVA**: 157-170. sorokban a régi gomb-alapú kapcsoló kicserélve `` komponensre; felesleges `useI18n` import és `switchLocale`/`getAuthHeaders` függvények eltávolítva - -### 📊 Eredmény -- LanguageSwitcher komponens: ✅ Létrehozva (zászló emoji, dinamikus locale lista, backend PATCH perzisztálás, localStorage) -- default.vue cleanup: ✅ 25 sor kód eltávolítva (i18n logika kiszervezve) -- Nuxt production build: ✅ Sikeres - -## 2026-06-30 - Admin Provider Root Cause Analysis (#379) - -**Vizsgálat típusa:** Rendszer-Architect root cause analysis -**Gitea kártya:** #379 - -### Felfedezett probléma -Az admin felület (providers list & pending queue) csak 6 rekordot mutat a `marketplace.service_providers` táblából. A robotok által gyűjtött 8569 rekord a `marketplace.service_staging`-ben láthatatlan. - -### Root Cause -A `backend/app/api/v1/endpoints/admin_providers.py` `list_providers()` és `get_provider_stats()` endpointjai kizárólag a `ServiceProvider` modellt kérdezik le. A `provider_service.py` `search_providers()` (public API) már helyesen használ UNION ALL-t mindhárom forrásból. - -### Javítási terv -1. `ProviderListItem` response model kiegészítése `source_table` mezővel -2. `list_providers()` UNION ALL kiterjesztése ServiceStaging-re -3. `get_provider_stats()` kiterjesztése staging rekordokkal -4. Nem kell új validációs mező - a `provider_validations`, `service_profiles.trust_score` stb. már létezik - -### Dokumentáció -`docs/admin_providers_root_cause_analysis.md` - -## 2026-06-30 - Admin Provider Discovery Implementáció - -### 🎯 Cél -A `list_providers()` admin végpont kiterjesztése UNION ALL lekérdezéssel, hogy a bot által gyűjtött ServiceStaging rekordok (8569 db) és a verified organization-ök is megjelenjenek az admin felületen. Új `rejected.vue` oldal az elutasított szolgáltatók visszaállításához. - -### 🔧 Változtatások -1. `backend/app/api/v1/endpoints/admin_providers.py`: - - `_build_unified_providers_query()`: UNION ALL a ServiceProvider, ServiceStaging és Organizations táblákból - - `source_filter` és `source_table_filter` a UNION ALL eredményére alkalmazva (nem az egyes részekre) - kijavítva a SourceType enum ütközési hibát - - `get_provider_stats()`: staging_pending mező hozzáadása - - `restore_provider()`: POST végpont rejected->approved státuszváltáshoz - - `get_provider_history()`, `update_provider()` végpontok -2. `frontend_admin/pages/providers/rejected.vue`: új oldal az elutasított szolgáltatók listázásához és visszaállításához -3. `frontend_admin/pages/providers/index.vue`: source_table, bot/verified_org szűrés támogatás -4. `frontend_admin/pages/providers/pending.vue`: source_table mező hozzáadása - -### ✅ Tesztek -- `source=bot` filter: 200 OK, 5 staging rekord visszaadva -- `source=verified_org` filter: 200 OK, 1 organization rekord -- `source_table=service_staging` filter: 200 OK, 3 staging rekord -- Stats: total=8575, staging_pending=5096 -- Rejected filter: 200 OK, 2 rejected rekord - -## 2026-06-30 - Provider Admin Tabbed Edit UI (Status, Validations, History) - -### 🎯 Cél -A szolgáltatók admin felületének bővítése: többfülű szerkesztési nézet, státuszkezelés, gamification validációs lista és állapotváltoztatási előzmények megjelenítése. - -### 🔧 Módosított fájlok - -**1. `backend/app/api/v1/endpoints/admin_providers.py`** -- `ProviderUpdateInput` séma bővítése: `status` (pending/approved/rejected) és `validation_score` (0-100) mezőkkel -- `ProviderValidationEntry` response séma létrehozása (id, provider_id, voter_user_id, validation_type, weight, validation_metadata, created_at, voter_name) -- `GET /admin/providers/{id}/validations` végpont: gamification validációk lekérése voter névvel -- `PATCH /admin/providers/{id}` módosítása: státuszváltás kezelése (ModerationStatus enum), old_data audit snapshot, validation_score auto-állítás restore/reject esetén - -**2. `frontend_admin/pages/providers/[id].vue`** -- Teljes átírás: egysávos layout helyett 4 fül (Adatok, Státusz, Validációk, Előzmények) -- **Adatok fül**: változatlan alapadatok, cím, elérhetőség, moderációs műveletek -- **Státusz fül**: új űrlap státusz select, validation_score range slider (0-100), indoklás textarea -- **Validációk fül**: gamification validációs lista típus-badge-ekkel, szavazó név, súly, metadata, timestamp -- **Előzmények fül**: idővonal action-badge-ekkel, státusz átmenetek (régi→új), user info, expandálható részletek -- Elutasított/Megjelölt szekció: "Szerkesztés" és "Visszaállítás" gombok minden státuszhoz - -### ✅ Verifikáció -- Sync Engine: ✅ 1293 OK, 0 Fixed, 0 Extra - teljes szinkron -- Backend syntax: ✅ admin_providers.py AST parse OK -- Backend import: ✅ router modul betöltés sikeres - -## 2026-06-30 - P0 Rescue: Admin Providers API Blocker Fixes - -### 🎯 Cél -4 darab kritikus blokkoló hiba javítása az Admin Providers flow-ban. - -### 🔧 Változtatások - -**FIX 1 - Silent Rollback (PATCH endpoint):** -- [`update_provider()`](backend/app/api/v1/endpoints/admin_providers.py:1147) `db.commit()` köré `try/except IntegrityError` blokk került -- IntegrityError esetén `db.rollback()` + `HTTPException(400)` a csendes 200 OK helyett - -**FIX 2 - Unique Constraint on Restore:** -- [`_create_provider_validation()`](backend/app/api/v1/endpoints/admin_providers.py:198) átírva PostgreSQL `INSERT ... ON CONFLICT DO UPDATE` (UPSERT) használatára -- A `uq_voter_provider_validation` constraint tiszteletben tartva - -**FIX 3 - Wrong Frontend URL:** -- Ellenőrizve: a frontend [`[id].vue`](frontend_admin/pages/providers/[id].vue:761) már a helyes `/api/v1/admin/providers/{id}/validations` URL-t használja - -**FIX 4 - AuditLog Attribute Error:** -- [`get_provider_history()`](backend/app/api/v1/endpoints/admin_providers.py:1029) `AuditLog.created_at` → `AuditLog.timestamp` -- `timestamp=log.created_at` → `timestamp=log.timestamp` - -### ✅ Verifikáció -- Backend syntax: ✅ `py_compile` OK -- Modul import: ✅ `admin_providers` modul betöltés sikeres -- Container: ✅ `sf_api` restart sikeres, státusz Up - - -## 2026-06-30 - [#381] P0 Fix: Provider validations 500 error & missing edit/flag modals - -### 🎯 Cél -Két P0 hibajavítás az Admin Provider Details oldalon. - -### 🔧 Módosított fájlok - -**Bug #1 - `get_provider_validations()` 500 error:** -- [`admin_providers.py`](backend/app/api/v1/endpoints/admin_providers.py:1018) — `v.voter.display_name` → `v.voter.email` -- Root cause: `User` modellben nincs `display_name` mező - -**Bug #2 - Dead "Szerkesztés" gomb:** -- [`[id].vue`](frontend_admin/pages/providers/[id].vue:540) — Edit modal template hozzáadva (name, city, address, contact, category mezőkkel) -- [`[id].vue`](frontend_admin/pages/providers/[id].vue:603) — Flag modal template hozzáadva (indoklás textarea-val) -- Root cause: A `