101 lines
2.9 KiB
TypeScript
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;
|
|
}
|
|
};
|