monacousa-portal/server/api/admin/fix-event-attendee-counts.p...

97 lines
3.1 KiB
TypeScript
Raw Normal View History

2025-08-13 16:47:53 +02:00
// server/api/admin/fix-event-attendee-counts.post.ts
import { createSessionManager } from '~/server/utils/session';
import { createNocoDBEventsClient } from '~/server/utils/nocodb-events';
export default defineEventHandler(async (event) => {
try {
console.log('[admin/fix-event-attendee-counts] Starting attendee count fix...');
// Verify admin session
const sessionManager = createSessionManager();
const cookieHeader = getHeader(event, 'cookie');
const session = sessionManager.getSession(cookieHeader);
if (!session?.user || session.user.tier !== 'admin') {
throw createError({
statusCode: 403,
statusMessage: 'Admin access required'
});
}
console.log('[admin/fix-event-attendee-counts] Authorized admin user:', session.user.email);
const eventsClient = createNocoDBEventsClient();
// Get all events
const eventsResponse = await eventsClient.findAll({ limit: 1000 });
const events = eventsResponse.list || [];
console.log('[admin/fix-event-attendee-counts] Found', events.length, 'events to process');
const results = [];
// Process each event
for (const eventObj of events) {
try {
const eventId = eventObj.event_id || eventObj.id || (eventObj as any).Id;
const eventTitle = eventObj.title || 'Unknown Event';
console.log('[admin/fix-event-attendee-counts] Processing event:', eventTitle, 'ID:', eventId);
// Force update the attendee count
const newCount = await eventsClient.forceUpdateEventAttendeeCount(eventId.toString());
results.push({
event_id: eventId,
title: eventTitle,
old_count: eventObj.current_attendees || 0,
new_count: newCount,
status: 'success'
});
console.log('[admin/fix-event-attendee-counts] ✅ Fixed event:', eventTitle, 'Count:', newCount);
} catch (eventError: any) {
console.error('[admin/fix-event-attendee-counts] ❌ Error processing event:', eventObj.title, eventError);
results.push({
event_id: eventObj.event_id || eventObj.id,
title: eventObj.title || 'Unknown Event',
old_count: eventObj.current_attendees || 0,
new_count: 0,
status: 'error',
error: eventError.message
});
}
}
const successCount = results.filter(r => r.status === 'success').length;
const errorCount = results.filter(r => r.status === 'error').length;
console.log('[admin/fix-event-attendee-counts] ✅ Fix completed. Success:', successCount, 'Errors:', errorCount);
return {
success: true,
message: `Fixed attendee counts for ${successCount} events (${errorCount} errors)`,
data: {
total_events: events.length,
success_count: successCount,
error_count: errorCount,
results: results
}
};
} catch (error: any) {
console.error('[admin/fix-event-attendee-counts] ❌ Error:', error);
if (error.statusCode) {
throw error;
}
throw createError({
statusCode: 500,
statusMessage: 'Failed to fix event attendee counts'
});
}
});