feat: Refine admin guest counting logic, increase stats refresh rate, and add guest count utility scripts.
This commit is contained in:
20
check-counts.js
Normal file
20
check-counts.js
Normal 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
25
check-counts.ts
Normal 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());
|
||||
@@ -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>
|
||||
|
||||
@@ -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 }
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]);
|
||||
|
||||
Reference in New Issue
Block a user