import { prisma } from '@/lib/prisma' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' const statusColors: Record = { PENDING: 'bg-yellow-100 text-yellow-700', PROCESSING: 'bg-blue-100 text-blue-700', SENT: 'bg-green-100 text-green-700', FAILED: 'bg-red-100 text-red-700', RETRYING: 'bg-orange-100 text-orange-700', } export default async function SmsQueuePage() { const queue = await prisma.smsQueue.findMany({ orderBy: { createdAt: 'desc' }, take: 100, include: { client: { select: { name: true } } }, }) const counts = { PENDING: queue.filter(q => q.status === 'PENDING').length, PROCESSING: queue.filter(q => q.status === 'PROCESSING').length, SENT: queue.filter(q => q.status === 'SENT').length, FAILED: queue.filter(q => q.status === 'FAILED').length, RETRYING: queue.filter(q => q.status === 'RETRYING').length, } return (

SMS Queue

Monitor SMS delivery status

{Object.entries(counts).map(([status, count]) => (
{status}: {count}
))}
Recent Queue (last 100) {queue.length === 0 ? (

No SMS in queue

) : (
{queue.map(item => ( ))}
Student Client Phone Event Status Attempts Created
{item.studentName}
{item.studentId}
{item.client.name} {item.parentPhone} {item.event === 'time_in' ? '✅ In' : '🔴 Out'} {item.status} {item.attempts}/3 {new Date(item.createdAt).toLocaleString('en-PH', { timeZone: 'Asia/Manila' })}
)}
) }