115 lines
3.3 KiB
TypeScript
115 lines
3.3 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;
|
||
addresses?: Address[];
|
||
}
|
||
|
||
export interface UserUpdate {
|
||
first_name?: string;
|
||
last_name?: string;
|
||
phone?: string;
|
||
password?: string;
|
||
email?: 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('/users/me');
|
||
return response.data.user;
|
||
},
|
||
|
||
// Обновить профиль текущего пользователя
|
||
updateCurrentUser: async (userData: UserUpdate): Promise<User> => {
|
||
const response = await api.put('/users/me', userData);
|
||
return response.data;
|
||
},
|
||
|
||
// Добавить адрес для текущего пользователя
|
||
addAddress: async (address: AddressCreate): Promise<Address> => {
|
||
console.log('Отправка запроса на добавление адреса:', address);
|
||
try {
|
||
const response = await api.post('/users/me/addresses', address);
|
||
console.log('Успешный ответ от сервера:', response.data);
|
||
return response.data;
|
||
} catch (error) {
|
||
console.error('Ошибка при добавлении адреса:', error);
|
||
if (error.response) {
|
||
console.error('Статус ответа:', error.response.status);
|
||
console.error('Данные ответа:', error.response.data);
|
||
}
|
||
throw error;
|
||
}
|
||
},
|
||
|
||
// Обновить адрес
|
||
updateAddress: async (addressId: number, address: AddressUpdate): Promise<Address> => {
|
||
const response = await api.put(`/users/me/addresses/${addressId}`, address);
|
||
return response.data;
|
||
},
|
||
|
||
// Удалить адрес
|
||
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(`/users/${userId}`);
|
||
return response.data;
|
||
},
|
||
|
||
// Получить список всех пользователей (только для админов)
|
||
getUsers: async (params?: {
|
||
skip?: number;
|
||
limit?: number;
|
||
search?: string;
|
||
}): Promise<{ users: User[], total: number }> => {
|
||
const response = await api.get('/users', { params });
|
||
return response.data;
|
||
}
|
||
};
|