137 lines
4.1 KiB
TypeScript
137 lines
4.1 KiB
TypeScript
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<User> => {
|
||
const response = await api.get<User>('/users/me');
|
||
return response as User;
|
||
},
|
||
|
||
// Обновить профиль текущего пользователя
|
||
updateCurrentUser: async (userData: UserUpdate): Promise<User> => {
|
||
const response = await api.put<User>('/users/me', userData);
|
||
return response as User;
|
||
},
|
||
|
||
// Добавить адрес для текущего пользователя
|
||
addAddress: async (address: AddressCreate): Promise<Address> => {
|
||
try {
|
||
const response = await api.post<Address>('/users/me/addresses', address);
|
||
return response as Address;
|
||
} catch (error) {
|
||
console.error('Ошибка при добавлении адреса:', error);
|
||
throw error;
|
||
}
|
||
},
|
||
|
||
// Обновить адрес
|
||
updateAddress: async (addressId: number, address: AddressUpdate): Promise<Address> => {
|
||
const response = await api.put<Address>(`/users/me/addresses/${addressId}`, address);
|
||
return response as Address;
|
||
},
|
||
|
||
// Удалить адрес
|
||
deleteAddress: async (addressId: number): Promise<void> => {
|
||
await api.delete(`/users/me/addresses/${addressId}`);
|
||
},
|
||
|
||
// Получить информацию о пользователе по ID (только для админов)
|
||
getUserById: async (userId: number): Promise<User> => {
|
||
const response = await api.get<User>(`/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<User | null> => {
|
||
try {
|
||
const response = await api.put<User>(`/users/${userId}/role`, { role });
|
||
return response as User;
|
||
} catch (error) {
|
||
console.error(`Ошибка при изменении роли пользователя ${userId}:`, error);
|
||
return null;
|
||
}
|
||
},
|
||
|
||
// Заблокировать/разблокировать пользователя (только для админов)
|
||
toggleUserActive: async (userId: number, active: boolean): Promise<User | null> => {
|
||
try {
|
||
const response = await api.put<User>(`/users/${userId}/active`, { active });
|
||
return response as User;
|
||
} catch (error) {
|
||
console.error(`Ошибка при изменении статуса активности пользователя ${userId}:`, error);
|
||
return null;
|
||
}
|
||
}
|
||
};
|
||
|
||
export default userService;
|