import api from './api'; // Типы данных для пользователей export interface Address { id: number; user_id: number; address_line1: string; address_line2?: string; city: string; state: string; postal_code: string; country: string; is_default: boolean; created_at: string; updated_at?: string; } export interface User { id: number; email: string; first_name?: string; last_name?: string; phone?: string; is_active: boolean; is_admin: boolean; created_at: string; updated_at?: string; addresses?: Address[]; } export interface UserUpdate { email?: string; phone?: string; first_name?: string; last_name?: string; is_active?: boolean; is_admin?: boolean; password?: string; password_confirm?: string; } export interface AddressCreate { address_line1: string; address_line2?: string; city: string; state: string; postal_code: string; country: string; is_default?: boolean; } export interface AddressUpdate { address_line1?: string; address_line2?: string; city?: string; state?: string; postal_code?: string; country?: string; is_default?: boolean; } // Сервис для работы с пользователями export const userService = { // Получить профиль текущего пользователя getCurrentUser: async (): Promise => { const response = await api.get('/users/me'); return response as User; }, // Обновить профиль текущего пользователя updateCurrentUser: async (userData: UserUpdate): Promise => { const response = await api.put('/users/me', userData); return response as User; }, // Добавить адрес для текущего пользователя addAddress: async (address: AddressCreate): Promise
=> { try { const response = await api.post
('/users/me/addresses', address); return response as Address; } catch (error) { console.error('Ошибка при добавлении адреса:', error); throw error; } }, // Обновить адрес updateAddress: async (addressId: number, address: AddressUpdate): Promise
=> { const response = await api.put
(`/users/me/addresses/${addressId}`, address); return response as Address; }, // Удалить адрес deleteAddress: async (addressId: number): Promise => { await api.delete(`/users/me/addresses/${addressId}`); }, // Получить информацию о пользователе по ID (только для админов) getUserById: async (userId: number): Promise => { const response = await api.get(`/users/${userId}`); return response as User; }, // Получить список всех пользователей (только для админов) getUsers: async (params?: { skip?: number; limit?: number; search?: string; }): Promise<{ users: User[], total: number }> => { const response = await api.get<{ users: User[], total: number }>('/users', { params }); return response; }, // Изменить роль пользователя (только для админов) updateUserRole: async (userId: number, role: string): Promise => { try { const response = await api.put(`/users/${userId}/role`, { role }); return response as User; } catch (error) { console.error(`Ошибка при изменении роли пользователя ${userId}:`, error); return null; } }, // Заблокировать/разблокировать пользователя (только для админов) toggleUserActive: async (userId: number, active: boolean): Promise => { try { const response = await api.put(`/users/${userId}/active`, { active }); return response as User; } catch (error) { console.error(`Ошибка при изменении статуса активности пользователя ${userId}:`, error); return null; } } }; export default userService;