diff --git a/web/api_client.py b/web/api_client.py index 787bcfd..9fd661d 100644 --- a/web/api_client.py +++ b/web/api_client.py @@ -94,6 +94,24 @@ async def register( return None elif resp.status_code == 400: return resp.json().get("detail", "Ошибка регистрации") + elif resp.status_code == 422: + # Ошибки валидации Pydantic — извлекаем первое понятное сообщение + errors = resp.json().get("detail", []) + _field_names = {"password": "Пароль", "username": "Логин"} + _msg_map = { + "Password must be at least 8 characters": "Пароль должен быть не менее 8 символов", + "Username must be at least 3 characters": "Логин должен быть не менее 3 символов", + } + for err in errors: + raw = err.get("ctx", {}).get("error") or err.get("msg", "") + if raw in _msg_map: + return _msg_map[raw] + # fallback: поле + сообщение + loc = err.get("loc", []) + field = _field_names.get(loc[-1] if loc else "", "") + msg = err.get("msg", "Ошибка валидации").removeprefix("Value error, ") + return f"{field}: {msg}".strip(": ") + return "Проверьте правильность введённых данных" return f"Ошибка сервера: {resp.status_code}" except httpx.ConnectError: return "Не удалось подключиться к серверу"