forked from parse-community/parse-server
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCloudCodeRouter.js
123 lines (115 loc) · 3 KB
/
CloudCodeRouter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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,
};
});
}
}