-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDelayedJobBroker.ts
50 lines (44 loc) · 1.18 KB
/
DelayedJobBroker.ts
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
import {
JobBroker,
JobFunction,
Job,
JobParameter,
Parameter,
TimeBasedEvent,
} from "./JobBroker";
class DelayedJobBroker<T extends Parameter> extends JobBroker<T> {
private constructor(
eventHandler: (event: TimeBasedEvent) => void,
private scheduled_at: Date
) {
super(eventHandler);
}
static createJob<T extends Parameter>(
eventHandler: (event: TimeBasedEvent) => void,
scheduled_at: Date
): DelayedJobBroker<T> {
return new this(eventHandler, scheduled_at);
}
public performLater(callback: JobFunction<T>, parameter: Parameter): void {
this.enqueue(callback, parameter);
}
protected createJob(callback: JobFunction<T>, parameter: Parameter): Job {
const trigger = ScriptApp.newTrigger(this.eventHandler.name)
.timeBased()
.at(this.scheduled_at)
.create();
const jobParameter: JobParameter = {
created_at: this.now,
handler: callback.name,
id: trigger.getUniqueId(),
parameter: JSON.stringify(parameter),
state: "waiting",
scheduled_at: this.scheduled_at.getTime(),
};
return {
trigger,
parameter: jobParameter,
};
}
}
export { DelayedJobBroker };