128 lines
3.0 KiB
JavaScript
128 lines
3.0 KiB
JavaScript
import PromiseRouter from '../PromiseRouter';
|
|
import Parse from 'parse/node';
|
|
import rest from '../rest';
|
|
const triggers = require('../triggers');
|
|
const middleware = require('../middlewares');
|
|
|
|
function formatJobSchedule(job_schedule) {
|
|
if (typeof job_schedule.startAfter === 'undefined') {
|
|
job_schedule.startAfter = new Date().toISOString();
|
|
}
|
|
return job_schedule;
|
|
}
|
|
|
|
function validateJobSchedule(config, job_schedule) {
|
|
const jobs = triggers.getJobs(config.applicationId) || {};
|
|
if (job_schedule.jobName && !jobs[job_schedule.jobName]) {
|
|
throw new Parse.Error(
|
|
Parse.Error.INTERNAL_SERVER_ERROR,
|
|
'Cannot Schedule a job that is not deployed'
|
|
);
|
|
}
|
|
}
|
|
|
|
export class CloudCodeRouter extends PromiseRouter {
|
|
mountRoutes() {
|
|
this.route(
|
|
'GET',
|
|
'/cloud_code/jobs',
|
|
middleware.promiseEnforceMasterKeyAccess,
|
|
CloudCodeRouter.getJobs
|
|
);
|
|
this.route(
|
|
'GET',
|
|
'/cloud_code/jobs/data',
|
|
middleware.promiseEnforceMasterKeyAccess,
|
|
CloudCodeRouter.getJobsData
|
|
);
|
|
this.route(
|
|
'POST',
|
|
'/cloud_code/jobs',
|
|
middleware.promiseEnforceMasterKeyAccess,
|
|
CloudCodeRouter.createJob
|
|
);
|
|
this.route(
|
|
'PUT',
|
|
'/cloud_code/jobs/:objectId',
|
|
middleware.promiseEnforceMasterKeyAccess,
|
|
CloudCodeRouter.editJob
|
|
);
|
|
this.route(
|
|
'DELETE',
|
|
'/cloud_code/jobs/:objectId',
|
|
middleware.promiseEnforceMasterKeyAccess,
|
|
CloudCodeRouter.deleteJob
|
|
);
|
|
}
|
|
|
|
static getJobs(req) {
|
|
return rest
|
|
.find(req.config, req.auth, '_JobSchedule', {}, {})
|
|
.then(scheduledJobs => {
|
|
return {
|
|
response: scheduledJobs.results,
|
|
};
|
|
});
|
|
}
|
|
|
|
static getJobsData(req) {
|
|
const config = req.config;
|
|
const jobs = triggers.getJobs(config.applicationId) || {};
|
|
return rest
|
|
.find(req.config, req.auth, '_JobSchedule', {}, {})
|
|
.then(scheduledJobs => {
|
|
return {
|
|
response: {
|
|
in_use: scheduledJobs.results.map(job => job.jobName),
|
|
jobs: Object.keys(jobs),
|
|
},
|
|
};
|
|
});
|
|
}
|
|
|
|
static createJob(req) {
|
|
const { job_schedule } = req.body;
|
|
validateJobSchedule(req.config, job_schedule);
|
|
return rest.create(
|
|
req.config,
|
|
req.auth,
|
|
'_JobSchedule',
|
|
formatJobSchedule(job_schedule),
|
|
req.client,
|
|
req.info.context
|
|
);
|
|
}
|
|
|
|
static editJob(req) {
|
|
const { objectId } = req.params;
|
|
const { job_schedule } = req.body;
|
|
validateJobSchedule(req.config, job_schedule);
|
|
return rest
|
|
.update(
|
|
req.config,
|
|
req.auth,
|
|
'_JobSchedule',
|
|
{ objectId },
|
|
formatJobSchedule(job_schedule),
|
|
undefined,
|
|
req.info.context
|
|
)
|
|
.then(response => {
|
|
return {
|
|
response,
|
|
};
|
|
});
|
|
}
|
|
|
|
static deleteJob(req) {
|
|
const { objectId } = req.params;
|
|
return rest
|
|
.del(req.config, req.auth, '_JobSchedule', objectId, req.info.context)
|
|
.then(response => {
|
|
return {
|
|
response,
|
|
};
|
|
});
|
|
}
|
|
}
|