survey-webapp/SurveyFrontend/src/api/AuthApi.ts
2025-05-24 16:05:35 +05:00

101 lines
2.9 KiB
TypeScript

import {BASE_URL, createRequestConfig, handleResponse} from "./BaseApi.ts";
interface IAuthData{
email: string;
password: string;
}
interface IRegistrationData extends IAuthData{
username: string;
firstName: string;
lastName: string;
}
//
// interface IUserData{
// username: string;
// firstName: string;
// lastName: string;
// email: string;
// }
export const getCurrentUser = async (): Promise<IRegistrationData> => {
const token = localStorage.getItem("token");
if (!token) {
throw new Error("Токен отсутствует");
}
try {
const response = await fetch(`${BASE_URL}/auth/me`, {
...createRequestConfig('GET'),
headers: {
'Authorization': `Bearer ${token}`
}
});
if (response.status === 401) {
localStorage.removeItem("token");
throw new Error("Сессия истекла. Пожалуйста, войдите снова.");
}
if (!response.ok) {
throw new Error(`Ошибка сервера: ${response.status}`);
}
const userData = await handleResponse(response);
localStorage.setItem("user", JSON.stringify(userData));
return userData;
} catch (error) {
console.error("Ошибка при получении данных пользователя:", error);
throw error;
}
};
export const registerUser = async (data: IRegistrationData) => {
try{
const response = await fetch(`${BASE_URL}/auth/register`, {
...createRequestConfig('POST'), body: JSON.stringify(data),
})
const responseData = await handleResponse(response);
if (responseData.accessToken) {
localStorage.setItem("token", responseData.accessToken);
localStorage.setItem("user", JSON.stringify({
firstName: data.firstName,
lastName: data.lastName
}));
}
return responseData;
} catch (error){
console.error("Registration error:", error);
throw error;
}
}
export const authUser = async (data: IAuthData) => {
try {
const response = await fetch(`${BASE_URL}/auth/login`, {
...createRequestConfig('POST'),
body: JSON.stringify(data),
});
const responseData = await handleResponse(response);
const token = responseData.accessToken || responseData.token;
if (token) {
localStorage.setItem("token", token);
const user = localStorage.getItem("user");
if (!responseData.user && user) {
responseData.user = JSON.parse(user);
}
if (responseData.user) {
localStorage.setItem("user", JSON.stringify(responseData.user));
}
}
return responseData;
} catch (error) {
console.error("Login error:", error);
throw error;
}
};