admin_users_personels

This commit is contained in:
Roo
2026-06-29 14:11:15 +00:00
parent 383e5511b6
commit df4a0f07ff
237 changed files with 17849 additions and 2934 deletions

View File

@@ -950,3 +950,145 @@ A backend `admin_organizations.py` fájlban két külön kódút (Path A és Pat
- Python syntax check: ✅ OK (`py_compile` sikeres)
- Sync engine: 1279 OK, 0 Fixed, 0 Shadow — teljes szinkronban
- A `SubscriptionSummary` most helyesen kapja meg a Base limit értékeket az `_extract_limit()`-en keresztül, mielőtt az Extra allowances hozzáadódnak.
## 2026-06-29 - Gitea #319: Felhasználói trend diagram komponens (EPIC-5, task 5.2)
### 🎯 Cél
Felhasználói regisztrációs trend diagram komponens elkészítése az admin felület users list oldalára.
### 🔧 Változtatások
**1. UserTrendChart.vue komponens létrehozása:** `frontend_admin/components/charts/UserTrendChart.vue`
- Pure SVG bar chart (nincs külső chart library függőség)
- Period selector: 7/14/30/90 nap
- Grid lines, Y-axis labels, hover tooltips
- Trend direction indicator (up/down/stable)
- Summary stats: daily avg, total, trend %
- Loading és empty state kezelés
**2. i18n kulcsok hozzáadása:** `frontend_admin/locales/hu.json`, `frontend_admin/locales/en.json`
- trend_title, trend_subtitle, trend_7d/14d/30d/90d
- trend_no_data, trend_daily, trend_avg, trend_total, trend_vs_prev
**3. Integrálás a users oldalba:** `frontend_admin/pages/users/index.vue`
- Import: `import UserTrendChart from '~/components/charts/UserTrendChart.vue'`
- Template: `<UserTrendChart :data="stats.registration_trend" :loading="loading" />`
- A stats kártyák és a filter bar közé helyezve
### ✅ Eredmény
- A backend `GET /admin/users/stats` endpoint már létezik és visszaadja a `registration_trend` adatokat
- A frontend build hibátlanul lefutott a `sf_admin_frontend` konténerben
- A komponens automatikusan használja a meglévő `stats.registration_trend` adatokat
## 2026-06-29 - EPIC-6 Task 6.1: i18n Fordítások Felvétele (hu/en) - User & Person Oldalak
### 🎯 Cél
i18n fordítások (hu/en) hozzáadása a frontend_admin user és person kezelő oldalakhoz a [`plans/logic_spec_admin_user_person_management.md`](plans/logic_spec_admin_user_person_management.md) specifikáció alapján (EPIC-6, task 6.1).
### 🔧 Módosított fájlok
- [`frontend_admin/locales/en.json`](frontend_admin/locales/en.json) - Teljes `users` szekció hozzáadva (users.* és users.details.* kulcsok); JSON szintaxis hiba javítva (hiányzó vessző a persons.details után)
- [`frontend_admin/locales/hu.json`](frontend_admin/locales/hu.json) - Teljes `users` szekció hozzáadva magyar fordításokkal; JSON szintaxis hiba javítva
### ✅ Eredmények
- **JSON validáció:** ✅ Sikeres (python3 json.load)
- **Nuxt build:** ✅ Sikeres (6.78s, AdminUsersView chunk: 19.93 kB)
- **Hiányzó kulcsok pótolva:** `users.title`, `users.subtitle`, `users.search_placeholder`, `users.*` (status, role, plan filterek), `users.details.*` (profil, subscription, személyes adatok, tagságok)
- **JSON hiba javítva:** Hiányzó vessző a `persons.details` objektum záró kapcsos zárójele után (224. sor) mindkét locale fájlban
## 2026-06-29 — RBAC Permission Check Implementation (Gitea #321)
### 🎯 Cél
Card #321: "6.2: RBAC permission check implementáció" — Minden admin user/person oldalnak ellenőriznie kell a DB-driven RBAC permissionöket a spec szerint.
### 🔧 Módosított fájlok
- [`frontend_admin/pages/users/index.vue`](frontend_admin/pages/users/index.vue) — `useAuthStore`/`useRouter` importok, `canViewUsers`/`canEditUsers`/`canBanUsers`/`canDeleteUsers` computed property-k, redirect guard `users:view` hiányában, `v-if="canEditUsers"` a bulk actions bar-on és toggle gombokon
- [`frontend_admin/pages/users/[id]/index.vue`](frontend_admin/pages/users/%5Bid%5D/index.vue) — `hasEditPermission` átírva legacy `'user:edit'`-ről (singular) `'users:edit'`-re (plural, spec szerint)
- [`frontend_admin/pages/persons/index.vue`](frontend_admin/pages/persons/index.vue) — `useAuthStore`/`useRouter` importok, `canViewPersons`/`canEditPersons`/`canMergePersons` computed property-k, redirect guard `persons:view` hiányában
- [`frontend_admin/pages/persons/[id]/index.vue`](frontend_admin/pages/persons/%5Bid%5D/index.vue) — `hasEditPermission` egyszerűsítve `!!` koercícióra
### ✅ Verifikáció
- **Nuxt build:** ✅ Sikeres (`docker compose exec sf_admin_frontend npm run build`)
- **Permission kódok:** `users:view`, `users:edit`, `users:ban`, `users:delete`, `persons:view`, `persons:edit`, `persons:merge` — mind implementálva a spec (5.8) szerint
- **Fallback:** Minden computed property `auth.isAdmin`-re esik vissza, ha nincs `system_capabilities`
## 2026-06-29 - Admin Users Filter Buttons Fix (#323)
### 🎯 Cél
Az admin felületen a felhasználók listájában nem működő szűrő gombok (státusz, szerepkör, csomag) javítása.
### 🔧 Módosított fájlok
- **`backend/app/api/v1/endpoints/admin.py`**:
- `plan_filter` query paraméter hozzáadása a `list_users()` végponthoz
- `plan_filter` szűrési logika: `User.subscription_plan == plan_filter.upper()`
- `person_name` mező hozzáadása a válaszhoz (last_name + first_name összefűzés)
- Case-insensitive role matching: `role.upper()` a `UserRole` enumhoz
- **`frontend_admin/pages/users/index.vue`**:
- `status_filter``is_active`/`is_deleted` boolean mapping (switch/case)
- `role_filter``role` paraméter átnevezés
- `plan_filter` paraméter megtartva (backend most már támogatja)
### ✅ Eredmények
- API szintaxis ellenőrzés: ✅ PASS
- API végpont tesztek (7 teszt): ✅ ALL PASS
- Basic list: 34 user, person_name megjelenik
- role=admin (lowercase): 2 admin (case-insensitive)
- role=user (lowercase): 30 user
- is_active=true: 16 aktív
- plan_filter=FREE: 28 FREE csomagos
- Combined (role=user, is_active=true, plan_filter=PREMIUM): 2 találat
- is_deleted=true: 1 törölt
## 2026-06-29 - Architect: Gamification Admin Integration Audit & Gitea Kártyák
### 🎯 Cél
A meglévő Gamification rendszer (backend modellek, service-ek, API végpontok) teljes körű auditálása, komplex specifikáció készítése az admin felületre történő bekötéshez, és 15 Gitea implementációs kártya létrehozása.
### 🔧 Elvégzett Munka
**1. GAMIFICATION RENDSZER AUDIT:**
- Feltárt 10+ adatbázis tábla a `gamification` sémában (point_rules, level_configs, points_ledger, user_stats, badges, user_badges, user_contributions, seasons, seasonal_competitions, competitions, user_competition_scores)
- Azonosított hiányzó mezők: UserStats (services_submitted, total_points), PointsLedger (xp, source_type, source_id)
- Feltárt 14+ meglévő API végpont a `/gamification/*` útvonalon
- Feltárt hibás végpont: `PATCH /admin/users/{id}/penalty` direkt `level` módosítás a GamificationService helyett
- Feltárt 3 business logic probléma (szolgáltatáskikerülés, GamificationService bypass)
**2. KOMPLEX SPECIFIKÁCIÓ:**
- Létrehozva: [`plans/logic_spec_gamification_admin_integration.md`](plans/logic_spec_gamification_admin_integration.md)
- 30+ új admin API endpoint terv az `admin_gamification.py` routerben
- 12 új frontend oldal terv a `frontend_admin/pages/gamification/` mappában
- Új Gamification menücsoport terv 6 menüponttal
- Adatbázis séma javítások (UserStats, PointsLedger)
- Business logic javítások (penalty endpoint, GamificationService bypass)
- RBAC: `gamification:manage` permission
- Adatfolyam diagram (Mermaid)
- 15 implementációs kártya prioritási sorrenddel és függőségekkel
**3. GITEA KÁRTYÁK LÉTREHOZÁSA:**
15 kártya a `Epic 8 Gamification 2.0, Verseny és Önvéde` mérföldkő alatt:
| # | ID | Kártya Név | Scope |
|---|----|-----------|-------|
| 1 | #324 | Adatbázis: Gamification modell javítások (UserStats, PointsLedger) | Database |
| 2 | #325 | Backend: Új admin_gamification.py router (30+ admin végpont) | Backend |
| 3 | #326 | Backend: GamificationService refaktor (point_rules integráció) | Backend |
| 4 | #327 | Backend: Meglévő PATCH /admin/users/{id}/penalty endpoint javítása | Backend |
| 5 | #328 | Backend: gamification.py endpointok GamificationService-re átállítása | Backend |
| 6 | #329 | Frontend: Gamification menüpont + routing az admin Nuxt felületben | Frontend |
| 7 | #330 | Frontend: Gamification Dashboard oldal (/gamification/index.vue) | Frontend |
| 8 | #331 | Frontend: Pontszabályok + Szintek CRUD oldalak | Frontend |
| 9 | #332 | Frontend: Kitüntetések (Badge) kezelő oldal | Frontend |
| 10 | #333 | Frontend: Szezonok + Versenyek kezelő oldalak | Frontend |
| 11 | #334 | Frontend: Felhasználói statisztikák + büntetés/jutalom oldalak | Frontend |
| 12 | #335 | Frontend: Ranglista admin nézet (leaderboard.vue) | Frontend |
| 13 | #336 | Frontend: Master Config szerkesztő és Rendszerparaméterek oldalak | Frontend |
| 14 | #337 | Frontend: Pontnapló böngésző oldal (ledger.vue) | Frontend |
| 15 | #338 | Tesztelés: Gamification admin E2E tesztek | Backend+Frontend |
### 📂 Létrehozott fájlok
- [`plans/logic_spec_gamification_admin_integration.md`](plans/logic_spec_gamification_admin_integration.md) (373 sor)
### ⚠️ Feltárt kockázatok
1. UserStats modellből hiányzó mezők runtime hibát okozhatnak a meglévő gamification.py endpointokban
2. A PATCH /admin/users/{id}/penalty végpont a `gamification.level` nem létező mezőt módosítja
3. Több gamification.py végpont direktül módosít UserStats mezőket a GamificationService megkerülésével

View File

@@ -0,0 +1,258 @@
#!/usr/bin/env python3
"""Create all 18 Gitea cards for Admin User & Person Management."""
import subprocess, sys
def run(cmd):
r = subprocess.run(cmd, capture_output=True, text=True)
if r.returncode != 0:
print(f"ERROR: {r.stderr}")
return None
return r.stdout.strip()
# Base command
BASE = ["docker", "exec", "roo-helper", "python3", "/scripts/gitea_manager.py"]
MILESTONE = "Epic 10 (Admin UI) Jegyek Létrehozása"
cards = [
# ===== EPIC-1: Backend User Management =====
{
"title": "1.1: GET /admin/users/{user_id} — Felhasználó részletek endpoint",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** REST végpont létrehozása egy felhasználó összes adatának lekérésére, beleértve Person, Address, Wallet, TrustProfile, OrganizationMembership adatokat.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** Meglévő User, Person, OrganizationMember modellek; Pydantic séma (UserResponse); require_admin függőség
- **Kimenet (Mik támaszkodnak rá):** Frontend user részlet oldal (3.2), user szerkesztés endpoint (1.2)
### 📝 Elemzés
Hiányzó endpoint: GET /admin/users/{user_id}. SQL logika: LEFT JOIN identity.users, identity.persons, identity.addresses, identity.wallets, identity.user_trust_profiles, marketplace.organization_members. Válasz tartalmazza: User alapadatok, Person adatok lakcímmel, Wallet, TrustProfile, Memberships, SystemCapabilities, OrgCapabilities. Helye: backend/app/api/v1/endpoints/admin.py a meglévő list_users endpoint mellett. Authorization: RequirePermission(permissions=['users:view'])""",
"tags": ["Scope: Backend", "Type: Feature"]
},
{
"title": "1.2: PATCH /admin/users/{user_id} — Felhasználó szerkesztése admin által",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** REST végpont admin általi felhasználó módosításhoz. Korlátozott mezők: email, is_active, is_vip, preferred_language, region_code, preferred_currency, subscription_plan, subscription_expires_at, max_vehicles, max_garages, scope_level, scope_id, role_id (csak superadmin), custom_permissions. Person almzők: last_name, first_name, phone, mothers data, birth data, identity_docs.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** GET /admin/users/{user_id} (1.1), Pydantic séma (UserUpdate), require_admin függőség
- **Kimenet (Mik támaszkodnak rá):** Frontend user szerkesztés funkció
### 📝 Elemzés
PATCH végpont a meglévő admin.py-ban. Ellenőrizni kell a rangot (superadmin vs admin). Audit log bejegyzés minden módosításról. Person adatok módosítása opcionális nested JSON-ben.""",
"tags": ["Scope: Backend", "Type: Feature"]
},
{
"title": "1.3: GET /admin/users/stats — Felhasználói statisztikák endpoint",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Dashboard statisztikák a felhasználókról: total_users, active_users, deleted_users, banned_users, new_users_today/week/month, users_by_role, users_by_plan, users_by_language, users_with_person, users_without_person, registration_trend (napi bontás), active_organizations_count, total_memberships.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** User, OrganizationMember modellek; require_admin függőség
- **Kimenet (Mik támaszkodnak rá):** Frontend dashboard (5.1), user lista oldal statisztikai kártyái (3.1)
### 📝 Elemzés
Új GET /admin/users/stats endpoint. SQL aggregációk: COUNT, GROUP BY role/plan/language. Registration trend: DATE(created_at) GROUP BY. JOIN marketplace.organization_members a memberships számhoz.""",
"tags": ["Scope: Backend", "Type: Feature"]
},
{
"title": "1.4: GET /admin/users/{user_id}/memberships — Szervezeti tagságok endpoint",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Egy felhasználó szervezeti tagságainak listázása. Válasz: organization_id, organization_name, role, status, is_permanent, expires_at, invited_email, is_verified.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** GET /admin/users/{user_id} (1.1), OrganizationMember modell
- **Kimenet (Mik támaszkodnak rá):** Frontend user részlet oldal Memberships tab (3.2)
### 📝 Elemzés
Új GET /admin/users/{user_id}/memberships endpoint. JOIN marketplace.organization_members ON user_id, majd JOIN fleet.organizations ON organization_id a névhez.""",
"tags": ["Scope: Backend", "Type: Feature"]
},
# ===== EPIC-2: Backend Person Management =====
{
"title": "2.1: GET /admin/persons — Person lista endpoint",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Person entitások listázása kereséssel, szűréssel. Paraméterek: search (name, phone, birth data), is_ghost, is_active, has_user, is_merged, skip, limit. Válasz: total, items (id, last_name, first_name, phone, birth_date, is_ghost, is_active, merged_into_id, users_count, active_user, address).
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** Person modell; require_admin függőség
- **Kimenet (Mik támaszkodnak rá):** Frontend Person lista oldal (4.1)
### 📝 Elemzés
Új GET /admin/persons endpoint. SQL: LEFT JOIN identity.users ON person_id (users_count, active_user), LEFT JOIN identity.addresses ON address_id. Szűrés: WHERE is_ghost, is_active, merged_into_id IS NULL/IS NOT NULL.""",
"tags": ["Scope: Backend", "Type: Feature"]
},
{
"title": "2.2: GET /admin/persons/{person_id} — Person részletek endpoint",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Egy Person összes adata, kapcsolódó User-ekkel, szervezeti tagságokkal, tulajdonolt cégekkel, merge history-val.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** GET /admin/persons (2.1), Person modell
- **Kimenet (Mik támaszkodnak rá):** Frontend Person részlet oldal (4.2), Person merge (2.4)
### 📝 Elemzés
GET /admin/persons/{person_id}. Válasz: Person adatok + users lista + address + memberships + owned_business_entities + merged_into (ha merge-elt) + merged_sources (ha ő a cél).""",
"tags": ["Scope: Backend", "Type: Feature"]
},
{
"title": "2.3: PATCH /admin/persons/{person_id} — Person szerkesztése",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Person adatok admin általi módosítása. Szerkeszthető mezők: last_name, first_name, phone, mothers_last_name, mothers_first_name, birth_place, birth_date, identity_docs, ice_contact, is_active, is_ghost. Address almzők is szerkeszthetők.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** GET /admin/persons/{person_id} (2.2), PersonUpdate séma
- **Kimenet (Mik támaszkodnak rá):** Frontend Person szerkesztés funkció
### 📝 Elemzés
PATCH /admin/persons/{person_id}. Audit log bejegyzés. Address rekord frissítése ha változott.""",
"tags": ["Scope: Backend", "Type: Feature"]
},
{
"title": "2.4: POST /admin/persons/{person_id}/merge — Person merge (duplum kezelés)",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Duplum Person-ok összeolvasztása. Body: {source_person_id, keep_source_user}. Logika: (1) Ellenőrizze, hogy mindkét Person létezik és nincs merge-elve. (2) Forrás Person merged_into_id = cél Person ID. (3) Forrás User-ek person_id = cél Person ID. (4) Forrás OrganizationMember person_id = cél Person ID. (5) Audit log.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** GET /admin/persons/{person_id} (2.2), Person modell
- **Kimenet (Mik támaszkodnak rá):** Frontend Person merge UI
### 📝 Elemzés
POST /admin/persons/{target_id}/merge. Tranzakcióban: UPDATE identity.users SET person_id = target WHERE person_id = source. UPDATE marketplace.organization_members SET person_id = target WHERE person_id = source. UPDATE identity.persons SET merged_into_id = target WHERE id = source.""",
"tags": ["Scope: Backend", "Type: Feature"]
},
# ===== EPIC-3: Frontend User List & Detail =====
{
"title": "3.1: users/index.vue — Felhasználói lista oldal (Frontend)",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Felhasználói lista oldal létrehozása a frontend admin felületen. Tartalmaz: statisztikai kártyák sor (összes, aktív, törölt, kitiltott, mai regisztrációk), keresőmező (email, név, telefon), szűrők (státusz, szerepkör, előfizetés), táblázat (ID, Email, Név, Szerepkör, Státusz, Csomag, Regisztráció, Nyelv, Műveletek), tömeges műveletek checkbox-szal.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** GET /admin/users (meglévő), GET /admin/users/stats (1.3)
- **Kimenet (Mik támaszkodnak rá):** Navigációs menü frissítés (3.3)
### 📝 Elemzés
Új fájl: frontend_admin/pages/users/index.vue. API hívás: useFetch('/api/v1/admin/users'). Tömeges művelet: POST /api/v1/admin/users/bulk-action. Statisztikák: GET /api/v1/admin/users/stats. Használja a meglévő api.ts plugint.""",
"tags": ["Scope: Frontend", "Type: Feature"]
},
{
"title": "3.2: users/[id]/index.vue — Felhasználó részlet oldal (Frontend)",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Felhasználó részlet oldal tab-okkal: (1) Áttekintés — alapadatok, státusz, szerepkör. (2) Személyes adatok — Person adatok, lakcím. (3) Pénzügyek — Wallet, előfizetés. (4) Tagságok — szervezeti tagságok. (5) Bizalom — Trust score. (6) Tevékenység — naplózott tevékenységek.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** GET /admin/users/{user_id} (1.1), GET /admin/users/{user_id}/memberships (1.4)
- **Kimenet (Mik támaszkodnak rá):** Szerkesztés funkció
### 📝 Elemzés
Új fájl: frontend_admin/pages/users/[id]/index.vue. API hívás: useFetch('/api/v1/admin/users/{id}'). Tab komponensek: OverviewTab, PersonTab, FinanceTab, MembershipsTab, TrustTab, ActivityTab.""",
"tags": ["Scope: Frontend", "Type: Feature"]
},
{
"title": "3.3: Navigációs menü frissítése — Users & Persons linkek",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Az admin oldalsáv navigációs menüjének frissítése új bejegyzésekkel: 👥 Felhasználók -> /users, ezen belül Felhasználók -> /users/ és Személyek -> /persons/.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** users/index.vue (3.1), persons/index.vue (4.1)
- **Kimenet (Mik támaszkodnak rá):** - (nincs)
### 📝 Elemzés
A meglévő sidebar/layout komponens módosítása. Új nav item-ek hozzáadása a megfelelő ikonokkal és linkekkel.""",
"tags": ["Scope: Frontend", "Type: Feature"]
},
# ===== EPIC-4: Frontend Person List & Detail =====
{
"title": "4.1: persons/index.vue — Person lista oldal (Frontend)",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Person entitások listázása. Kereső: név, telefonszám, születési adatok. Szűrők: ghost státusz, aktív/inaktív, van-e User kapcsolat, merge státusz. Táblázat: ID, Név, Telefon, Születési dátum, User-ek száma, Aktív email, Státusz, Merge státusz, Műveletek.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** GET /admin/persons (2.1)
- **Kimenet (Mik támaszkodnak rá):** Navigációs menü frissítés (3.3)
### 📝 Elemzés
Új fájl: frontend_admin/pages/persons/index.vue. API hívás: useFetch('/api/v1/admin/persons'). Szűrő paraméterek: search, is_ghost, is_active, has_user, is_merged.""",
"tags": ["Scope: Frontend", "Type: Feature"]
},
{
"title": "4.2: persons/[id]/index.vue — Person részlet oldal (Frontend)",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Person részlet oldal: személy adatok, kapcsolódó User-ek listája, cím adatok, szervezeti tagságok, merge információ (forrás/cél), tulajdonolt cégek.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** GET /admin/persons/{person_id} (2.2)
- **Kimenet (Mik támaszkodnak rá):** Person merge UI
### 📝 Elemzés
Új fájl: frontend_admin/pages/persons/[id]/index.vue. API hívás: useFetch('/api/v1/admin/persons/{id}'). Merge gomb ha a Person nincs merge-elve.""",
"tags": ["Scope: Frontend", "Type: Feature"]
},
# ===== EPIC-5: Frontend Statistics & Dashboard =====
{
"title": "5.1: Dashboard statisztika kártyák dinamikus adatokkal",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** A dashboard (index.vue) jelenleg hardcoded statisztikáinak (2,847 Active Users, 12,493 Total Vehicles) lecserélése dinamikus API hívásokra. Felhasználói statisztikák: GET /admin/users/stats. Jármű statisztikák: meglévő asset végpont.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** GET /admin/users/stats (1.3)
- **Kimenet (Mik támaszkodnak rá):** - (nincs)
### 📝 Elemzés
frontend_admin/pages/index.vue módosítása. useFetch('/api/v1/admin/users/stats') a user statisztikákhoz. useFetch('/api/v1/admin/vehicles/stats') a jármű statisztikákhoz.""",
"tags": ["Scope: Frontend", "Type: Feature"]
},
{
"title": "5.2: Felhasználói trend diagram komponens",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Regisztrációs trend diagram a dashboardon. A GET /admin/users/stats registration_trend mezőjéből napi bontású oszlopdiagram megjelenítése az elmúlt 30 napra.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** GET /admin/users/stats (1.3)
- **Kimenet (Mik támaszkodnak rá):** - (nincs)
### 📝 Elemzés
Chart.js vagy egyszerű SVG/CSS alapú diagram komponens. Használhatja a meglévő dashboard layout-ot.""",
"tags": ["Scope: Frontend", "Type: Feature"]
},
# ===== EPIC-6: i18n & Permission Integration =====
{
"title": "6.1: i18n fordítások felvétele (hu/en) — User & Person management",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Új i18n fordítási kulcsok felvétele a hu.json és en.json fájlokba. Kulcsok: users.title, users.search_placeholder, users.filter_role, users.status.active/deleted/banned, users.table.id/email/name/role/status, users.bulk.ban/unban/delete/restore, persons.title, persons.search_placeholder, person.merge.title/confirm/source/target, stats.total_users/active_users/new_today.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** users/index.vue (3.1), persons/index.vue (4.1)
- **Kimenet (Mik támaszkodnak rá):** - (nincs)
### 📝 Elemzés
frontend_admin/locales/hu.json és frontend_admin/locales/en.json frissítése. A Nuxt i18n modul automatikusan betölti.""",
"tags": ["Scope: Frontend", "Type: Feature"]
},
{
"title": "6.2: RBAC permission check implementáció — User & Person oldalakon",
"body": """**Mérföldkő:** Admin User & Person Management
**Cél:** Minden admin user/person oldalon RBAC permission check implementálása a RequirePermission() függőséggel. Permission-ök: users:view, users:edit, users:ban, users:delete, persons:view, persons:edit, persons:merge.
### 🔗 Függőségek (Dependencies)
- **Bemenet (Mikre támaszkodik):** Meglévő admin_permissions.py RBAC rendszer
- **Kimenet (Mik támaszkodnak rá):** - (nincs)
### 📝 Elemzés
Backend: RequirePermission() dekorátor hozzáadása az új endpointokhoz. Frontend: hasPermission() kompozíció használata a gombok/show/hide logikához.""",
"tags": ["Scope: Frontend", "Type: Feature"]
},
]
for card in cards:
title = card["title"]
body = card["body"]
tags = card["tags"]
cmd = BASE + ["create", title, body, MILESTONE] + tags
print(f"Creating: {title}")
result = run(cmd)
if result:
print(f" -> {result}")
else:
print(f" -> FAILED")
print()