feat: Refine admin guest counting logic, increase stats refresh rate, and add guest count utility scripts.

This commit is contained in:
2026-01-29 08:40:30 +02:00
parent 8cb95f3ddf
commit 641bef46cb
6 changed files with 70 additions and 24 deletions

20
check-counts.js Normal file
View File

@@ -0,0 +1,20 @@
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
async function main() {
const total = await prisma.guest.count();
const confirmed = await prisma.guest.count({
where: {
OR: [
{ rsvpStatus: 'ACCEPTED' },
{ AND: [{ rsvpStatus: null }, { isAttending: true }] }
]
}
});
console.log(`Total Guests: ${total}`);
console.log(`Confirmed Guests: ${confirmed}`);
}
main()
.catch(e => console.error(e))
.finally(async () => await prisma.$disconnect());

25
check-counts.ts Normal file
View File

@@ -0,0 +1,25 @@
import { prisma } from "@/lib/db";
async function main() {
console.log('Checking database counts...');
try {
const total = await prisma.guest.count();
const confirmed = await prisma.guest.count({
where: {
OR: [
{ rsvpStatus: 'ACCEPTED' },
{ AND: [{ rsvpStatus: 'PENDING' }, { isAttending: true }] }
]
}
});
console.log(`Total Guests: ${total}`);
console.log(`Confirmed Guests: ${confirmed}`);
} catch (error) {
console.error('Error querying database:', error);
}
}
main()
.catch(e => console.error(e))
.finally(async () => await prisma.$disconnect());

View File

@@ -365,16 +365,12 @@ function AdminContent() {
);
}
const handleSettingsClick = () => {
// Navigate to settings tab
window.location.href = '/admin?tab=settings';
};
return (
<AdminStatsProvider>
<AdminLayout onLogout={handleLogout}>
<Suspense key="admin-dashboard" fallback={<div className="flex items-center justify-center min-h-screen"><div className="text-wedding-evergreen font-body">Loading dashboard...</div></div>}>
<AdminDashboard defaultTab={activeTab} onSettingsClick={handleSettingsClick} />
<AdminDashboard defaultTab={activeTab} />
</Suspense>
</AdminLayout>
</AdminStatsProvider>

View File

@@ -35,7 +35,7 @@ async function fetchStatsFromDatabase() {
{ rsvpStatus: 'ACCEPTED' },
{
AND: [
{ OR: [{ rsvpStatus: null }, { rsvpStatus: 'PENDING' }] },
{ rsvpStatus: 'PENDING' },
{ isAttending: true }
]
}
@@ -48,7 +48,7 @@ async function fetchStatsFromDatabase() {
{ rsvpStatus: 'DECLINED' },
{
AND: [
{ OR: [{ rsvpStatus: null }, { rsvpStatus: 'PENDING' }] },
{ rsvpStatus: 'PENDING' },
{ isAttending: false }
]
}
@@ -62,7 +62,7 @@ async function fetchStatsFromDatabase() {
{ rsvpStatus: 'ACCEPTED' },
{
AND: [
{ OR: [{ rsvpStatus: null }, { rsvpStatus: 'PENDING' }] },
{ rsvpStatus: 'PENDING' },
{ isAttending: true }
]
}

View File

@@ -64,6 +64,11 @@ export function AdminDashboard({
const searchParams = useSearchParams();
const tabFromUrl = searchParams.get("tab") || defaultTab;
const [activeTab, setActiveTab] = useState(tabFromUrl);
useEffect(() => {
console.log("AdminDashboard mounted");
}, []);
const { toast } = useToast();
// Unified Data Hooks

View File

@@ -105,7 +105,7 @@ export function AdminStatsProvider({ children }: AdminStatsProviderProps) {
useEffect(() => {
const interval = setInterval(() => {
refresh(true); // Silent refresh
}, 60000); // 60 seconds
}, 5000); // 5 seconds
return () => clearInterval(interval);
}, [refresh]);