@openinc/parse-server-opendash
Version:
Parse Server Cloud Code for open.INC Stack.
112 lines (111 loc) • 5.11 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.init = init;
const __1 = require("..");
const openservice_1 = require("../features/openservice");
const openinc_openservice_save_ticket_data_1 = require("../functions/openinc-openservice-save-ticket-data");
const catchError_1 = require("../helper/catchError");
const types_1 = require("../types");
const TRANSLATION_TITLE = openservice_1.OpenserviceMessageTranslationKeys.MACHINELOG.SCHEDULEEXECUTION.TITLE;
const TRANSLATION_CONTENT = openservice_1.OpenserviceMessageTranslationKeys.MACHINELOG.SCHEDULEEXECUTION.CONTENT;
async function init() {
(0, __1.beforeSaveHook)(types_1.Maintenance_Schedule_Execution, async (request) => {
const { object, original, user } = request;
await (0, __1.defaultHandler)(request);
await (0, __1.defaultAclHandler)(request);
});
(0, __1.afterSaveHook)(types_1.Maintenance_Schedule_Execution, async (request) => {
const { object, original, user } = request;
//If this is an update, do nothing
if (original !== undefined) {
return;
}
// save schedule message to source
addMachinelogMessage(object, user);
//If this is a new object, create all steps from the origin
const tenant = object.get("tenant")
? object.get("tenant")
: Parse.User.current()
? Parse.User.current().get("tenant")
: undefined;
if (tenant === undefined)
return;
const schedule = (await object.fetchWithInclude("schedule", { useMasterKey: true })).get("schedule");
if (schedule === undefined) {
return;
}
let actualSteps = [];
const [stepserror, steps] = await (0, catchError_1.catchError)(schedule.get("steps").query().includeAll().find({ useMasterKey: true }));
if (stepserror) {
throw stepserror;
}
if (!steps || steps.length === 0) {
const scheduleWithTemplate = await schedule.fetchWithInclude("template", {
useMasterKey: true,
});
const template = scheduleWithTemplate.get("template");
if (!template)
return;
const [templateError, templateSteps] = await (0, catchError_1.catchError)(template.get("steps").query().includeAll().find({ useMasterKey: true }));
if (templateError)
throw templateError;
actualSteps = templateSteps;
}
else {
actualSteps = steps;
}
//For every step create a new step object and save as Maintenance_Schedule_Execution_Step
for await (const step of actualSteps) {
const [roleserror, roles] = await (0, catchError_1.catchError)(step.relation("roles").query().find({ useMasterKey: true }));
const [mediaerror, media] = await (0, catchError_1.catchError)(step.relation("media").query().find({ useMasterKey: true }));
const executionstep = new types_1.Maintenance_Schedule_Execution_Step({
done: false,
comment: "",
scheduleexecution: object,
tenant: tenant,
description: step.get("description"),
title: step.get("title"),
fields: step.get("fields"),
order: step.get("order"),
});
const mediarelation = executionstep.relation("media");
if (media !== undefined) {
mediarelation.add(media);
}
const rolesrelation = executionstep.relation("roles");
if (roles !== undefined) {
rolesrelation.add(roles);
}
const [stepsaveerror, stepsaveobject] = await (0, catchError_1.catchError)(executionstep.save(null, { useMasterKey: true }));
}
});
}
async function addMachinelogMessage(object, user) {
const source = await object.get("source")?.fetch({ useMasterKey: true });
const scheduleSource = (await object
.get("schedule")
?.fetchWithInclude("source", { useMasterKey: true }))?.get("source");
let actualSource = source || scheduleSource;
if (actualSource)
new types_1.Maintenance_Message({
referencedObjectId: actualSource.id,
classname: actualSource.className,
title: TRANSLATION_TITLE,
content: TRANSLATION_CONTENT,
user: user,
tenant: user.get("tenant"),
displayAt: object.get("finishedAt") ?? object.get("createdAt"),
data: {
type: "system",
origin: {
id: object.id,
classname: object.className,
},
translation: {
title: object.get("title"),
description: object.get("description"),
username: (0, openinc_openservice_save_ticket_data_1.getUsername)(user),
},
},
}).save(null, { useMasterKey: true });
}