test new design 05

This commit is contained in:
TronoSfera 2026-04-03 14:28:36 +03:00
parent 1c908ade7b
commit 9a53d92377
3 changed files with 21 additions and 6 deletions

View file

@ -232,9 +232,12 @@ def _apply_admin_user_topics_fields(db: Session, payload: dict[str, Any]) -> dic
data = dict(payload) data = dict(payload)
if "admin_user_id" in data: if "admin_user_id" in data:
user_id = _parse_uuid_or_400(data.get("admin_user_id"), "admin_user_id") 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: if user is None:
raise HTTPException(status_code=400, detail="Пользователь не найден") raise HTTPException(
status_code=400,
detail="Юрист не найден в базе данных. Возможно, учётная запись была удалена — обновите страницу и попробуйте снова.",
)
if str(user.role or "").upper() != "LAWYER": if str(user.role or "").upper() != "LAWYER":
raise HTTPException(status_code=400, detail="Дополнительные темы доступны только для юриста") raise HTTPException(status_code=400, detail="Дополнительные темы доступны только для юриста")
data["admin_user_id"] = user_id data["admin_user_id"] = user_id

View file

@ -448,6 +448,15 @@ def update_row_service(table_name: str, row_id: str, payload: dict[str, Any], db
is_update=True, is_update=True,
allow_protected_fields={"password_hash"} if normalized == "admin_users" else None, 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": if normalized == "admin_user_topics":
clean_payload = _apply_admin_user_topics_fields(db, clean_payload) clean_payload = _apply_admin_user_topics_fields(db, clean_payload)
if normalized == "topic_required_fields": if normalized == "topic_required_fields":

View file

@ -81,10 +81,13 @@ export function useTableActions({ api, setStatus, resolveTableConfig, tablesRef,
} }
if (tableKey === "topics") { if (tableKey === "topics") {
setDictionaries((prev) => ({ setDictionaries((prev) => {
...prev, const map = new Map((prev.topics || []).map((t) => [t.code, t]));
topics: sortByName((next.rows || []).map((row) => ({ code: row.code, name: row.name || row.code }))), (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") { if (tableKey === "statuses") {