dressed_for_succes_store/frontend/lib/reviews.ts

97 lines
2.8 KiB
TypeScript
Raw Permalink 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 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;