Files
service-finder/.roo/scripts/create_gitea_cards.py
2026-06-29 14:11:15 +00:00

259 lines
16 KiB
Python

#!/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()