From 9a53d92377b777cb57650e2c9ecdaca9b1ce7907 Mon Sep 17 00:00:00 2001 From: TronoSfera <119615520+TronoSfera@users.noreply.github.com> Date: Fri, 3 Apr 2026 14:28:36 +0300 Subject: [PATCH] test new design 05 --- app/api/admin/crud_modules/payloads.py | 7 +++++-- app/api/admin/crud_modules/service.py | 9 +++++++++ app/web/admin/hooks/useTableActions.js | 11 +++++++---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/app/api/admin/crud_modules/payloads.py b/app/api/admin/crud_modules/payloads.py index 5185bd4..76d0309 100644 --- a/app/api/admin/crud_modules/payloads.py +++ b/app/api/admin/crud_modules/payloads.py @@ -232,9 +232,12 @@ def _apply_admin_user_topics_fields(db: Session, payload: dict[str, Any]) -> dic data = dict(payload) if "admin_user_id" in data: user_id = _parse_uuid_or_400(data.get("admin_user_id"), "admin_user_id") - user = db.get(AdminUser, user_id) + user = db.query(AdminUser).filter(AdminUser.id == user_id).first() if user is None: - raise HTTPException(status_code=400, detail="Пользователь не найден") + raise HTTPException( + status_code=400, + detail="Юрист не найден в базе данных. Возможно, учётная запись была удалена — обновите страницу и попробуйте снова.", + ) if str(user.role or "").upper() != "LAWYER": raise HTTPException(status_code=400, detail="Дополнительные темы доступны только для юриста") data["admin_user_id"] = user_id diff --git a/app/api/admin/crud_modules/service.py b/app/api/admin/crud_modules/service.py index cee7e37..d1327c5 100644 --- a/app/api/admin/crud_modules/service.py +++ b/app/api/admin/crud_modules/service.py @@ -448,6 +448,15 @@ def update_row_service(table_name: str, row_id: str, payload: dict[str, Any], db is_update=True, allow_protected_fields={"password_hash"} if normalized == "admin_users" else None, ) + if normalized == "admin_users" and "email" in clean_payload: + new_email = str(clean_payload.get("email") or "").strip().lower() + if new_email: + duplicate = db.query(AdminUser).filter( + AdminUser.email == new_email, + AdminUser.id != row.id, + ).first() + if duplicate: + raise HTTPException(status_code=400, detail="Этот email уже используется другим пользователем") if normalized == "admin_user_topics": clean_payload = _apply_admin_user_topics_fields(db, clean_payload) if normalized == "topic_required_fields": diff --git a/app/web/admin/hooks/useTableActions.js b/app/web/admin/hooks/useTableActions.js index 5d2cec3..8cc65ab 100644 --- a/app/web/admin/hooks/useTableActions.js +++ b/app/web/admin/hooks/useTableActions.js @@ -81,10 +81,13 @@ export function useTableActions({ api, setStatus, resolveTableConfig, tablesRef, } if (tableKey === "topics") { - setDictionaries((prev) => ({ - ...prev, - topics: sortByName((next.rows || []).map((row) => ({ code: row.code, name: row.name || row.code }))), - })); + setDictionaries((prev) => { + const map = new Map((prev.topics || []).map((t) => [t.code, t])); + (next.rows || []).forEach((row) => { + if (row.code) map.set(row.code, { code: row.code, name: row.name || row.code }); + }); + return { ...prev, topics: sortByName(Array.from(map.values())) }; + }); } if (tableKey === "statuses") {