132 lines
7.3 KiB
Markdown
132 lines
7.3 KiB
Markdown
# Gamification Penalty System — Adatbázis Felderítési Jelentés
|
|
|
|
**Dátum:** 2026-06-17
|
|
**Cél:** A 3-szintű Büntetési Mátrix (Penalty System) és Árnyéktiltás (Shadowban) bevezetésének adatbázis-struktúra előfeltérképezése
|
|
|
|
---
|
|
|
|
## 1. FELADAT: Büntetési Szint (Penalty Level) — Meglévő Struktúra
|
|
|
|
### ✅ Megállapítás: A büntetési infrastruktúra NAGYRÉSZT KÉSZ
|
|
|
|
A Vezető Tervező örömére: a rendszer **már tartalmazza** a büntetési pontrendszer alapjait. Az alábbi táblák és mezők **már léteznek** az adatbázisban és a modellekben:
|
|
|
|
#### backend/app/models/gamification/gamification.py
|
|
|
|
| Tábla (séma) | Mező | Típus | Státusz |
|
|
|---|---|---|---|
|
|
| gamification.user_stats | penalty_points | Integer (server_default=0) | ✅ Létezik |
|
|
| gamification.user_stats | restriction_level | Integer (server_default=0) | ✅ Létezik |
|
|
| gamification.user_stats | penalty_quota_remaining | Integer (default=3) | ✅ Létezik |
|
|
| gamification.user_stats | banned_until | DateTime(timezone=True) | ✅ Létezik |
|
|
| gamification.user_stats | current_level | Integer (default=1) | ✅ Létezik |
|
|
| gamification.level_configs | level_number | Integer (unique) | ✅ Létezik (támogat negatív értékeket!) |
|
|
| gamification.level_configs | is_penalty | Boolean (default=False) | ✅ Létezik |
|
|
| gamification.level_configs | min_points | Integer | ✅ Létezik |
|
|
| gamification.level_configs | rank_name | String | ✅ Létezik |
|
|
| gamification.points_ledger | penalty_change | Integer (server_default=0) | ✅ Létezik |
|
|
| identity.persons | penalty_points | Integer (default=-1) | ✅ Létezik |
|
|
| identity.persons | social_reputation | Numeric(3,2) | ✅ Létezik |
|
|
| identity.persons | lifetime_xp | BigInteger (default=-1) | ✅ Létezik |
|
|
| identity.user_trust_profiles | trust_score | Integer (default=0) | ✅ Létezik |
|
|
| identity.user_trust_profiles | identity_risk_flag | Boolean (default=False) | ✅ Létezik |
|
|
|
|
### ⚠️ HIÁNYZIK: penalty_level (a 3-szintű büntetési mátrix maga)
|
|
|
|
A restriction_level mező hasonló koncepció, de jelenleg nincs dedikált penalty_level (Integer, -1 / -2 / -3) mező.
|
|
|
|
### Javaslat az új mezők helyére
|
|
|
|
A gamification.user_stats táblába érdemes beilleszteni:
|
|
|
|
```
|
|
PenaltyLevel: Integer, server_default=0 (-1=Figyelmeztetés, -2=Korlátozás, -3=Árnyéktiltás)
|
|
GoodDeedsCount: Integer, server_default=0 (Jóvátételi cselekedetek számlálója)
|
|
ShadowBannedUntil: DateTime(timezone=True), nullable=True (Látszólagos tiltás vége)
|
|
```
|
|
|
|
**Indoklás:** A user_stats tábla már most is tartalmazza a penalty_points, restriction_level, penalty_quota_remaining és banned_until mezőket — ez a természetes helye minden büntetési információnak. A Person tábla (identity.persons) szintén rendelkezik penalty_points mezővel, de ott ez a személy szintű, nem a gamification profil része.
|
|
|
|
---
|
|
|
|
## 2. FELADAT: Hibajelentés (Report) Tábla
|
|
|
|
### ❌ Megállapítás: NINCS dedikált report/abuse tábla
|
|
|
|
Az adatbázisban és a modellek között **NEM található** olyan tábla, amelynek neve report, abuse, flag, ticket, moderation_content vagy data_correction lenne. A PostgreSQL information_schema lekérdezés nulla találatot adott.
|
|
|
|
### Ami KÖZELÍT
|
|
|
|
| Tábla | Kapcsolat | Korlát |
|
|
|---|---|---|
|
|
| marketplace.service_providers | status mező ModerationStatus enumnak | Ez a beküldött szolgáltatók moderálására való, **nem** a visszaélés-jelentésre |
|
|
| marketplace.service_profiles | flagged státusz a ServiceStatus enumban | Szolgáltatók flag-elésére |
|
|
| gamification.user_contributions | contribution_type = 'report_abuse' | Naplózza, hogy ki jelentett, de **nincs dedikált jelentés adattábla** |
|
|
|
|
### Javaslat: Új user_reports tábla létrehozása
|
|
|
|
Javasolt séma a gamification sémában (ahol a user_contributions is van):
|
|
|
|
```
|
|
user_reports tábla (gamification séma):
|
|
- id Integer (PK)
|
|
- reporter_id Integer FK->identity.users.id
|
|
- target_type String(50) ('service_profile', 'review', 'vehicle', 'user')
|
|
- target_id Integer
|
|
- reason_category String(50) ('fake_service', 'wrong_data', 'spam', 'abuse', 'other')
|
|
- description Text (nullable)
|
|
- evidence_data JSONB (nullable)
|
|
- status String(20) default='pending' ('pending','verified','dismissed','action_taken')
|
|
- reviewed_by Integer FK->identity.users.id (nullable)
|
|
- resolution Text (nullable)
|
|
- created_at DateTime
|
|
- resolved_at DateTime (nullable)
|
|
```
|
|
|
|
---
|
|
|
|
## 3. FELADAT: Adminisztrációs Szabályok (System Parameters)
|
|
|
|
### ✅ Megállapítás: A rendszer RENDELKEZIK dinamikus paraméter táblával
|
|
|
|
A system.system_parameters tábla **már létezik** és kifejezetten alkalmas a büntetési szabályok adminisztrációjára.
|
|
|
|
| Oszlop | Típus | Leírás |
|
|
|---|---|---|
|
|
| key | VARCHAR | Paraméter kulcs (pl. penalty_level_1_quota) |
|
|
| category | VARCHAR | Kategorizálás (pl. penalty_system) |
|
|
| value | JSONB | A paraméter értéke (JSON, bármi lehet) |
|
|
| scope_level | VARCHAR | Hatáskör: global, country, region, organization, user |
|
|
| scope_id | VARCHAR | A hatáskör azonosítója |
|
|
| is_active | BOOLEAN | Aktív-e |
|
|
| description | VARCHAR | Emberi leírás |
|
|
|
|
### Javasolt paraméterkulcsok a büntetési rendszerhez
|
|
|
|
| key | category | value (JSON) |
|
|
|---|---|---|
|
|
| penalty_level_1_threshold | penalty_system | {"min_bad_actions": 2, "quota_reduction": 1} |
|
|
| penalty_level_2_threshold | penalty_system | {"min_bad_actions": 5, "xp_multiplier": 0.5} |
|
|
| penalty_level_3_threshold | penalty_system | {"min_bad_actions": 10, "shadowban": true, "max_actions_per_day": 1} |
|
|
| penalty_action_points | penalty_system | {"fake_service_submission": 10, "fake_review": 15, "spam_comment": 5} |
|
|
| penalty_good_deed_recovery | penalty_system | {"points_per_good_deed": -3, "max_recovery_per_day": 1} |
|
|
|
|
> **Előny:** A scope_level oszlop lehetővé teszi, hogy **ország-specifikus** vagy akár **felhasználó-specifikus** büntetési szabályokat állítsunk be, anélkül hogy a kódot módosítani kellene.
|
|
|
|
---
|
|
|
|
## Összefoglaló táblázat
|
|
|
|
| Feladat | Státusz | Megjegyzés |
|
|
|---|---|---|
|
|
| **1. Büntetési szint helye** | ✅ **Alap infrastruktúra kész** | user_stats.penalty_points, restriction_level, penalty_quota_remaining, banned_until, level_configs.is_penalty — mind létezik. HIÁNYZIK: dedikált penalty_level és good_deeds_count mező |
|
|
| **2. Hibajelentés tábla** | ❌ **NINCS** | Egyetlen dedikált report/abuse tábla sem létezik. A user_contributions.contribution_type = 'report_abuse' csak naplóz, nem tárol jelentéseket. **Teljesen új tábla kell** |
|
|
| **3. Adminisztrációs szabályok** | ✅ **Alkalmas** | system.system_parameters JSONB-alapú, scoped paraméter tábla kiválóan megfelel a dinamikus szabályok tárolására. Új paramétereket kell csak beszúrni |
|
|
|
|
## Következő lépések (ajánlott sorrend)
|
|
|
|
1. **Új mezők hozzáadása** gamification.user_stats-hoz: penalty_level, good_deeds_count, shadow_banned_until
|
|
2. **Új tábla létrehozása:** gamification.user_reports (vagy gamification.content_reports)
|
|
3. **Rendszerparaméterek feltöltése:** system.system_parameters büntetési szabályokkal
|
|
4. **Penalty Engine service** megírása, ami a level_configs táblából és a system_parameters-ből olvassa a szabályokat, és automatikusan lépteti a penalty_level-et
|