Initial move
This commit is contained in:
4
backend/src/utils/multer.ts
Normal file
4
backend/src/utils/multer.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
import multer from "multer";
|
||||
import { UPLOAD_DIR } from "../config";
|
||||
|
||||
export const upload = multer({ dest: UPLOAD_DIR });
|
||||
54
backend/src/utils/scheduler.ts
Normal file
54
backend/src/utils/scheduler.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
export enum TimeUnit {
|
||||
SECOND = 1000,
|
||||
MINUTE = 60 * 1000,
|
||||
HOUR = 60 * 60 * 1000,
|
||||
DAY = 24 * 60 * 60 * 1000,
|
||||
WEEK = 7 * 24 * 60 * 60 * 1000
|
||||
}
|
||||
|
||||
export type Task = () => void;
|
||||
|
||||
export interface TaskEntry {
|
||||
id: Timer;
|
||||
task: Task;
|
||||
remainingRuns: number;
|
||||
}
|
||||
|
||||
export class Scheduler {
|
||||
private tasks: Map<string, TaskEntry> = new Map();
|
||||
|
||||
static toMilliseconds(time: number, unit: TimeUnit): number {
|
||||
return time * unit;
|
||||
}
|
||||
|
||||
register(taskName: string, task: Task, delay: number, unit: TimeUnit, runs: number = Infinity): void {
|
||||
if (this.tasks.has(taskName)) {
|
||||
throw new Error(`Task ${taskName} is already registered.`);
|
||||
}
|
||||
const performTask = () => {
|
||||
task();
|
||||
const taskEntry = this.tasks.get(taskName);
|
||||
if (taskEntry) {
|
||||
taskEntry.remainingRuns--;
|
||||
if (taskEntry.remainingRuns > 0) {
|
||||
taskEntry.id = setTimeout(performTask, Scheduler.toMilliseconds(delay, unit));
|
||||
} else {
|
||||
this.tasks.delete(taskName);
|
||||
}
|
||||
}
|
||||
};
|
||||
this.tasks.set(taskName, { id: setTimeout(performTask, Scheduler.toMilliseconds(delay, unit)), task, remainingRuns: runs });
|
||||
}
|
||||
|
||||
unregister(taskName: string): void {
|
||||
const taskEntry = this.tasks.get(taskName);
|
||||
if (taskEntry) {
|
||||
clearTimeout(taskEntry.id);
|
||||
this.tasks.delete(taskName);
|
||||
}
|
||||
}
|
||||
|
||||
getTasks(): Map<string, TaskEntry> {
|
||||
return this.tasks;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user