dressed_for_succes_store/frontend/lib/users.ts

137 lines
4.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;