dptxa-proxy / src /pages /api /admin /notifications.js
TXAVLOG
Deploy DPTXA to Hugging Face Spaces
4bea261
Raw
History Blame Contribute Delete
2.3 kB
import { txasupabase } from '../../../lib/txasupabase.js';
export const GET = async ({ cookies }) => {
try {
// 1. Kiểm tra quyền Admin bảo mật
const token = cookies.get('auth_token')?.value;
let user = null;
if (token) {
try {
user = JSON.parse(Buffer.from(token, 'base64').toString('utf-8'));
} catch (e) {}
}
if (!user || user.role !== 'admin') {
return new Response(JSON.stringify({ error: 'Bạn không có quyền quản trị!' }), {
status: 403,
headers: { 'Content-Type': 'application/json' }
});
}
// 2. Lấy số lượng Zalo Access đang chờ duyệt
const { count: pendingZalo, error: zaloErr } = await txasupabase.supabase
.from('zalo_access')
.select('*', { count: 'exact', head: true })
.eq('status', 'pending');
if (zaloErr) throw zaloErr;
// 3. Lấy số lượng Báo cáo lỗi đang chờ xử lý
const { count: pendingReports, error: reportErr } = await txasupabase.supabase
.from('reports')
.select('*', { count: 'exact', head: true })
.eq('status', 'pending');
if (reportErr) throw reportErr;
// 4. Lấy số lượng bình luận và thông tin bình luận mới nhất
const { data: commentsData, error: commentErr } = await txasupabase.supabase
.from('comments')
.select('id, created_at')
.order('created_at', { ascending: false });
if (commentErr) throw commentErr;
const totalComments = commentsData ? commentsData.length : 0;
const latestCommentTime = commentsData && commentsData.length > 0 ? commentsData[0].created_at : null;
return new Response(JSON.stringify({
success: true,
pendingZalo: pendingZalo || 0,
pendingReports: pendingReports || 0,
totalComments,
latestCommentTime,
comments: commentsData || []
}), {
status: 200,
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'no-store, max-age=0'
}
});
} catch (err) {
console.error('Error in admin notifications API:', err);
return new Response(JSON.stringify({ error: err.message || 'Lỗi hệ thống!' }), {
status: 500,
headers: { 'Content-Type': 'application/json' }
});
}
};