Refactor APIs

This commit is contained in:
2025-11-18 22:02:44 +03:00
Unverified
parent e23959fbd9
commit a15d3a08bf
35 changed files with 1075 additions and 313 deletions
+10 -23
View File
@@ -2,11 +2,10 @@ import { useRef, useState } from "react";
import { useNavigate } from "react-router-dom";
import { motion, type Transition, type Variants } from "motion/react";
import { useImmer } from "use-immer";
import type { ErrorResponse, LoginRequest, LoginResponse } from "@/core/types";
import { API_BASE_URL } from "@/core/config";
import type { LoginRequest } from "@/core/types";
import { useAppState } from "@/pages/chat/state";
import { MaterialButton } from "@/utils/material";
import { ensureKeysOnLogin, deriveAuthSecret } from "@/core/api/authApi";
import { ensureKeysOnLogin, deriveAuthSecret, login } from "@/core/api/account";
import { AuthTextField, type AuthTextFieldHandle } from "./AuthTextField";
import { initialize, isSupported, startElectronReceiver, subscribe } from "@/core/push-notifications/push-notifications";
import { isElectron } from "@/core/electron/electron";
@@ -86,16 +85,8 @@ export function LoginForm({ onSwitchMode }: LoginFormProps) {
password: derived
}
const response = await fetch(`${API_BASE_URL}/login`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(request)
});
if (response.ok) {
const data: LoginResponse = await response.json();
try {
const data = await login(request);
setUser(data.token, data.user);
try {
@@ -126,20 +117,16 @@ export function LoginForm({ onSwitchMode }: LoginFormProps) {
} catch (e) {
console.error("Notification setup failed:", e);
}
} else {
const data: ErrorResponse = await response.json();
if (response.status === 403 && response.headers.get("suspension_reason")) {
const suspensionReason = response.headers.get("suspension_reason");
} catch (error: any) {
if (error.message && error.message.includes("suspension")) {
const setSuspended = useAppState.getState().setSuspended;
setSuspended(suspensionReason || "No reason provided");
setSuspended(error.message || "No reason provided");
return;
}
showAlert("danger", data.message || "Неверное имя пользователя или пароль");
showAlert("danger", error.message || "Неверное имя пользователя или пароль");
}
} catch (error) {
showAlert("danger", "Ошибка соединения с сервером");
} catch (error: any) {
showAlert("danger", error.message || "Ошибка соединения с сервером");
} finally {
setIsLoading(false);
}
+8 -18
View File
@@ -2,11 +2,10 @@ import { useRef, useState } from "react";
import { useNavigate } from "react-router-dom";
import { motion, type Transition, type Variants } from "motion/react";
import { useImmer } from "use-immer";
import type { ErrorResponse, RegisterRequest, LoginResponse } from "@/core/types";
import { API_BASE_URL } from "@/core/config";
import type { RegisterRequest } from "@/core/types";
import { useAppState } from "@/pages/chat/state";
import { MaterialButton, MaterialIconButton } from "@/utils/material";
import { ensureKeysOnLogin, deriveAuthSecret } from "@/core/api/authApi";
import { ensureKeysOnLogin, deriveAuthSecret, register } from "@/core/api/account";
import { AuthTextField, type AuthTextFieldHandle } from "./AuthTextField";
import type { Alert, AlertType } from "./Auth";
import { AuthHeader, AlertsContainer } from "./Auth";
@@ -115,16 +114,8 @@ export function RegisterForm({ onSwitchMode }: RegisterFormProps) {
confirm_password: derived
}
const response = await fetch(`${API_BASE_URL}/register`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(request)
});
if (response.ok) {
const data: LoginResponse = await response.json();
try {
const data = await register(request);
setUser(data.token, data.user);
try {
@@ -134,12 +125,11 @@ export function RegisterForm({ onSwitchMode }: RegisterFormProps) {
}
navigate("/chat");
} else {
const data: ErrorResponse = await response.json();
showAlert("danger", data.message || "Ошибка при регистрации");
} catch (error: any) {
showAlert("danger", error.message || "Ошибка при регистрации");
}
} catch (error) {
showAlert("danger", "Ошибка соединения с сервером");
} catch (error: any) {
showAlert("danger", error.message || "Ошибка соединения с сервером");
} finally {
setIsLoading(false);
}