monacousa-portal/server/api/board/next-meeting.get.ts

92 lines
2.7 KiB
TypeScript
Raw Normal View History

import { createNocoDBEventsClient } from '~/server/utils/nocodb-events';
export default defineEventHandler(async (event) => {
try {
// Try to get next meeting from events
const eventsClient = createNocoDBEventsClient();
const now = new Date();
const thirtyDaysFromNow = new Date();
thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);
let nextMeeting = null;
try {
const eventsResponse = await eventsClient.findAll({
limit: 50
});
// Handle different possible response structures
const eventsList = (eventsResponse as any)?.list || [];
if (eventsList && Array.isArray(eventsList)) {
// Filter for future meetings and sort by date
const upcomingMeetings = eventsList
.filter((event: any) => {
if (!event.start_datetime) return false;
const eventDate = new Date(event.start_datetime);
return eventDate >= now &&
(event.event_type === 'meeting' || event.title?.toLowerCase().includes('meeting'));
})
.sort((a: any, b: any) => new Date(a.start_datetime).getTime() - new Date(b.start_datetime).getTime());
if (upcomingMeetings.length > 0) {
const meeting = upcomingMeetings[0];
const meetingDate = new Date(meeting.start_datetime);
nextMeeting = {
id: meeting.Id || meeting.id,
title: meeting.title || 'Board Meeting',
date: meetingDate.toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
}),
time: meetingDate.toLocaleTimeString('en-US', {
hour: 'numeric',
minute: '2-digit',
timeZoneName: 'short'
}),
location: meeting.location,
description: meeting.description
};
}
}
} catch (error) {
console.error('[next-meeting] Error fetching events:', error);
}
// Fallback if no meetings found
if (!nextMeeting) {
nextMeeting = {
id: null,
title: 'Board Meeting',
date: 'January 15, 2025',
time: '7:00 PM EST',
location: 'TBD',
description: 'Monthly board meeting'
};
}
return {
success: true,
data: nextMeeting
};
} catch (error: any) {
console.error('[next-meeting] Error:', error);
// Return fallback data
return {
success: true,
data: {
id: null,
title: 'Board Meeting',
date: 'January 15, 2025',
time: '7:00 PM EST',
location: 'TBD',
description: 'Monthly board meeting'
}
};
}
});