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