import { txasupabase } from '../../../lib/txasupabase.js'; export const POST = async ({ request, cookies }) => { const token = cookies.get('auth_token')?.value; if (!token) return new Response(JSON.stringify({ error: 'Bạn cần đăng nhập để đánh giá!' }), { status: 401 }); // Lấy địa chỉ IP của người dùng const ip = request.headers.get('x-forwarded-for') || request.headers.get('cf-connecting-ip') || '127.0.0.1'; try { const { movieSlug, score } = await request.json(); const userData = JSON.parse(Buffer.from(token, 'base64').toString('utf-8')); if (score < 1 || score > 10) return new Response(JSON.stringify({ error: 'Điểm không hợp lệ!' }), { status: 400 }); const ratingObj = await txasupabase.getRatingBySlug(movieSlug); let totalScore = ratingObj ? Number(ratingObj.total_score) : 0; let count = ratingObj ? ratingObj.count : 0; let userRatings = ratingObj ? ratingObj.user_ratings : {}; let ipRatings = ratingObj ? ratingObj.ip_ratings : {}; // Giới hạn 1 người / 1 phim duy nhất if (userRatings[userData.username]) { return new Response(JSON.stringify({ error: 'Bạn đã đánh giá bộ phim này rồi! Mỗi thành viên chỉ được đánh giá một lần.' }), { status: 403 }); } // Kiểm tra xem IP đã được đánh giá chưa if (ipRatings[ip]) { return new Response(JSON.stringify({ error: 'Mỗi địa chỉ IP chỉ được đánh giá phim này một lần!' }), { status: 403 }); } totalScore += score; count += 1; userRatings[userData.username] = score; ipRatings[ip] = score; await txasupabase.saveRating(movieSlug, count, totalScore, userRatings, ipRatings); return new Response(JSON.stringify({ message: 'Cảm ơn bạn đã đánh giá!', average: totalScore / count, count: count }), { status: 200 }); } catch (err) { console.error('[Rate POST Error]:', err); return new Response(JSON.stringify({ error: 'Lỗi hệ thống!' }), { status: 500 }); } }; export const GET = async ({ url }) => { const movieSlug = new URL(url).searchParams.get('slug'); if (!movieSlug) return new Response(JSON.stringify({ average: 0, count: 0 }), { status: 200 }); try { const ratingObj = await txasupabase.getRatingBySlug(movieSlug); if (!ratingObj || ratingObj.count === 0) return new Response(JSON.stringify({ average: 0, count: 0 }), { status: 200 }); return new Response(JSON.stringify({ average: ratingObj.total_score / ratingObj.count, count: ratingObj.count }), { status: 200 }); } catch (err) { console.error('[Rate GET Error]:', err); return new Response(JSON.stringify({ average: 0, count: 0 }), { status: 200 }); } };