import { create } from "zustand"; import { persist } from "zustand/middleware"; import { apiClient } from "@/shared/api/axios.instance"; import type { AuthState, LoginCredentials, RegisterData, User, LoginResponse, } from "../types/auth.types"; const login = async (credentials: LoginCredentials): Promise => { const response = await apiClient.post( "/auth/login", credentials, ); return response.data; }; const register = async ( data: RegisterData, ): Promise> => { const response = await apiClient.post>( "/auth/register", { login: data.login, password: data.password, name: data.firstName, last_name: data.lastName, }, ); return response.data; }; const mapResponseToUser = (response: LoginResponse): User => ({ login: response.login, name: response.name, last_name: response.last_name, permission_admin: response.permission_admin, permission_manage_agent: response.permission_manage_agent, permission_view: response.permission_view, }); export const useAuthStore = create()( persist( (set) => ({ user: null, token: null, isLoading: false, error: null, login: async (credentials: LoginCredentials) => { set({ isLoading: true, error: null }); try { const response = await login(credentials); const user = mapResponseToUser(response); set({ user, token: response.token, isLoading: false }); } catch (error) { set({ error: error instanceof Error ? error.message : "Login failed", isLoading: false, }); throw error; } }, register: async (data: RegisterData) => { set({ isLoading: true, error: null }); try { await register(data); // После регистрации пользователь не авторизуется автоматически // Нужно войти через /auth/login set({ isLoading: false }); } catch (error) { set({ error: error instanceof Error ? error.message : "Registration failed", isLoading: false, }); throw error; } }, logout: () => { set({ user: null, token: null, error: null }); }, clearError: () => { set({ error: null }); }, }), { name: "auth-storage", partialize: (state) => ({ token: state.token, user: state.user }), }, ), );