31 KiB
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 timport hozzáadvabackend/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 routersikeres - 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ásokfrontend_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ésfeature_capabilitiesmezők hozzáadva a SubscriptionTierResponse, SubscriptionTierCreate, SubscriptionTierUpdate modellekhezbackend/app/api/v1/endpoints/admin_packages.py- create/update végpontok frissítve az új mezők kezelésérefrontend_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ásfrontend_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-ban
logger.error()hívás volt a fájlban (483. sor), deimport loggingnem szerepelt- Javítás:
import loggingéslogger = logging.getLogger("admin-endpoints")hozzáadva
2. Undefined variable admin a approve_action endpointban
-
- sor:
admin.idhelyettcurrent_user.id(azadminváltozó sosem volt definiálva)
- sor:
3. Rossz SecurityAuditLog mezőnevek a penalty endpointban (464-471. sor)
user_id=current_user.id→actor_id=current_user.idtarget_user_id=user_id→target_id=user_iddetails="..."→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 acurrent_levelmező helyesen létezik - A valódi hiba a
SecurityAuditLoglétrehozásánál volt, de araise eminta aprocess_activity()-ben elnyelte a belső traceback-et - Stratégiai debug logging segítségével sikerült lokalizálni a valódi hibát
.pyccache 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_logsbejegyzésaction="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-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 - submit-service végpont hibák:
- Hiányzó
loggerimport hozzáadva (import logging,logger = logging.getLogger("gamification-endpoints")) metadata={...}→provided_fields={...}javítás (aUserContributionmodellbenprovided_fieldsa 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 - master-config végpont javítás:
system_service.get_setting()→system_service.get_scoped_parameter()(aSystemService-ben nincsget_settingmetódus)system_service.set_setting()→system_service.set_scoped_parameter()ugyanezen okból
3. system_service.py - set_scoped_parameter upsert logika javítás:
- Az eredeti
ON CONFLICT ON CONSTRAINT uix_param_scopenem működöttscope_id IS NULLeseté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_leveloszlop típusa átállítva custom PostgreSQL enum-rólVARCHAR(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 sidebarmenuGroupstö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ásokseasons.vue,competitions.vue— Események & Szezonokusers/index.vue,users/[id].vue— Felhasználói statisztikákleaderboard.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-summaryvé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_ledgervégpont javítva:user_namemező hozzáadva (User.email JOIN-nel)datetime.utcnow()→datetime.now(timezone.utc)deprecation fix
- Új
frontend_admin/pages/gamification/index.vue:- API hívás átirányítva a dedikált
/api/v1/admin/gamification/dashboard-summaryvégpontra - Leaderboard adatok mapping-je kiegészítve:
username/current_level/total_xpmezők támogatása a backend válaszhoz igazodva
- API hívás átirányítva a dedikált
- 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_frontendkonté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-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ésfrontend_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.pyrouter 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/leaderboardvégpont hozzáadva azadmin_gamification.pyfá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
onclausea Person join-nál azAmbiguousForeignKeysErrorelkerülésére (User↔Person bidirekcionális FK) or_import hozzáadva a SQLAlchemy import sorhoz
2. FRONTEND - Leaderboard oldal: ✅
leaderboard.vueteljes 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:
config.vue— GAMIFICATION_MASTER_CONFIG JSON szerkesztő hatás kalkulátorralparameters.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égpontrafrontend_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_searchparaméter hozzáadása aGET /admin/gamification/points-ledgervé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
- Point Rules CRUD - Create, List, Update, Delete (soft-delete), Duplicate 409
- Level Configs CRUD - Create, List, Update, Duplicate 409
- Badges CRUD - Create, List, Update, Delete (hard-delete), Duplicate
- Seasons CRUD + Activation - Create, List, Update, Activate, Single active verification
- Competitions CRUD - Create, List, Update, Non-existent season 404
- User Stats - List, Detail (404), Reward, Penalty, Update
- Master Config - Get, Update, Verify
- System Params - List, Update
- Points Ledger - List, Pagination, Reason search, User filter
- Permission Check - Regular user without gamification:manage gets 403
- 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ésbackend/static/locales/*.jsonfá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 agamificationszekció 11 al-szekcióval (dashboard, badges, competitions, config, leaderboard, ledger, levels, parameters, point_rules, seasons, users)frontend_admin/locales/hu.json— Hozzáadva agamificationszekció 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 stringt('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
- 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\", ...}" - en.json (line 377): Ugyanez a hiba — aposztróf használata JSON stringben
- hu.json (truncated): A fájl csonkán íródott ki — hiányzott a
seasons,users,user_detailszekció é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ásareload_locales()- Cache újratöltés futásidőben- Locale detekció: explicit
langparam → 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átumbanbackend/static/quiz/hu.json- LÉTREHOZVA: Magyar nyelvű kvíz kérdések (3 db) JSON formátumbanbackend/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éhezbackend/app/api/v1/endpoints/gamification.py- MÓDOSÍTVA:GET /quiz/questionsésPOST /quiz/answervégpontok hardcoded adatainak kiváltásaget_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)