Files
service-finder/.roo/history.md
2026-06-30 08:56:55 +00:00

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 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-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

    1. sor: admin.id helyett current_user.id (az admin változó sosem volt definiálva)

3. Rossz SecurityAuditLog mezőnevek a penalty endpointban (464-471. sor)

  • user_id=current_user.idactor_id=current_user.id
  • target_user_id=user_idtarget_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()-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-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ó 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 - 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 - 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-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 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 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)