2.4: POST /admin/persons/{person_id}/merge — Person merge (duplum kezelés) #312
Notifications
Total Time Spent: 10 minutes
kincses
10 minutes
No due date set.
Dependencies
No dependencies set.
Reference: kincses/service-finder#312
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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)
📝 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.
▶️ Munka megkezdve: 2026-06-29 12:27:46
✅ 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.
✅ Gitea #312 sikeresen lezárva:
POST /admin/persons/{person_id}/mergeImplementált végpont
POST /admin/persons/{person_id}/merge— Person duplumok (merge) kezeléseRequest/Response
PersonMergeRequest { source_person_id: int, keep_source_user?: bool }PersonMergeResponse { success, message, target_person_id, source_person_id, reassigned_users, reassigned_memberships }Validációk
Merge logika
merged_into_id→ target IDis_active→Falseaction="person.merge")Adatbázis módosítások
system.permissions—persons:merge(id=44, domain='persons', action='merge') létrehozvasystem.role_permissions— ADMIN role-hoz rendelve (granted=True)Módosított fájl
backend/app/api/v1/endpoints/admin_persons.py—PersonMergeRequest,PersonMergeResponse,merge_person()endpoint