UNPKG

@openinc/parse-server-opendash

Version:
90 lines (89 loc) 3.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.init = init; const __1 = require(".."); const scheduleToEvent_1 = require("../features/openservice/schedules/calendarSync/functions/scheduleToEvent"); const CalendarManager_1 = require("../features/openservice/schedules/calendarSync/service/CalendarManager"); const types_1 = require("../types"); async function init() { (0, __1.beforeSaveHook)(types_1.Maintenance_Schedule, async (request) => { const { object, original, user } = request; await (0, __1.defaultHandler)(request); await (0, __1.defaultAclHandler)(request); }); (0, __1.afterSaveHook)(types_1.Maintenance_Schedule, async (request) => { const { object, original, user, master } = request; if (!original) { await addToTemplateSources(object); if (!master) { await addToCalendar(object); } } if (original && !master) { await updateCalendarEvent(object); } }); (0, __1.beforeDeleteHook)(types_1.Maintenance_Schedule, async (request) => { const { object, original, user, master } = request; const scheduleFetched = await object?.fetchWithInclude(["template", "source"], { useMasterKey: true, }); const template = scheduleFetched?.get("template"); const source = scheduleFetched?.get("source"); if (source) template?.relation("sources").remove(source); await template?.save(null, { useMasterKey: true }); // Delete associated calendar event if (object.get("meta")?.microsoftCalendarEventId) { await new CalendarManager_1.CalendarManager().deleteEvent(object.get("meta")?.microsoftCalendarEventId); } }); } async function addToTemplateSources(schedule) { const template = schedule.get("template"); if (!template) return; const sourcesInRelation = await template .relation("sources") .query() .findAll({ useMasterKey: true }); if (sourcesInRelation.some((s) => s.id === schedule.source?.id)) return; template.relation("sources").add(schedule.source); await template.save(null, { useMasterKey: true }); } async function updateCalendarEvent(schedule) { const event = await (0, scheduleToEvent_1.scheduleToEvent)(schedule); if (!event) return; const calendarManager = new CalendarManager_1.CalendarManager(); const meta = schedule.get("meta") || {}; const microsoftCalendarEventId = meta.microsoftCalendarEventId; if (microsoftCalendarEventId) { console.log("Updating schedule in calendar..."); await calendarManager.updateEvent(microsoftCalendarEventId, event); } else { await addToCalendar(schedule); } } /** * Add schedule as event to calendar when first created * @param schedule */ async function addToCalendar(schedule) { console.log("Creating new calendar event for schedule..."); const event = await (0, scheduleToEvent_1.scheduleToEvent)(schedule); if (!event) return; const calendarManager = new CalendarManager_1.CalendarManager(); const createdEvent = await calendarManager.createEvent(event); if (createdEvent && createdEvent.id) { const existingMeta = schedule.get("meta") || {}; schedule.set("meta", { ...existingMeta, microsoftCalendarEventId: createdEvent.id, }); await schedule.save(null, { useMasterKey: true }); } }