97 lines
2.8 KiB
TypeScript
97 lines
2.8 KiB
TypeScript
import api from './api';
|
||
|
||
// Интерфейсы для отзывов
|
||
export interface Review {
|
||
id: number;
|
||
user_id: number;
|
||
product_id: number;
|
||
rating: number;
|
||
title?: string;
|
||
comment?: string;
|
||
is_approved: boolean;
|
||
created_at: string;
|
||
updated_at?: string;
|
||
user?: {
|
||
id: number;
|
||
email: string;
|
||
first_name?: string;
|
||
last_name?: string;
|
||
};
|
||
}
|
||
|
||
export interface ReviewCreate {
|
||
product_id: number;
|
||
rating: number;
|
||
title?: string;
|
||
comment?: string;
|
||
}
|
||
|
||
export interface ReviewUpdate {
|
||
rating?: number;
|
||
title?: string;
|
||
comment?: string;
|
||
is_approved?: boolean;
|
||
}
|
||
|
||
// Сервис для работы с отзывами
|
||
const reviewService = {
|
||
// Получить отзывы для продукта
|
||
getProductReviews: async (productId: number, params?: {
|
||
skip?: number;
|
||
limit?: number;
|
||
}): Promise<Review[]> => {
|
||
try {
|
||
const response = await api.get<Review[]>(`/reviews/products/${productId}`, { params });
|
||
return response as Review[];
|
||
} catch (error) {
|
||
console.error(`Ошибка при получении отзывов для продукта ${productId}:`, error);
|
||
return [];
|
||
}
|
||
},
|
||
|
||
// Создать новый отзыв
|
||
createReview: async (reviewData: ReviewCreate): Promise<Review | null> => {
|
||
try {
|
||
const response = await api.post<Review>('/reviews/', reviewData);
|
||
return response as Review;
|
||
} catch (error) {
|
||
console.error('Ошибка при создании отзыва:', error);
|
||
return null;
|
||
}
|
||
},
|
||
|
||
// Обновить отзыв (только владелец или админ)
|
||
updateReview: async (reviewId: number, reviewData: ReviewUpdate): Promise<Review | null> => {
|
||
try {
|
||
const response = await api.put<Review>(`/reviews/${reviewId}`, reviewData);
|
||
return response as Review;
|
||
} catch (error) {
|
||
console.error(`Ошибка при обновлении отзыва ${reviewId}:`, error);
|
||
return null;
|
||
}
|
||
},
|
||
|
||
// Удалить отзыв (только владелец или админ)
|
||
deleteReview: async (reviewId: number): Promise<boolean> => {
|
||
try {
|
||
await api.delete(`/reviews/${reviewId}`);
|
||
return true;
|
||
} catch (error) {
|
||
console.error(`Ошибка при удалении отзыва ${reviewId}:`, error);
|
||
return false;
|
||
}
|
||
},
|
||
|
||
// Одобрить отзыв (только для админов)
|
||
approveReview: async (reviewId: number): Promise<Review | null> => {
|
||
try {
|
||
const response = await api.post<Review>(`/reviews/${reviewId}/approve`);
|
||
return response as Review;
|
||
} catch (error) {
|
||
console.error(`Ошибка при одобрении отзыва ${reviewId}:`, error);
|
||
return null;
|
||
}
|
||
}
|
||
};
|
||
|
||
export default reviewService;
|