@openinc/parse-server-opendash
Version:
Parse Server Cloud Code for open.INC Stack.
90 lines (89 loc) • 3.57 kB
JavaScript
"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 });
}
}