File: //proc/1233/root/home/arjun/projects/good-life-be/helper/eventsUtils.js
export const preprocessEvents = async (events, userId) => {
if (typeof events !== 'object' || events === null) {
throw new Error('Invalid events input. Expected an object.');
}
const transformedEvents = [];
Object.entries(events).forEach(([date, { events }]) => {
const eventsDetails = events?.map((e) => ({
...e.event_details,
conflict: !!e?.conflict, // Convert to boolean
conflict_reason: e?.conflict_reason || null, // Add conflict_reason directly here
}));
eventsDetails?.forEach((event) => {
const conflictReason = event?.conflict_reason || null;
transformedEvents.push({
user_id: userId,
date,
event_title: event?.event_title || 'Untitled Event',
event_description:
event?.event_description || 'No additional information available.',
event_name: event?.event_name || 'Unnamed Event',
start_time: event?.start_time,
end_time: event?.end_time,
recurring: event?.recurring || false,
recurrence_pattern: event?.recurrence_pattern || '',
category: event?.category || 'General',
subCategory: event?.subCategory || null,
ai_activity: event?.ai_activity || false,
ai_suggested_activity: event?.ai_suggested_activity || null,
bufferTime: event?.bufferTime || 0,
conflict: event?.conflict || false,
conflict_reason: conflictReason,
createdAt: new Date(),
updatedAt: new Date(),
is_vacation_event: event?.is_vacation_event,
});
});
});
// Process to handle 'Vacation Planning' subCategory
const eventsGroupedByDate = transformedEvents.reduce((acc, event) => {
acc[event.date] = acc[event.date] || [];
acc[event.date].push(event);
return acc;
}, {});
Object.values(eventsGroupedByDate).forEach((eventsForDate) => {
const hasVacationPlanning = eventsForDate.some(
(event) => event.subCategory === 'Vacation Planning'
);
if (hasVacationPlanning) {
eventsForDate.forEach((event) => {
if (event.subCategory !== 'Vacation Planning') {
event.is_visible = false;
}
});
}
});
return transformedEvents;
};