Fix organization member editing and drag sync
This commit is contained in:
@@ -3,7 +3,7 @@ from __future__ import annotations
|
||||
from datetime import datetime
|
||||
from typing import Callable
|
||||
|
||||
from fastapi import FastAPI, File, HTTPException, UploadFile
|
||||
from fastapi import Body, FastAPI, File, HTTPException, UploadFile
|
||||
|
||||
|
||||
def register_member_routes(
|
||||
@@ -19,6 +19,7 @@ def register_member_routes(
|
||||
serialize_member_payload: Callable[[object, int], tuple[object, ...]],
|
||||
sync_auth_users_from_members: Callable[[object], None],
|
||||
create_history_revision: Callable[[object, str, str], int],
|
||||
fetch_history_revision_created_at: Callable[[object, int], datetime],
|
||||
sync_member_versions: Callable[[object, list[int], str, int], None],
|
||||
sync_seat_assignment_versions: Callable[[object, list[int], str, int], None],
|
||||
replace_members: Callable[[list[object]], list[dict[str, object]]],
|
||||
@@ -46,7 +47,8 @@ def register_member_routes(
|
||||
return {"items": build_member_compare_items(from_items, to_items)}
|
||||
|
||||
@app.post("/api/members")
|
||||
def create_member(payload: member_payload_cls) -> dict[str, object]:
|
||||
def create_member(payload: dict = Body(...)) -> dict[str, object]:
|
||||
payload = member_payload_cls.model_validate(payload)
|
||||
with get_conn() as conn:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute("SELECT COALESCE(MAX(sort_order), -1) + 1 AS next_order FROM members")
|
||||
@@ -67,16 +69,19 @@ def register_member_routes(
|
||||
member = cur.fetchone()
|
||||
sync_auth_users_from_members(cur)
|
||||
revision_no = create_history_revision(cur, "member-create", f"Member created id={int(member['id'])}")
|
||||
sync_member_versions(cur, [int(member["id"])], "member-create", revision_no)
|
||||
revision_created_at = fetch_history_revision_created_at(cur, revision_no)
|
||||
sync_member_versions(cur, [int(member["id"])], "member-create", revision_no, revision_created_at)
|
||||
conn.commit()
|
||||
return {"item": member}
|
||||
|
||||
@app.put("/api/members/bulk-sync")
|
||||
def bulk_sync_members(payload: member_bulk_payload_cls) -> dict[str, list[dict[str, object]]]:
|
||||
def bulk_sync_members(payload: dict = Body(...)) -> dict[str, list[dict[str, object]]]:
|
||||
payload = member_bulk_payload_cls.model_validate(payload)
|
||||
return {"items": replace_members(payload.items)}
|
||||
|
||||
@app.put("/api/members/{member_id}")
|
||||
def update_member(member_id: int, payload: member_payload_cls) -> dict[str, object]:
|
||||
def update_member(member_id: int, payload: dict = Body(...)) -> dict[str, object]:
|
||||
payload = member_payload_cls.model_validate(payload)
|
||||
with get_conn() as conn:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
@@ -112,8 +117,9 @@ def register_member_routes(
|
||||
raise HTTPException(status_code=404, detail="Member not found.")
|
||||
sync_auth_users_from_members(cur)
|
||||
revision_no = create_history_revision(cur, "member-update", f"Member updated id={member_id}")
|
||||
sync_member_versions(cur, [member_id], "member-update", revision_no)
|
||||
sync_seat_assignment_versions(cur, [member_id], "member-update", revision_no)
|
||||
revision_created_at = fetch_history_revision_created_at(cur, revision_no)
|
||||
sync_member_versions(cur, [member_id], "member-update", revision_no, revision_created_at)
|
||||
sync_seat_assignment_versions(cur, [member_id], "member-update", revision_no, revision_created_at)
|
||||
conn.commit()
|
||||
return {"item": member}
|
||||
|
||||
@@ -126,8 +132,9 @@ def register_member_routes(
|
||||
if deleted:
|
||||
sync_auth_users_from_members(cur)
|
||||
revision_no = create_history_revision(cur, "member-delete", f"Member deleted id={member_id}")
|
||||
sync_member_versions(cur, [member_id], "member-delete", revision_no)
|
||||
sync_seat_assignment_versions(cur, [member_id], "member-delete", revision_no)
|
||||
revision_created_at = fetch_history_revision_created_at(cur, revision_no)
|
||||
sync_member_versions(cur, [member_id], "member-delete", revision_no, revision_created_at)
|
||||
sync_seat_assignment_versions(cur, [member_id], "member-delete", revision_no, revision_created_at)
|
||||
conn.commit()
|
||||
if not deleted:
|
||||
raise HTTPException(status_code=404, detail="Member not found.")
|
||||
|
||||
Reference in New Issue
Block a user