2.1: GET /admin/persons — Person lista endpoint #309

Closed
opened 2026-06-29 03:36:26 +02:00 by kincses · 3 comments
Owner

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.

**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.
kincses added this to the Epic 10 (Admin UI) Jegyek Létrehozása milestone 2026-06-29 03:36:26 +02:00
kincses added the Status: To DoScope: BackendType: Feature labels 2026-06-29 03:36:27 +02:00
kincses added Status: In Progress and removed Status: To Do labels 2026-06-29 04:22:31 +02:00
kincses started working 2026-06-29 04:22:31 +02:00
Author
Owner

▶️ Munka megkezdve: 2026-06-29 04:22:31

▶️ **Munka megkezdve:** 2026-06-29 04:22:31
kincses added Status: Done and removed Status: In Progress labels 2026-06-29 04:27:01 +02:00
kincses worked for 4 minutes 2026-06-29 04:27:01 +02:00
Author
Owner

Munka befejezve: 2026-06-29 04:27:01

Technikai Összefoglaló:
EPIC-2 Task 2.1: GET /admin/persons — Person lista endpoint implementálva. Létrehozva: backend/app/api/v1/endpoints/admin_persons.py (PersonListItemActiveUser, PersonListItem, PersonListResponse Pydantic modellek). Módosítva: backend/app/api/v1/api.py (router regisztráció). Támogatott szűrők: search, is_ghost, is_active, has_user, is_merged, skip, limit. Jogosultság: RequirePermission('persons:view'). N+1 védelem batch user query-vel. Sync Engine: 1279 OK.

⏱️ Az idő rögzítve.

✅ **Munka befejezve:** 2026-06-29 04:27:01 **Technikai Összefoglaló:** EPIC-2 Task 2.1: GET /admin/persons — Person lista endpoint implementálva. Létrehozva: backend/app/api/v1/endpoints/admin_persons.py (PersonListItemActiveUser, PersonListItem, PersonListResponse Pydantic modellek). Módosítva: backend/app/api/v1/api.py (router regisztráció). Támogatott szűrők: search, is_ghost, is_active, has_user, is_merged, skip, limit. Jogosultság: RequirePermission('persons:view'). N+1 védelem batch user query-vel. Sync Engine: ✅ 1279 OK. ⏱️ *Az idő rögzítve.*
Author
Owner

Gitea #309 — EPIC-2 Task 2.1: GET /admin/persons — Kész

Létrehozott fájlok

Módosított fájlok

Végpont részletei

Metódus Útvonal Leírás
GET /api/v1/admin/persons Person lista kereséssel, szűréssel, lapozással

Támogatott paraméterek

  • search — Keresés név (last_name, first_name) vagy telefonszám alapján (ILIKE)
  • is_ghost — Szűrés ghost státusz szerint
  • is_active — Szűrés aktív/inaktív szerint
  • has_user — Szűrés aszerint, hogy van-e kapcsolódó User
  • is_merged — Szűrés merge státusz szerint
  • skip, limit — Lapozás (max 200)

Válasz struktúra

{
  "total": 42,
  "skip": 0,
  "limit": 50,
  "items": [
    {
      "id": 1,
      "last_name": "string",
      "first_name": "string",
      "phone": "string|null",
      "birth_date": "2024-01-01|null",
      "is_ghost": false,
      "is_active": true,
      "merged_into_id": null,
      "users_count": 1,
      "active_user": {"id": 1, "email": "user@example.com", "role": "admin"},
      "address": { ... }
    }
  ]
}

Technikai részletek

  • Jogosultság: RequirePermission("persons:view") — a spec 5.8-as szekciója szerint
  • N+1 védelem: Batch user query (users_map) a joinedload(Person.users) mellett
  • Cím betöltés: joinedload(Person.address) — eager loading
  • Sync Engine: 1279 OK, 0 Fixed, 0 Extra
  • Teszt: Végpont elérhető (/api/v1/admin/persons), permission check működik (403 ha nincs persons:view)

Gitea státusz

  • Kártya #309 lezárva (Done)
  • Dokumentáció frissítve: .roo/history.md
## ✅ Gitea #309 — EPIC-2 Task 2.1: GET /admin/persons — Kész ### Létrehozott fájlok - [`backend/app/api/v1/endpoints/admin_persons.py`](backend/app/api/v1/endpoints/admin_persons.py) — Teljes Person lista végpont ### Módosított fájlok - [`backend/app/api/v1/api.py`](backend/app/api/v1/api.py:40) — `admin_persons` router regisztráció (`/admin/persons` prefix) ### Végpont részletei | Metódus | Útvonal | Leírás | |---------|---------|--------| | `GET` | `/api/v1/admin/persons` | Person lista kereséssel, szűréssel, lapozással | ### Támogatott paraméterek - `search` — Keresés név (`last_name`, `first_name`) vagy telefonszám alapján (ILIKE) - `is_ghost` — Szűrés ghost státusz szerint - `is_active` — Szűrés aktív/inaktív szerint - `has_user` — Szűrés aszerint, hogy van-e kapcsolódó User - `is_merged` — Szűrés merge státusz szerint - `skip`, `limit` — Lapozás (max 200) ### Válasz struktúra ```json { "total": 42, "skip": 0, "limit": 50, "items": [ { "id": 1, "last_name": "string", "first_name": "string", "phone": "string|null", "birth_date": "2024-01-01|null", "is_ghost": false, "is_active": true, "merged_into_id": null, "users_count": 1, "active_user": {"id": 1, "email": "user@example.com", "role": "admin"}, "address": { ... } } ] } ``` ### Technikai részletek - **Jogosultság:** `RequirePermission("persons:view")` — a spec 5.8-as szekciója szerint - **N+1 védelem:** Batch user query (`users_map`) a `joinedload(Person.users)` mellett - **Cím betöltés:** `joinedload(Person.address)` — eager loading - **Sync Engine:** ✅ 1279 OK, 0 Fixed, 0 Extra - **Teszt:** ✅ Végpont elérhető (`/api/v1/admin/persons`), permission check működik (403 ha nincs `persons:view`) ### Gitea státusz - ✅ Kártya #309 lezárva (Done) - ✅ Dokumentáció frissítve: `.roo/history.md`
Sign in to join this conversation.