524 lines
31 KiB
Markdown
524 lines
31 KiB
Markdown
# Service Finder Fejlesztési Történet
|
|
|
|
## 2026-06-21 - P0 Deep Audit: Database Consistency & Zombie API Hunt
|
|
|
|
### 🎯 Cél
|
|
Teljes körű adatbázis konzisztencia ellenőrzés és zombie API végpontok felderítése a `vehicle`, `finance`, `fleet_finance` sémákban, mielőtt a frontend fejlesztés elkezdődik.
|
|
|
|
### 🔧 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
|
|
- `backend/static/locales/en.json` - GAMIFICATION szekció hozzáadva (16 kulcs: SUBMIT_SERVICE, QUIZ, BADGE, SEASON, ACHIEVEMENTS)
|
|
- `backend/static/locales/hu.json` - GAMIFICATION szekció hozzáadva (16 kulcs, magyar fordításokkal)
|
|
|
|
### ✅ Ellenőrzés
|
|
- JSON szintaxis: ✅ Érvényes mindkét fájlban
|
|
- i18n helper `t()` függvény: ✅ Minden kulcs lekérdezhető angolul és magyarul
|
|
- Interpoláció: ✅ `{error}` helyőrzők működnek
|
|
- Leaf key count: 16 = 16 (en/hu egyezés)
|
|
|
|
## 2026-06-30 - [#344] Fázis 5/7: Backend API endpointok átalakítása - hardcoded stringek eltávolítása
|
|
|
|
### 🎯 Cél
|
|
A `backend/app/api/v1/endpoints/gamification.py` végpontjaiban található összes hardcoded magyar és angol szöveg cseréje az i18n `t()` helper segítségével.
|
|
|
|
### 🔧 Módosított fájlok
|
|
- `backend/app/api/v1/endpoints/gamification.py` - 14 helyen hardcoded string → `t("GAMIFICATION.xxx")` hívás; `from app.core.i18n import t` import hozzáadva
|
|
- `backend/static/locales/hu.json` - +10 új GAMIFICATION kulcs (QUIZ.ALREADY_COMPLETED, QUIZ.COMPLETED_SUCCESS, QUIZ.QUESTION_NOT_FOUND, QUIZ.POINTS_FAILED, BADGE.AWARDED_SUCCESS, BADGE.POINTS_FAILED, SEASON.NO_ACTIVE, XP_*_DESC, QUIZ_*_DESC)
|
|
- `backend/static/locales/en.json` - +10 új GAMIFICATION kulcs angol fordítással
|
|
|
|
### ✅ Ellenőrzés
|
|
- Python import: ✅ `from app.api.v1.endpoints.gamification import router` sikeres
|
|
- Szintaxis: ✅ Nincs hiba
|
|
- i18n lefedettség: ✅ Minden korábbi hardcoded string i18n kulcsra cserélve
|
|
- Interpoláció: ✅ `{error}`, `{badge_name}` helyőrzők működnek
|
|
|
|
## 2026-06-23 - Cost Entry Wizard (CostEntryWizard.vue) - 4-lépéses Számla Űrlap
|
|
|
|
### 🎯 Cél
|
|
4-lépéses stepper wizard építése részletes számla/invoice költségek rögzítésére a CostsActionsCard-ból indíthatóan.
|
|
|
|
### 🔧 Módosított fájlok
|
|
|
|
## 2026-06-24 - P0 Fix & Enhance: Permissions Page Data Flow, Editing & i18n
|
|
|
|
### 🎯 Cél
|
|
Permissions oldal adatáramlás javítása, szerkesztés/mentés funkció bevezetése, és @nuxtjs/i18n telepítése/konfigurálása.
|
|
|
|
### 🔧 Módosított fájlok
|
|
- `frontend_admin/pages/permissions/index.vue` - Teljes átírás: client-side data fetch onMounted-ben, szerkeszthető toggle-ok (modifiedPermissions Map), PATCH mentés, toast notification, $t() hívások
|
|
- `frontend_admin/nuxt.config.ts` - @nuxtjs/i18n modul hozzáadása, locales konfiguráció (hu/en)
|
|
- `frontend_admin/i18n/locales/hu.json` - Magyar fordítási fájl (permissions oldal összes szövege)
|
|
- `frontend_admin/i18n/locales/en.json` - Angol fordítási fájl
|
|
|
|
### ✅ Eredmények
|
|
- Build: ✅ Sikeres (hu-DbjfOUfH.mjs, en-DnJ23n0t.mjs locale chunk-ok)
|
|
- i18n modul: @nuxtjs/i18n v10.4.0 telepítve, no_prefix stratégiával
|
|
- Szerkesztés: modified/original Map-ek, handleToggle, savePermissions (PATCH /admin/permissions/override/{org_id})
|
|
- Adatmentés: success/error toast notification auto-clear-el
|
|
|
|
## 2026-06-24 - P0 Execution: Wire Packages UI to Real Database
|
|
|
|
### 🎯 Cél
|
|
A frontend_admin Packages oldal (packages/index.vue) mock adatok helyett valós API adatbázisból töltse a SubscriptionTier csomagokat. "Új Csomag Létrehozása" gomb és modal hozzáadása.
|
|
|
|
### 🔧 Módosított fájlok
|
|
- `backend/app/schemas/subscription.py` - `tier_level` és `feature_capabilities` mezők hozzáadva a SubscriptionTierResponse, SubscriptionTierCreate, SubscriptionTierUpdate modellekhez
|
|
- `backend/app/api/v1/endpoints/admin_packages.py` - create/update végpontok frissítve az új mezők kezelésére
|
|
- `frontend_admin/pages/packages/index.vue` - Teljes átírás: mock adatok eltávolítva, fetchPackages() API hívás, create/edit/delete modal-ok, loading/error/empty állapotok, i18n támogatás
|
|
- `frontend_admin/locales/hu.json` - packages i18n kulcsok (magyar)
|
|
- `frontend_admin/locales/en.json` - packages i18n kulcsok (angol)
|
|
|
|
## 2026-06-29 - #327 Gitea Kártya: Backend - Meglévő PATCH /admin/users/{id}/penalty endpoint javítása
|
|
|
|
### 🎯 Cél
|
|
A #327-es Gitea kártya (Epic 8 Gamification 2.0, 4. implementációs lépés) feladata a meglévő `PATCH /admin/users/{user_id}/penalty` végpont hibáinak kijavítása. Az endpoint már refaktorálva volt GamificationService `process_activity()` használatára, de 3 hibát tartalmazott.
|
|
|
|
### 🔧 Javított hibák
|
|
|
|
**1. Hiányzó `import logging` az [`admin.py`](backend/app/api/v1/endpoints/admin.py)-ban**
|
|
- `logger.error()` hívás volt a fájlban (483. sor), de `import logging` nem szerepelt
|
|
- Javítás: `import logging` és `logger = logging.getLogger("admin-endpoints")` hozzáadva
|
|
|
|
**2. Undefined variable `admin` a `approve_action` endpointban**
|
|
- 82. sor: `admin.id` helyett `current_user.id` (az `admin` változó sosem volt definiálva)
|
|
|
|
**3. Rossz [`SecurityAuditLog`](backend/app/models/system/audit.py:12) mezőnevek a penalty endpointban (464-471. sor)**
|
|
- `user_id=current_user.id` → `actor_id=current_user.id`
|
|
- `target_user_id=user_id` → `target_id=user_id`
|
|
- `details="..."` → `payload_after={"penalty_points_added": ..., "reason": ...}` (JSON dict, nem string)
|
|
- `ip_address="admin_api"` → eltávolítva (nem létező mező)
|
|
- `payload_before={}` hozzáadva (kötelező mező)
|
|
|
|
### 🐛 Hibakeresési tapasztalat
|
|
- A kezdeti 500-as hibaüzenet félrevezető volt: `'UserStats' object has no attribute 'level'` - valójában a `current_level` mező helyesen létezik
|
|
- A valódi hiba a `SecurityAuditLog` létrehozásánál volt, de a `raise e` minta a [`process_activity()`](backend/app/services/gamification_service.py:174)-ben elnyelte a belső traceback-et
|
|
- Stratégiai debug logging segítségével sikerült lokalizálni a valódi hibát
|
|
- `.pyc` cache törlése és konténer újraindítás szükséges volt a friss kód betöltéséhez
|
|
|
|
### ✅ Eredmények
|
|
- HTTP 200: `{"status":"success","message":"Gamification penalty applied to user 1","user_id":1,"penalty_points_added":100,"total_penalty_points":300,"restriction_level":1}`
|
|
- Adatbázis: user 1 `penalty_points=300`, `restriction_level=1`
|
|
- Audit log: `audit.security_audit_logs` bejegyzés `action="apply_gamification_penalty"`, `actor_id=2`, `target_id=1`
|
|
- Sync Engine: ✅ 1284 OK, 0 Fixed, 0 Extra
|
|
- Debug logging eltávolítva a [`gamification_service.py`](backend/app/services/gamification_service.py)-ból
|
|
- Gitea #327: ✅ Lezárva
|
|
|
|
## 2026-06-29 - Gitea #328: Gamification Admin Integration - Bugfixes & Endpoint Verification
|
|
|
|
### 🎯 Cél
|
|
Gitea #328 ("Backend: gamification.py endpointok Gami") kártya feladatainak befejezése: admin gamification végpontok hibáinak javítása és teljes körű tesztelése.
|
|
|
|
### 🔧 Javítások
|
|
|
|
**1. [`gamification.py`](backend/app/api/v1/endpoints/gamification.py) - submit-service végpont hibák:**
|
|
- Hiányzó `logger` import hozzáadva (`import logging`, `logger = logging.getLogger("gamification-endpoints")`)
|
|
- `metadata={...}` → `provided_fields={...}` javítás (a `UserContribution` modellben `provided_fields` a JSONB mező neve)
|
|
- Hiányzó kötelező mezők hozzáadva: `action_type=1`, `earned_xp=submission_rewards.get("xp", 100)`
|
|
|
|
**2. [`admin_gamification.py`](backend/app/api/v1/endpoints/admin_gamification.py) - master-config végpont javítás:**
|
|
- `system_service.get_setting()` → `system_service.get_scoped_parameter()` (a `SystemService`-ben nincs `get_setting` metódus)
|
|
- `system_service.set_setting()` → `system_service.set_scoped_parameter()` ugyanezen okból
|
|
|
|
**3. [`system_service.py`](backend/app/services/system_service.py) - set_scoped_parameter upsert logika javítás:**
|
|
- Az eredeti `ON CONFLICT ON CONSTRAINT uix_param_scope` nem működött `scope_id IS NULL` esetén, mert PostgreSQL-ben a UNIQUE constraint nem blokkolja a NULL értékű duplikátumokat (NULL != NULL)
|
|
- Kétlépéses megközelítésre váltva: először megkeresi a meglévő rekordot, ha van frissíti, ha nincs beszúrja
|
|
- Adatbázis: `system.system_parameters.scope_level` oszlop típusa átállítva custom PostgreSQL enum-ról `VARCHAR(50)`-re a SQLAlchemy String(50) modellel való kompatibilitás miatt
|
|
|
|
### ✅ Teszt Eredmények
|
|
- **Admin Gamification végpontok:** 18/18 ✅ (GET/POST/PUT/DELETE point-rules, level-configs, badges, seasons, competitions, user-stats, master-config, system-params, points-ledger, contributions)
|
|
- **Penalty/Reward végpontok:** ✅ POST `/admin/gamification/user-stats/{id}/penalty` és `/reward`
|
|
- **Legacy PATCH `/admin/users/{id}/penalty`:** ✅ Továbbra is működik a GamificationService-en keresztül
|
|
- **Sync Engine:** ✅ 1284 OK, 0 Fixed, 0 Extra
|
|
- **Gitea #328:** ✅ Lezárva
|
|
|
|
## 2026-06-29 - #329 Frontend: Gamification menüpont + routing
|
|
|
|
### 🎯 Cél
|
|
Gamification menüpont és routing létrehozása a Nuxt 3 admin frontendben.
|
|
|
|
### 📝 Megvalósítás
|
|
- **`frontend_admin/layouts/default.vue`:** Gamification menücsoport beszúrása a sidebar `menuGroups` tömbjébe 6 menüelemmel (Játékmenet Beállítások, Események & Szezonok, Felhasználói Adatok, Gamification HQ, Rendszer Konfig, Rendszerparaméterek)
|
|
- **`frontend_admin/pages/gamification/`:** 12 oldal létrehozása:
|
|
- `index.vue` — Gamification HQ Dashboard (stat kártyák, gyors műveletek, pontnapló, top 5 ranglista)
|
|
- `point-rules.vue`, `levels.vue`, `badges.vue` — Játékmenet beállítások
|
|
- `seasons.vue`, `competitions.vue` — Események & Szezonok
|
|
- `users/index.vue`, `users/[id].vue` — Felhasználói statisztikák
|
|
- `leaderboard.vue`, `ledger.vue` — Ranglista és Pontnapló
|
|
- `config.vue`, `parameters.vue` — Rendszer konfiguráció
|
|
- **Routing:** Nuxt 3 file-based routing automatikusan generálja a route-okat
|
|
- **Build:** Sikeres Nuxt build (Vite + Nitro), konténer újraindítva
|
|
- **Gitea #329:** ✅ Elkészült
|
|
|
|
## 2026-06-29 - Gitea #330: Gamification Dashboard (Frontend Admin)
|
|
|
|
### 🎯 Cél
|
|
Gamification HQ Dashboard oldal (`/gamification/index.vue`) elkészítése az admin felülethez, stat kártyákkal, gyors műveletekkel, pontnaplóval és top 5 ranglistával.
|
|
|
|
### 🔧 Módosított fájlok
|
|
- **`backend/app/api/v1/endpoints/admin_gamification.py`:**
|
|
- Új `GET /admin/gamification/dashboard-summary` végpont hozzáadva, ami összesíti: összes felhasználó, aktív szezon neve, függő hozzájárulások száma, mai XP
|
|
- `list_points_ledger` végpont javítva: `user_name` mező hozzáadva (User.email JOIN-nel)
|
|
- `datetime.utcnow()` → `datetime.now(timezone.utc)` deprecation fix
|
|
- **`frontend_admin/pages/gamification/index.vue`:**
|
|
- API hívás átirányítva a dedikált `/api/v1/admin/gamification/dashboard-summary` végpontra
|
|
- Leaderboard adatok mapping-je kiegészítve: `username`/`current_level`/`total_xp` mezők támogatása a backend válaszhoz igazodva
|
|
- **Sync Engine:** ✅ 1284 elem szinkronban, 0 hiba
|
|
- **Gitea #330:** ✅ Elkészült
|
|
|
|
## 2026-06-29 - Gitea #331: Frontend Pontszabályok + Szintek CRUD oldal (admin)
|
|
|
|
### 🎯 Cél
|
|
A Gamification admin felület Pontszabályok és Szintek CRUD oldalainak implementálása a Nuxt 3 admin frontendben.
|
|
|
|
### 🔧 Változtatások
|
|
|
|
- **`frontend_admin/pages/gamification/point-rules.vue`:**
|
|
- Teljes CRUD implementáció: listázás, létrehozás, szerkesztés, soft-delete (is_active=False)
|
|
- Adattábla: ID, action_key, points, description, is_active oszlopok
|
|
- Create/Edit modal: action_key, points, description, is_active mezők validációval
|
|
- Delete confirmation modal soft-delete-hez
|
|
- 409 Conflict kezelés (duplikált action_key)
|
|
- Toast értesítések minden művelethez
|
|
- API végpont: `/api/v1/admin/gamification/point-rules`
|
|
|
|
- **`frontend_admin/pages/gamification/levels.vue`:**
|
|
- Teljes CRUD implementáció: listázás, létrehozás, szerkesztés
|
|
- Adattábla: level_number, rank_name, min_points, is_penalty oszlopok
|
|
- Create/Edit modal: level_number, rank_name, min_points, is_penalty mezők validációval
|
|
- Vizuális szint fa diagram progress bar-okkal
|
|
- 409 Conflict kezelés (duplikált level_number)
|
|
- Toast értesítések minden művelethez
|
|
- API végpont: `/api/v1/admin/gamification/level-configs`
|
|
|
|
- **Build:** ✅ Sikeres Nuxt build a `sf_admin_frontend` konténerben
|
|
- **Gitea #331:** ✅ Elkészült
|
|
|
|
## 2026-06-29 - Gitea #332: Frontend: Kitüntetések (Badge) kezelő oldal
|
|
|
|
### 🎯 Cél
|
|
A Gamification admin felület Kitüntetések (Badge) CRUD oldalának implementálása a Nuxt 3 admin frontendben. A backend API végpontok már léteztek a [`admin_gamification.py`](backend/app/api/v1/endpoints/admin_gamification.py)-ban (GET/POST/PUT/DELETE `/admin/gamification/badges`).
|
|
|
|
### 🔧 Módosított fájlok
|
|
|
|
- **`frontend_admin/pages/gamification/badges.vue`:**
|
|
- Teljes CRUD implementáció: listázás, létrehozás, szerkesztés, törlés
|
|
- Adattábla: ID, Név, Leírás, Ikon (kép előnézettel), Műveletek oszlopok
|
|
- Create/Edit modal: name (kötelező, max 100), description (kötelező, max 500), icon_url (opcionális URL élő előnézettel)
|
|
- Delete confirmation modal: badge név és leírás megjelenítése
|
|
- 409 Conflict kezelés (duplikált név)
|
|
- Toast értesítések minden művelethez (siker/hiba)
|
|
- Loading, error és empty állapotok kezelése
|
|
- Auth middleware (`useAuth()`)
|
|
- API végpont: `/api/v1/admin/gamification/badges`
|
|
|
|
### ✅ Eredmények
|
|
- **GET /admin/gamification/badges:** ✅ 200 OK (2 meglévő badge listázva)
|
|
- **POST /admin/gamification/badges:** ✅ 201 Created (új badge létrehozva egyedi névvel)
|
|
- **PUT /admin/gamification/badges/{id}:** ✅ 200 Updated (badge adatok módosítva)
|
|
- **DELETE /admin/gamification/badges/{id}:** ✅ 204 No Content (badge törölve, GET visszaadja a maradékot)
|
|
- **Sync Engine:** ✅ Ellenőrizve
|
|
- **Gitea #332:** ✅ Elkészült
|
|
|
|
## 2026-06-29 - Gitea #333: Frontend Szezonok + Versenyek kezelő oldal
|
|
|
|
### 🎯 Cél
|
|
A gamification admin felület Szezonok (seasons) és Versenyek (competitions) kezelő oldalainak implementálása a meglévő backend API végpontokra építve.
|
|
|
|
### 🔧 Módosított fájlok
|
|
- **`frontend_admin/pages/gamification/seasons.vue`** - Teljes CRUD implementáció: kártya nézet, create/edit modal, aktiválás megerősítéssel, státusz badge-ek (active/inactive), dátumtartomány megjelenítés
|
|
- **`frontend_admin/pages/gamification/competitions.vue`** - Teljes CRUD implementáció: grid kártya nézet, szezon szűrő dropdown, create/edit modal JSON rules szerkesztővel, státusz badge-ek (draft/active/completed/cancelled)
|
|
|
|
### ✅ Eredmény
|
|
- Build: ✅ Sikeres (Nuxt build hiba nélkül)
|
|
- Backend API: már implementálva (`admin_gamification.py`)
|
|
- Menüpontok: már konfigurálva (`default.vue`)
|
|
- **Gitea #333:** ✅ Elkészült
|
|
|
|
## 2026-06-29 - Gitea #334: Frontend: Felhasználói statisztikák + büntetés admin nézet (penalty)
|
|
|
|
### 🎯 Cél
|
|
A Gamification admin felület felhasználói statisztikák oldalának (`users/index.vue`) és felhasználó részletes nézetének (`users/[id].vue`) implementálása, büntetés/jutalom funkciókkal.
|
|
|
|
### 🔧 Eredmények
|
|
|
|
**1. BACKEND ELLENŐRZÉS:** ✅ PASS
|
|
- `admin_gamification.py` router már teljesen implementálva volt (1098 sor)
|
|
- Minden szükséges végpont létezik: user-stats list/get/update, penalty POST, reward POST, points-ledger, contributions
|
|
- `GamificationService.process_activity()` támogatja a penalty/reward admin műveleteket
|
|
|
|
**2. FRONTEND `users/index.vue`:** ✅ Implementálva
|
|
- Felhasználói statisztikák adattábla (XP, szint, pontok, büntetés, restrikció, aktivitás)
|
|
- Szűrők: szint, minimum/maximum XP, büntetés státusz
|
|
- Lapozás (offset/limit alapú)
|
|
- Linkek a részletes nézetre
|
|
|
|
**3. FRONTEND `users/[id].vue`:** ✅ Implementálva
|
|
- Statisztika kártyák: XP, szint, pontok, social pont, büntetés, restrikció, kvóta, kitiltás
|
|
- Aktivitás mutatók: szolgáltatások, felfedezések, validációk, szolgáltatók
|
|
- **Büntetés űrlap:** POST `/admin/gamification/user-stats/{id}/penalty` (amount + reason)
|
|
- **Jutalom űrlap:** POST `/admin/gamification/user-stats/{id}/reward` (xp_amount + social_amount + reason)
|
|
- Pontnapló tábla a felhasználóhoz tartozó ledger bejegyzésekkel
|
|
|
|
**4. ADATBÁZIS SZINKRONIZÁCIÓ:** ✅ PASS
|
|
- sync_engine: 1284 elem OK, 0 hiba, 0 extra elem
|
|
- A rendszer tökéletesen szinkronban van
|
|
|
|
### ✅ Eredmény
|
|
- Backend: ✅ Már implementálva (admin_gamification.py)
|
|
- Frontend users/index.vue: ✅ Teljes implementáció (szűrők, tábla, lapozás)
|
|
- Frontend users/[id].vue: ✅ Teljes implementáció (statok, büntetés, jutalom, ledger)
|
|
- Adatbázis: ✅ Szinkronban
|
|
- **Gitea #334:** ✅ Elkészült
|
|
|
|
## 2026-06-29 - Gitea #335: Frontend Ranglista Admin Nézet (Leaderboard)
|
|
|
|
### 🎯 Cél
|
|
Admin ranglista nézet megvalósítása a gamification rendszerhez: backend API végpont + frontend admin oldal.
|
|
|
|
### 🔧 Eredmények
|
|
|
|
**1. BACKEND - Admin Leaderboard API végpont:** ✅
|
|
- `GET /admin/gamification/leaderboard` végpont hozzáadva az [`admin_gamification.py`](backend/app/api/v1/endpoints/admin_gamification.py:1193) fájlhoz
|
|
- Támogatja: pagination (limit/offset), filtering (level, min_xp, search), sorting (sort_by/sort_order)
|
|
- Kétlépcsős eager loading: `joinedload(UserStats.user).joinedload(User.person)` a Person nevek eléréséhez
|
|
- Explicit `onclause` a Person join-nál az `AmbiguousForeignKeysError` elkerülésére (User↔Person bidirekcionális FK)
|
|
- `or_` import hozzáadva a SQLAlchemy import sorhoz
|
|
|
|
**2. FRONTEND - Leaderboard oldal:** ✅
|
|
- [`leaderboard.vue`](frontend_admin/pages/gamification/leaderboard.vue) teljes implementáció:
|
|
- Keresés név/email alapján
|
|
- Szint filter (1-20), minimum XP filter
|
|
- Rendezés (XP, Pontok, Social Points, Szint) + irány toggle
|
|
- Adattábla 13 oszloppal (Rank, Név, Email, XP, Szint, Pontok, Social, Penalty, Restriction, Felfedezések, Szolgáltatások, Frissítve, Műveletek)
|
|
- Rank badge-ek (arany/ezüst/bronz) top 3 helyezéshez
|
|
- Lapozás first/prev/next/last + oldalméret választó (25/50/100/250)
|
|
- Loading, error, empty állapotok
|
|
- Link a felhasználói részletek oldalra
|
|
|
|
**3. TESZTELÉS:** ✅
|
|
- Alap leaderboard lekérdezés: 12 user, XP szerint csökkenő
|
|
- Szint filter (level=2): 7 találat
|
|
- Min XP filter (min_xp=4000): 2 találat
|
|
- Rendezés ascending (current_level): helyes sorrend
|
|
- Keresés névre ("accip"): 1 találat (Tímea Accipe)
|
|
- Keresés emailre ("profibot"): 6 találat
|
|
- Keresés vezetéknévre ("Gyöngyössy"): 2 találat
|
|
- Kombinált filter (level=2 & search=accip): 1 találat
|
|
- Lapozás (offset=5, limit=3): helyes rank számozás
|
|
- **Gitea #335:** ✅ Elkészült
|
|
|
|
## 2026-06-29 - Gitea #336: Frontend Master Config & System Parameters Pages
|
|
|
|
### 🎯 Cél
|
|
Két admin frontend oldal implementálása a Gamification 2.0 modulhoz:
|
|
1. `config.vue` — GAMIFICATION_MASTER_CONFIG JSON szerkesztő hatás kalkulátorral
|
|
2. `parameters.vue` — Gamification kategóriájú SystemParameter-ek DataTable inline szerkesztéssel
|
|
|
|
### 🔧 Módosított fájlok
|
|
- `frontend_admin/pages/gamification/config.vue` — Teljes implementáció (~540 sor): 4 konfigurációs szekció (XP Logic, Penalty Logic, Conversion Logic, Level Rewards) csúszkás/inputos szerkesztéssel, Impact Calculator szint/aktivitás/szociális pont csúszkákkal, valós idejű számított értékekkel (napi XP, szintlépés XP, szociális kredit, napok a szintlépésig), Raw JSON szerkesztő validációval, mentés PUT /admin/gamification/master-config végpontra
|
|
- `frontend_admin/pages/gamification/parameters.vue` — Teljes implementáció (~280 sor): DataTable key/value/category/scope_level/scope_id oszlopokkal, inline szerkesztő modal textarea-val, smart value parsing (JSON/Number/String auto-detection), mentés PUT /admin/gamification/system-params/{key} végpontra
|
|
|
|
### ✅ Eredmények
|
|
- Backend API-k auditálva: GET/PUT /admin/gamification/master-config és GET/PUT /admin/gamification/system-params végpontok teljesen implementálva
|
|
- Mindkét oldal Nuxt HMR-rel betöltődött és fordítási hiba nélkül fut a sf_admin_frontend konténerben (port 8502)
|
|
- Auth pattern: useCookie('access_token') + Authorization: Bearer header
|
|
- Dark theme: slate-800/emerald/amber/rose/violet/cyan színséma
|
|
- **Gitea #336:** ✅ Elkészült
|
|
|
|
## 2026-06-29 - Gitea #337: Frontend Pontnapló böngésző oldal (ledger.vue)
|
|
|
|
### 🎯 Cél
|
|
PointsLedger admin böngésző oldal elkészítése DataTable-lel, szűrőkkel, lapozással és CSV exporttal.
|
|
|
|
### 🔧 Módosított fájlok
|
|
- `backend/app/api/v1/endpoints/admin_gamification.py` - `reason_search` paraméter hozzáadása a `GET /admin/gamification/points-ledger` végponthoz (ILIKE keresés a reason mezőben)
|
|
- `frontend_admin/pages/gamification/ledger.vue` - Teljes implementáció: loading/error/empty állapotok, szűrősáv (user_id, date_from, date_to, reason_search), adattábla (ID, User, Pont, Büntetés, XP, Ok, Forrás, Dátum), lapozás (Előző/Következő), CSV export, toast értesítések
|
|
|
|
### ✅ API Teszt Eredmények
|
|
- `GET /api/v1/admin/gamification/points-ledger?limit=5` → 200 OK (5 entry)
|
|
- `GET /api/v1/admin/gamification/points-ledger?reason_search=test&limit=5` → 200 OK (5 entry, ILIKE filter működik)
|
|
- `GET /api/v1/admin/gamification/points-ledger?user_id=1&limit=5` → 200 OK (4 entry)
|
|
|
|
- **Gitea #337:** ✅ Elkészült
|
|
|
|
## 2026-06-29 - Gamification Admin E2E Teszt Suite (#338)
|
|
|
|
### 🎯 Cél
|
|
Teljes körű E2E teszt suite létrehozása a Gamification admin felülethez, 10 tesztforgatókönyvvel.
|
|
|
|
### 🔧 Módosított fájlok
|
|
- `backend/tests/e2e/test_gamification_admin_e2e.py` - LÉTREHOZVA: 995 soros E2E teszt suite
|
|
|
|
### 📋 Teszt forgatókönyvek
|
|
1. **Point Rules CRUD** - Create, List, Update, Delete (soft-delete), Duplicate 409
|
|
2. **Level Configs CRUD** - Create, List, Update, Duplicate 409
|
|
3. **Badges CRUD** - Create, List, Update, Delete (hard-delete), Duplicate
|
|
4. **Seasons CRUD + Activation** - Create, List, Update, Activate, Single active verification
|
|
5. **Competitions CRUD** - Create, List, Update, Non-existent season 404
|
|
6. **User Stats** - List, Detail (404), Reward, Penalty, Update
|
|
7. **Master Config** - Get, Update, Verify
|
|
8. **System Params** - List, Update
|
|
9. **Points Ledger** - List, Pagination, Reason search, User filter
|
|
10. **Permission Check** - Regular user without gamification:manage gets 403
|
|
11. **Dashboard Summary** - Verify response structure
|
|
|
|
### ✅ Teszt Eredmények
|
|
- **40/40 passed, 0 failed** ✅
|
|
- Minden admin gamification végpont lefedve
|
|
- Permission teszt: asyncpg-vel aktivált user, email verification-en keresztül
|
|
- Superadmin bypass token (`dev_bypass_active`) használata admin műveletekhez
|
|
|
|
- **Gitea #338:** ✅ Elkészült
|
|
|
|
## 2026-06-29 - Gamification Nyelvi Modul Audit (#339)
|
|
|
|
### 🎯 Cél
|
|
A gamification backend és frontend admin modulok teljes körű nyelvi auditja - hardcoded stringek azonosítása és i18n javítási terv készítése.
|
|
|
|
### 🔧 Eredmények
|
|
- **16 fájl** átvizsgálva (3 backend + 12 frontend Vue + 1 nuxt.config)
|
|
- **Megállapítás:** A frontend admin 12 Vue oldalán 100%-ban hardcoded magyar nyelvű szövegek, sehol nincs `useI18n()` vagy `$t()` használat
|
|
- **Backend:** Kevert magyar/angol hardcoded hibaüzenetek, keménykódolt kvíz (magyar), achievement címek (angol)
|
|
- **Lokációs fájlok:** Egyetlen gamification kulcs sem található a `frontend_admin/locales/*.json` és `backend/static/locales/*.json` fájlokban
|
|
- **Javítási javaslat:** 7 fázisú terv a teljes i18n migrációhoz (15-20 fájl módosítás)
|
|
- **Dokumentáció:** `docs/gamification_i18n_audit_and_fix_proposal.md` - részletes audit és fix proposal
|
|
|
|
- **Gitea #339:** ✅ Audit elkészült
|
|
|
|
## 2026-06-29 - Gitea #340: Gamification i18n kulcsok felvétele (Fázis 1/7)
|
|
|
|
### 🎯 Cél
|
|
Gamification i18n kulcsok felvétele a `frontend_admin/locales/en.json` és `hu.json` fájlokba a `docs/gamification_i18n_audit_and_fix_proposal.md` dokumentációban definiált kulcs struktúra alapján.
|
|
|
|
### 🔧 Módosított fájlok
|
|
- `frontend_admin/locales/en.json` — Hozzáadva a `gamification` szekció 11 al-szekcióval (dashboard, badges, competitions, config, leaderboard, ledger, levels, parameters, point_rules, seasons, users)
|
|
- `frontend_admin/locales/hu.json` — Hozzáadva a `gamification` szekció magyar fordítással
|
|
|
|
### ✅ Eredmény
|
|
Mindkét JSON fájl validálva (Python json.load), szintaktikailag helyes. A gamification szótár teljes egészében elérhető mind angol, mind magyar nyelven.
|
|
- **Gitea #340:** ✅ Implementáció kész
|
|
|
|
## 2026-06-29 - Gitea #341: Fázis 2/7 - 12 Vue oldal átalakítása useI18n() és t() hívásokkal
|
|
|
|
### 🎯 Cél
|
|
A 12 gamification admin Vue oldal hardcoded magyar szövegeinek lecserélése `useI18n()` + `t()` hívásokra, a #340-ben felvett i18n kulcsok használatával.
|
|
|
|
### 🔧 Módosított fájlok
|
|
- `frontend_admin/i18n/locales/en.json` — Kiegészítve hiányzó gamification kulcsokkal (icon_hint, icon_preview, create_btn, unknown_error, name_placeholder, desc_placeholder, select_season, rules_placeholder, season_id_label)
|
|
- `frontend_admin/i18n/locales/hu.json` — Kiegészítve hiányzó gamification kulcsokkal (magyar fordítás)
|
|
- `frontend_admin/pages/gamification/badges.vue` — useI18n() + t() konverzió
|
|
- `frontend_admin/pages/gamification/competitions.vue` — useI18n() + t() konverzió
|
|
- `frontend_admin/pages/gamification/config.vue` — useI18n() + t() konverzió
|
|
- `frontend_admin/pages/gamification/index.vue` — useI18n() + t() konverzió
|
|
- `frontend_admin/pages/gamification/leaderboard.vue` — useI18n() + t() konverzió
|
|
- `frontend_admin/pages/gamification/ledger.vue` — useI18n() + t() konverzió
|
|
- `frontend_admin/pages/gamification/levels.vue` — useI18n() + t() konverzió
|
|
- `frontend_admin/pages/gamification/parameters.vue` — useI18n() + t() konverzió
|
|
- `frontend_admin/pages/gamification/point-rules.vue` — useI18n() + t() konverzió
|
|
- `frontend_admin/pages/gamification/seasons.vue` — useI18n() + t() konverzió
|
|
- `frontend_admin/pages/gamification/users/index.vue` — useI18n() + t() konverzió
|
|
- `frontend_admin/pages/gamification/users/[id].vue` — useI18n() + t() konverzió
|
|
|
|
### ✅ Eredmény
|
|
- Build: ✅ Sikeres (`✓ built in 6.95s`)
|
|
- Mind a 12 Vue oldal átalakítva: `const { t } = useI18n()` hozzáadva, minden hardcoded string `t('gamification.xxx.yyy')` hívással helyettesítve
|
|
- Interpoláció támogatás: delete confirmációk, penalty/reward sikerüzenetek, paraméter frissítés üzenetek
|
|
- **Gitea #341:** ✅ Elkészült
|
|
|
|
## 2026-06-29 - Debug: JSON Parse Error javítás (Gitea #341 utómunka)
|
|
|
|
### 🐛 Hiba
|
|
Nuxt runtime error: `[plugin json] i18n/locales/hu.json: Could not parse JSON file` — a build után a böngészőben JSON parse hiba lépett fel.
|
|
|
|
### 🔧 Javított hibák
|
|
1. **hu.json (line 377):** `'{"type": "service_submission", ...}'` — a JSON string értékeknél aposztróf (`'`) helyett dupla idézőjel (`"`) kell, escape-elve: `"{\"type\": \"service_submission\", ...}"`
|
|
2. **en.json (line 377):** Ugyanez a hiba — aposztróf használata JSON stringben
|
|
3. **hu.json (truncated):** A fájl csonkán íródott ki — hiányzott a `seasons`, `users`, `user_detail` szekció és a záró `}}}`
|
|
|
|
### ✅ Eredmény
|
|
- Mindkét JSON fájl validálva Python `json.load()`-dal: ✅ Sikeres
|
|
- Build: ✅ Sikeres (`✓ built in 6.88s`)
|
|
- Mind a 12 gamification i18n szekció elérhető mindkét nyelvben
|
|
|
|
## 2026-06-30 - [#342] Backend i18n helper megírása (app/core/i18n.py)
|
|
|
|
### 🎯 Cél
|
|
Backend i18n segédosztály létrehozása a `backend/static/locales/*.json` fájlok betöltésére és kulcs alapú szöveg lekérésre.
|
|
|
|
### 🔧 Módosított fájlok
|
|
- `backend/app/core/i18n.py` - Teljes átírás: JSON fájlokból cache-elt szótár építése, dot-notation kulcsfeloldás, `{{variable}}` interpoláció, context locale integráció, EN fallback, `reload_locales()` támogatás
|
|
|
|
### ✅ Eredmények
|
|
- `t(key, lang, **kwargs)` - Dot-notation kulcsfeloldás és `{{variable}}` interpoláció
|
|
- `get_locale(lang)` - Teljes nyelvi szótár visszaadása
|
|
- `reload_locales()` - Cache újratöltés futásidőben
|
|
- Locale detekció: explicit `lang` param → context locale (I18nMiddleware) → `"hu"` default
|
|
- Fallback lánc: requested lang → EN → bármely elérhető nyelv → kulcsnév
|
|
- 10/10 teszt sikeres (EN, HU, változók, fallback, context, reload)
|
|
|
|
## 2026-06-30 - [#345] Fázis 6/7: Kvíz tartalom kiszervezése JSON/DB-be nyelvi kulcsokkal
|
|
|
|
### 🎯 Cél
|
|
A keménykódolt magyar nyelvű kvíz kérdések, válaszok és magyarázatok kiszervezése a kódból nyelvi JSON fájlokba.
|
|
|
|
### 🔧 Módosított fájlok
|
|
- `backend/static/quiz/en.json` - **LÉTREHOZVA**: Angol nyelvű kvíz kérdések (3 db) JSON formátumban
|
|
- `backend/static/quiz/hu.json` - **LÉTREHOZVA**: Magyar nyelvű kvíz kérdések (3 db) JSON formátumban
|
|
- `backend/app/core/i18n.py` - **MÓDOSÍTVA**: `get_quiz_data()`, `reload_quiz_data()` függvények hozzáadva a kvíz JSON-ek cache-elt betöltéséhez
|
|
- `backend/app/api/v1/endpoints/gamification.py` - **MÓDOSÍTVA**: `GET /quiz/questions` és `POST /quiz/answer` végpontok hardcoded adatainak kiváltása `get_quiz_data()` hívásokkal
|
|
|
|
### ✅ Eredmények
|
|
- `get_quiz_data(lang)` - Kvíz kérdések betöltése nyelv szerinti JSON fájlokból, locale detekcióval (explicit lang → context locale → "hu" default → EN fallback)
|
|
- `reload_quiz_data()` - Kvíz cache újratöltés futásidőben
|
|
- 3 kvíz kérdés mindkét nyelven (HU + EN), minden opcióval és magyarázattal
|
|
- Szintaxis ellenőrzés: ✅ Sikeres
|
|
- Kvíz adatbetöltés teszt: ✅ Sikeres (HU: 3, EN: 3, DE fallback: 3)
|
|
|
|
## 2026-06-30 - [#346] Fázis 7/7: Tesztelés - magyar és angol nyelvű gamification felület
|
|
|
|
### 🎯 Cél
|
|
A gamification i18n migráció teljes körű tesztelése: backend API lokalizált hibaüzenetek, kvíz rendszer nyelvfüggő működése, achievement címek nyelvfüggő megjelenítése, nyelvváltás konzisztencia, hiányzó fordítás fallback viselkedés, frontend build ellenőrzés.
|
|
|
|
### 🔧 Eredmények
|
|
|
|
**1. BACKEND E2E TESZTEK (Admin Gamification):** ✅ 40/40 PASS
|
|
- Point Rules CRUD: ✅ 5/5
|
|
- Level Configs CRUD: ✅ 5/5
|
|
- Badges CRUD: ✅ 5/5
|
|
- Seasons CRUD: ✅ 5/5
|
|
- Competitions CRUD: ✅ 5/5
|
|
- User Stats: ✅ 4/4
|
|
- Master Config: ✅ 2/2
|
|
- System Params: ✅ 2/2
|
|
- Points Ledger: ✅ 2/2
|
|
- Permission Check: ✅ 3/3
|
|
- Dashboard Summary: ✅ 2/2
|
|
|
|
**2. BACKEND I18N API TESZTEK:** ✅ 15/15 PASS
|
|
- Localized Error Messages (HU/EN): ✅ 4/4
|
|
- Quiz Language-Dependent Operation: ✅ 3/3
|
|
- Achievement Titles Language Display: ✅ 1/1
|
|
- Language Switch Consistency: ✅ 4/4
|
|
- Missing Translation Fallback: ✅ 3/3
|
|
|
|
**3. FRONTEND ADMIN BUILD:** ✅ Sikeres
|
|
- Nuxt 3 build: 313 modules transformed, 7.96s client + 6.71s server
|
|
|
|
**4. FRONTEND I18N ELLENŐRZÉS:** ✅ 11/11 oldal
|
|
- Minden gamification admin oldal használja a `useI18n().t()` függvényt
|
|
- en.json (817 sor) és hu.json (719 sor) teljes gamification szekcióval
|
|
|
|
### 🔧 Módosított fájlok
|
|
- `backend/tests/e2e/test_gamification_i18n_api.py` - Login fix: `json=` → `data=` (OAuth2PasswordRequestForm kompatibilitás)
|