dptxa-proxy / src /pages /api /user /favorite.js
TXAVLOG
Deploy DPTXA to Hugging Face Spaces
4bea261
Raw
History Blame Contribute Delete
2.14 kB
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 để thực hiện!' }), { status: 401 });
try {
const { movieSlug, movieName, movieThumb } = await request.json();
const userData = JSON.parse(Buffer.from(token, 'base64').toString('utf-8'));
// Tìm người dùng trên Supabase dựa vào ID
const user = await txasupabase.getUserById(userData.id);
if (!user) return new Response(JSON.stringify({ error: 'Không tìm thấy người dùng!' }), { status: 404 });
const favorites = user.favorites || [];
const favIndex = favorites.findIndex(f => f.slug === movieSlug);
let action = '';
if (favIndex === -1) {
favorites.push({ slug: movieSlug, name: movieName, thumb: movieThumb, addedAt: new Date().toISOString() });
action = 'added';
} else {
favorites.splice(favIndex, 1);
action = 'removed';
}
// Cập nhật lại thông tin phim yêu thích lên Supabase
await txasupabase.saveUser({
...user,
favorites
});
return new Response(JSON.stringify({ message: action === 'added' ? 'Đã thêm vào yêu thích!' : 'Đã xóa khỏi yêu thích!', action }), { status: 200 });
} catch (err) {
console.error('[Favorite POST Error]:', err);
return new Response(JSON.stringify({ error: 'Lỗi hệ thống!' }), { status: 500 });
}
};
export const GET = async ({ url, cookies }) => {
const token = cookies.get('auth_token')?.value;
if (!token) return new Response(JSON.stringify({ favorites: [] }), { status: 200 });
try {
const userData = JSON.parse(Buffer.from(token, 'base64').toString('utf-8'));
const user = await txasupabase.getUserById(userData.id);
return new Response(JSON.stringify({ favorites: user?.favorites || [] }), { status: 200 });
} catch (err) {
console.error('[Favorite GET Error]:', err);
return new Response(JSON.stringify({ favorites: [] }), { status: 200 });
}
};