Files
service-finder/plans/logic_spec_gamification_admin_integration.md
2026-06-29 14:11:15 +00:00

16 KiB

🏗️ Gamification Admin Integration — Rendszerszintű Terv

1. Küldetés és Cél

Mérföldkő: Master Book 2.0 — Gamification Pro (MILESTONE_8) Cél: A meglévő Gamification backend (modellek, service-ek, API végpontok) teljes admin felületre történő bekötése, egy új, dedikált "Gamification" menüpont alatt az admin Nuxt frontendben.


2. Jelenlegi Rendszer Állapota (Audit Summary)

2.1 Adatbázis Modellek (gamification séma)

Tábla Státusz Fejlettség
point_rules Létezik Alap (action_key, points, description, is_active)
level_configs Létezik Alap (level_number, min_points, rank_name, is_penalty)
points_ledger Létezik Teljes (user_id, points, penalty_change, reason)
user_stats Létezik Teljes (XP, szint, penalty, restriction, quota, helyek)
badges Létezik Alap (name, description, icon_url)
user_badges Létezik Kapcsolótábla
user_contributions Létezik Fejlett (type, entity, status, fingerprint)
seasons Létezik Alap (name, start, end, is_active)
seasonal_competitions Létezik Részleges (JSONB rules)
competitions Létezik gamification sémában
user_competition_scores Létezik Pontszámok

Hiányzó mezők a modellekből:

  • UserStats-ból hiányzik: services_submitted, total_points (a gamification.py endpointok használják, de a modellben nincs definiálva!)
  • PointsLedger-ből hiányzik: xp mező, source_type, source_id (a gamification.py endpoint használja, de a modellben nincs!)

2.2 GamificationService

Teljes, jól működő service:

  • process_activity() — Pontozás + büntetés szűrés + szintszámítás + kifizetés
  • _apply_penalty() — Büntetőpontok és restriction_level kezelése
  • _calculate_multiplier() — Dinamikus szorzó L0-L3 között
  • _handle_level_up() — Kredit jutalom minden 10. szintnél
  • _add_earned_credits() — Wallet + FinancialLedger integráció

Figyelem: A service master configot a SystemParameter táblából GAMIFICATION_MASTER_CONFIG kulccsal olvassa. Ez már admin által módosítható, de nincs hozzá admin UI!

2.3 API Végpontok

