2.4: POST /admin/persons/{person_id}/merge — Person merge (duplum kezelés) #312

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

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.

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

▶️ Munka megkezdve: 2026-06-29 12:27:46

▶️ **Munka megkezdve:** 2026-06-29 12:27:46
kincses added Status: Done and removed Status: In Progress labels 2026-06-29 12:38:01 +02:00
kincses worked for 10 minutes 2026-06-29 12:38:01 +02:00
Author
Owner

Munka befejezve: 2026-06-29 12:38:01

Technikai Összefoglaló:
Implementáltam a POST /admin/persons/{person_id}/merge végpontot a Person duplumok kezelésére. A merge endpoint: validálja hogy mindkét Person létezik és nincs merge-elve (404/409), beállítja a source Person merged_into_id-ját és is_active=False, átirányítja a Users és OrganizationMembers rekordokat, AuditLog bejegyzést készít. Létrehoztam a persons:merge permission-t (domain='persons', action='merge') és hozzárendeltem az ADMIN role-hoz. Tesztelve: merge Person 90→93 (200 OK), már merge-elt (409), nem létező (404), önmagába (409).

⏱️ Az idő rögzítve.

✅ **Munka befejezve:** 2026-06-29 12:38:01 **Technikai Összefoglaló:** Implementáltam a POST /admin/persons/{person_id}/merge végpontot a Person duplumok kezelésére. A merge endpoint: validálja hogy mindkét Person létezik és nincs merge-elve (404/409), beállítja a source Person merged_into_id-ját és is_active=False, átirányítja a Users és OrganizationMembers rekordokat, AuditLog bejegyzést készít. Létrehoztam a persons:merge permission-t (domain='persons', action='merge') és hozzárendeltem az ADMIN role-hoz. Tesztelve: merge Person 90→93 (200 OK), már merge-elt (409), nem létező (404), önmagába (409). ⏱️ *Az idő rögzítve.*
Author
Owner

Gitea #312 sikeresen lezárva: POST /admin/persons/{person_id}/merge

Implementált végpont

POST /admin/persons/{person_id}/merge — Person duplumok (merge) kezelése

Request/Response

  • Request: PersonMergeRequest { source_person_id: int, keep_source_user?: bool }
  • Response: PersonMergeResponse { success, message, target_person_id, source_person_id, reassigned_users, reassigned_memberships }

Validációk

Eset Státusz Üzenet
Sikeres merge 200 Részletes összefoglaló
Forrás == Cél 409 "A forrás és a cél Person nem lehet ugyanaz."
Nem létező target 404 "A cél Person (id=X) nem található."
Nem létező source 404 "A forrás Person (id=X) nem található."
Már merge-elt source 409 "A forrás Person (id=X) már merge-elve van..."

Merge logika

  1. Source merged_into_id → target ID
  2. Source is_activeFalse
  3. Users átirányítása (person_id átállítás target-re)
  4. OrganizationMembers átirányítása
  5. AuditLog bejegyzés (action="person.merge")

Adatbázis módosítások

  • system.permissionspersons:merge (id=44, domain='persons', action='merge') létrehozva
  • system.role_permissions — ADMIN role-hoz rendelve (granted=True)

Módosított fájl

## ✅ Gitea #312 sikeresen lezárva: `POST /admin/persons/{person_id}/merge` ### Implementált végpont **`POST /admin/persons/{person_id}/merge`** — Person duplumok (merge) kezelése ### Request/Response - **Request:** `PersonMergeRequest { source_person_id: int, keep_source_user?: bool }` - **Response:** `PersonMergeResponse { success, message, target_person_id, source_person_id, reassigned_users, reassigned_memberships }` ### Validációk | Eset | Státusz | Üzenet | |------|---------|--------| | Sikeres merge | **200** | Részletes összefoglaló | | Forrás == Cél | **409** | "A forrás és a cél Person nem lehet ugyanaz." | | Nem létező target | **404** | "A cél Person (id=X) nem található." | | Nem létező source | **404** | "A forrás Person (id=X) nem található." | | Már merge-elt source | **409** | "A forrás Person (id=X) már merge-elve van..." | ### Merge logika 1. Source `merged_into_id` → target ID 2. Source `is_active` → `False` 3. Users átirányítása (person_id átállítás target-re) 4. OrganizationMembers átirányítása 5. AuditLog bejegyzés (`action="person.merge"`) ### Adatbázis módosítások - `system.permissions` — `persons:merge` (id=44, domain='persons', action='merge') létrehozva - `system.role_permissions` — ADMIN role-hoz rendelve (granted=True) ### Módosított fájl - [`backend/app/api/v1/endpoints/admin_persons.py`](backend/app/api/v1/endpoints/admin_persons.py:890) — `PersonMergeRequest`, `PersonMergeResponse`, `merge_person()` endpoint
Sign in to join this conversation.