Végpont Metódus Státusz Megjegyzés
/gamification/me GET UserStatResponse
/gamification/my-stats GET Saját statok
/gamification/leaderboard GET Top lista
/gamification/seasons GET Szezonok
/gamification/seasons/active GET Aktív szezon
/gamification/my-contributions GET Hozzájárulások
/gamification/season-standings/{id} GET Szezon állás
/gamification/self-defense-status GET Önvédelmi rendszer
/gamification/submit-service POST Szerviz beküldés
/gamification/badges GET Összes badge
/gamification/my-badges GET Saját badge-ek
/gamification/badges/award/{id} POST Badge adományozás
/gamification/achievements GET Achievement progress
/gamification/quiz/* GET/POST Napi kvíz
/admin/users/{id}/penalty PATCH ⚠️ HIÁNYOS! Nem használja a GamificationService-t, direktül módosítja a level mezőt!

2.4 Admin Frontend

A layouts/default.vue menüpontjai:

  • Központ → Dashboard
  • Felhasználók & Partnerek → Garázsok, Felhasználók, Személyek
  • Pénzügyek → Csomagok
  • Rendszer → Jogosultságok, Rendszernaplók

NINCS Gamification menüpont!


3. Komplex Terv — Gamification Admin Bekötése

3.1 Backend Új Végpontok (Admin API)

Új router: backend/app/api/v1/endpoints/admin_gamification.py

Létrehozandó végpontok:

# ==================== POINT RULES ====================
GET    /admin/gamification/point-rules          # Összes pontszabály listázása
POST   /admin/gamification/point-rules          # Új pontszabály létrehozása
PUT    /admin/gamification/point-rules/{id}     # Pontszabály módosítása
DELETE /admin/gamification/point-rules/{id}     # Pontszabály törlése (soft)

# ==================== LEVEL CONFIGS ====================
GET    /admin/gamification/level-configs        # Szintkonfigurációk listázása
POST   /admin/gamification/level-configs        # Új szint létrehozása
PUT    /admin/gamification/level-configs/{id}   # Szint módosítása

# ==================== BADGES ====================
GET    /admin/gamification/badges               # Összes badge listázása
POST   /admin/gamification/badges               # Új badge létrehozása
PUT    /admin/gamification/badges/{id}          # Badge módosítása
DELETE /admin/gamification/badges/{id}          # Badge törlése

# ==================== SEASONS ====================
GET    /admin/gamification/seasons              # Szezonok listázása
POST   /admin/gamification/seasons              # Új szezon létrehozása
PUT    /admin/gamification/seasons/{id}         # Szezon módosítása
POST   /admin/gamification/seasons/{id}/activate # Szezon aktiválása

# ==================== COMPETITIONS ====================
GET    /admin/gamification/competitions          # Versenyek listázása
POST   /admin/gamification/competitions          # Új verseny
PUT    /admin/gamification/competitions/{id}     # Verseny módosítása

# ==================== USER STATS ADMIN ====================
GET    /admin/gamification/user-stats           # Összes felhasználói stat (szűrhető)
GET    /admin/gamification/user-stats/{user_id} # Egy felhasználó statjai
PUT    /admin/gamification/user-stats/{user_id} # Statisztika manuális módosítása
POST   /admin/gamification/user-stats/{user_id}/penalty  # Büntetés (GamificationService-en keresztül!)
POST   /admin/gamification/user-stats/{user_id}/reward   # Jutalom (GamificationService-en keresztül!)

# ==================== MASTER CONFIG ====================
GET    /admin/gamification/master-config        # GAMIFICATION_MASTER_CONFIG lekérése
PUT    /admin/gamification/master-config        # GAMIFICATION_MASTER_CONFIG módosítása

# ==================== SYSTEM PARAMETERS (gamification scope) ====================
GET    /admin/gamification/system-params        # Gamification kategóriájú rendszerparaméterek
PUT    /admin/gamification/system-params/{key}  # Rendszerparaméter módosítása

# ==================== AUDIT / HISTORY ====================
GET    /admin/gamification/points-ledger        # Pontnapló (szűrhető user_id, date range)
GET    /admin/gamification/contributions        # Hozzájárulások listája (admin review)
PUT    /admin/gamification/contributions/{id}/review  # Hozzájárulás jóváhagyása/elutasítása

3.2 Frontend — új Gamification menüpont

3.2.1 Új oldalak

frontend_admin/pages/gamification/
├── index.vue              # Gamification Dashboard (áttekintő)
├── point-rules.vue        # Pontszabályok CRUD
├── levels.vue             # Szint konfigurációk
├── badges.vue             # Badge-ek kezelése
├── seasons.vue            # Szezonok kezelése
├── competitions.vue       # Versenyek kezelése
├── users.vue              # Felhasználói statisztikák listája
├── users/[id].vue         # Egy felhasználó részletes gamification adatai
├── leaderboard.vue        # Ranglista admin nézet
├── config.vue             # Master config szerkesztése
├── parameters.vue         # Gamification rendszerparaméterek
└── ledger.vue             # Pontnapló böngészése

3.2.2 Menüpont beszúrása

A frontend_admin/layouts/default.vue menuGroups tömbjébe új csoport:

{
  title: 'Gamification',
  items: [
    {
      path: '/gamification',
      label: 'Gamification HQ',
      icon: '<svg...trophy icon...>',
    },
    {
      label: 'Játékmenet Beállítások',
      icon: '<svg...settings icon...>',
      children: [
        { path: '/gamification/point-rules', label: 'Pontszabályok', icon: '...' },
        { path: '/gamification/levels', label: 'Szintek', icon: '...' },
        { path: '/gamification/badges', label: 'Kitüntetések', icon: '...' },
      ],
    },
    {
      label: 'Események & Szezonok',
      icon: '<svg...calendar icon...>',
      children: [
        { path: '/gamification/seasons', label: 'Szezonok', icon: '...' },
        { path: '/gamification/competitions', label: 'Versenyek', icon: '...' },
      ],
    },
    {
      label: 'Felhasználói Adatok',
      icon: '<svg...users icon...>',
      children: [
        { path: '/gamification/users', label: 'Statisztikák', icon: '...' },
        { path: '/gamification/leaderboard', label: 'Ranglista', icon: '...' },
        { path: '/gamification/ledger', label: 'Pontnapló', icon: '...' },
      ],
    },
    {
      path: '/gamification/config',
      label: 'Rendszer Konfig',
      icon: '<svg...config icon...>',
    },
    {
      path: '/gamification/parameters',
      label: 'Rendszerparaméterek',
      icon: '<svg...params icon...>',
    },
  ],
}

3.3 Séma Javítások (Adatbázis)

A UserStats modellt ki kell egészíteni:

# HIÁNYZÓ MEZŐK - hozzáadandó:
services_submitted: Mapped[int] = mapped_column(Integer, default=0, server_default=text("0"))
total_points: Mapped[int] = mapped_column(Integer, default=0, server_default=text("0"))

A PointsLedger modellt ki kell egészíteni:

# HIÁNYZÓ MEZŐK - hozzáadandó:
xp: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
source_type: Mapped[Optional[str]] = mapped_column(String(50), nullable=True)
source_id: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)

3.4 Business Logic Javítások

  1. A meglévő PATCH /admin/users/{user_id}/penalty végpontot át kell írni, hogy a GamificationService process_activity() metódusát használja is_penalty=True paraméterrel, ne direkt level módosítást végezzen.

  2. A gamification.py endpointok (submit-service, quiz/answer, badges/award) direktül módosítják a UserStats mezőket a GamificationService helyett — ezeket is át kell írni.

  3. A GamificationService.process_activity() jelenleg csak a GAMIFICATION_MASTER_CONFIG-ot használja. Ki kell egészíteni, hogy a point_rules táblából is olvasson.


4. UI Komponensek Terve

4.1 Gamification Dashboard (/gamification/index.vue)

  • Kártyák: Összes felhasználó (UserStats count), Aktív szezon, Függő contribution-ök, Ma szerzett XP
  • Grafikonok: Napi XP trend (utolsó 30 nap), Szint eloszlás, Pontszabályok aktivitása
  • Táblák: Legutóbbi PointsLedger bejegyzések, Top 5 leaderboard

4.2 Pontszabályok (/gamification/point-rules.vue)

  • DataTable: action_key, points, description, is_active
  • CRUD: Inline szerkeszthető sorok, új sor hozzáadása
  • Keresés/Szűrés: action_key alapján

4.3 Szintek (/gamification/levels.vue)

  • DataTable: level_number, min_points, rank_name, is_penalty
  • Vizuális: Szintlépés fa diagram (Mermaid vagy Vue komponens)

4.4 Kitüntetések (/gamification/badges.vue)

  • Grid: Badge kártyák nézet (ikon, név, leírás)
  • CRUD: Badge létrehozás/szerkesztés, ikon feltöltés
  • Felhasználók: Badge kiosztása felhasználónak

4.5 Szezonok (/gamification/seasons.vue)

  • Timeline: Szezonok idővonal nézetben
  • CRUD: Új szezon, dátumok, aktív státusz
  • Zárás: Szezon lezárása automatikus jutalom kiosztással

4.6 Felhasználói Statisztikák (/gamification/users.vue + users/[id].vue)

  • Lista: UserStats tábla adatai (user, XP, level, penalty)
  • Részletek: Részletes gamification profil, pontnapló, badge-ek, contribution-ök
  • Műveletek: Büntetés, Jutalom, Stat reset (auditáltan)

4.7 Ranglista (/gamification/leaderboard.vue)

  • Tábla: Top 100 felhasználó ranglétrája
  • Szűrés: Szezonális / Globális váltás

4.8 Master Config (/gamification/config.vue)

  • JSON Editor: GAMIFICATION_MASTER_CONFIG szerkesztése validált JSON mezőkkel
    • xp_logic — base_xp, exponent
    • penalty_logic — recovery_rate, thresholds, multipliers
    • conversion_logic — social_to_credit_rate
    • level_rewards — credits_per_10_levels
  • Előnézet: Hatás kalkulátor (sliderekkel)

5. Engedélyezés (RBAC)

Minden admin gamification végponthoz gamification:manage permission kell:

Depends(deps.RequirePermission("gamification:manage"))

A meglévő fix_phantom_permissions.py script már tartalmazza ezt a permission-t.


6. Adatfolyam Diagram

flowchart TD
    A[Admin User] -->|Böngésző| B[Nuxt Admin Frontend]
    B -->|HTTP /admin/gamification/*| C[FastAPI Admin Gateway]
    
    C --> D[admin_gamification.py Router]
    D --> E{GamificationService}
    D --> F[Direct CRUD]
    
    E --> G[(gamification schema)]
    F --> G
    
    G --> H[point_rules]
    G --> I[level_configs]
    G --> J[user_stats]
    G --> K[points_ledger]
    G --> L[badges]
    G --> M[seasons]
    G --> N[seasonal_competitions]
    G --> O[user_contributions]
    
    subgraph "Biztonsági Réteg"
        P[gamification:manage permission]
        Q[SecurityAuditLog minden művelethez]
    end
    
    C --> P
    D --> Q

7. Implementációs Sorrend (Gitea Kártyák)

# Kártya Név Scope Függőség Becsült komplexitás
1 Adatbázis: Gamification modell javítások (UserStats, PointsLedger) Database Nincs Közepes
2 Backend: Új admin_gamification.py router létrehozása Backend 1 Magas
3 Backend: GamificationService refaktor (point_rules integráció) Backend 1 Magas
4 Backend: Meglévő penalty endpoint javítása Backend 2, 3 Alacsony
5 Backend: gamification.py endpointok GamificationService-re átállítása Backend 3 Közepes
6 Frontend: Gamification menüpont + routing Frontend 2 Alacsony
7 Frontend: Gamification Dashboard oldal Frontend 6 Közepes
8 Frontend: Pontszabályok + Szintek CRUD Frontend 6 Közepes
9 Frontend: Kitüntetések (Badge) kezelő Frontend 6 Közepes
10 Frontend: Szezonok + Versenyek kezelő Frontend 6 Magas
11 Frontend: Felhasználói statisztikák + büntetés/jutalom Frontend 6 Magas
12 Frontend: Ranglista admin nézet Frontend 6 Alacsony
13 Frontend: Master Config szerkesztő Frontend 6 Közepes
14 Frontend: Pontnapló böngésző Frontend 6 Közepes
15 Tesztelés: Gamification admin E2E tesztek Backend+Frontend 2-14 Magas

8. Használt Technológiák

  • Backend: FastAPI, SQLAlchemy Async, Pydantic v2
  • Frontend: Nuxt 3, Pinia (state), TailwindCSS, Chart.js (dashboard), vue-json-pretty (config editor)
  • Adatbázis: PostgreSQL gamification séma
  • Auth: JWT + gamification:manage permission

9. Függőségek

  • Bemenet: Meglévő gamification séma (modellek már készen), GamificationService, SystemParameter kezelés
  • Kimenet: Az új admin felület nélkülözhetetlen a gamification rendszer operatív kezeléséhez. Enélkül az admin-ok nem tudják:
    • Módosítani a pontszabályokat
    • Kezelni a büntetéseket (jelenleg direkt SQL/API szinten)
    • Létrehozni szezonokat és versenyeket
    • Felügyelni a felhasználói aktivitást

10. Kockázatok

  1. Adatbázis migráció: A modell javításokhoz sync_engine futtatása szükséges, ami meglévő adatokat is érinthet.
  2. Kompatibilitás: A meglévő gamification.py endpointok direktül módosítják a UserStats mezőket. Az átállásnál óvatos rollover kell.
  3. JSONB konfiguráció: A GAMIFICATION_MASTER_CONFIG JSONB validációja kritikus — hibás JSON letiltja a gamification rendszert.