enable scheduled jobs (#199)

- one-off scheduled jobs
- recurring jobs
This commit is contained in:
Ramnique Singh 2025-08-12 18:40:04 +05:30 committed by GitHub
parent fcfe5593b4
commit eda3f3821f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
52 changed files with 3833 additions and 71 deletions

View file

@ -0,0 +1,91 @@
"use server";
import { container } from "@/di/container";
import { ICreateRecurringJobRuleController } from "@/src/interface-adapters/controllers/recurring-job-rules/create-recurring-job-rule.controller";
import { IListRecurringJobRulesController } from "@/src/interface-adapters/controllers/recurring-job-rules/list-recurring-job-rules.controller";
import { IFetchRecurringJobRuleController } from "@/src/interface-adapters/controllers/recurring-job-rules/fetch-recurring-job-rule.controller";
import { IToggleRecurringJobRuleController } from "@/src/interface-adapters/controllers/recurring-job-rules/toggle-recurring-job-rule.controller";
import { IDeleteRecurringJobRuleController } from "@/src/interface-adapters/controllers/recurring-job-rules/delete-recurring-job-rule.controller";
import { authCheck } from "./auth_actions";
import { z } from "zod";
import { Message } from "@/app/lib/types/types";
const createRecurringJobRuleController = container.resolve<ICreateRecurringJobRuleController>('createRecurringJobRuleController');
const listRecurringJobRulesController = container.resolve<IListRecurringJobRulesController>('listRecurringJobRulesController');
const fetchRecurringJobRuleController = container.resolve<IFetchRecurringJobRuleController>('fetchRecurringJobRuleController');
const toggleRecurringJobRuleController = container.resolve<IToggleRecurringJobRuleController>('toggleRecurringJobRuleController');
const deleteRecurringJobRuleController = container.resolve<IDeleteRecurringJobRuleController>('deleteRecurringJobRuleController');
export async function createRecurringJobRule(request: {
projectId: string,
input: {
messages: z.infer<typeof Message>[],
},
cron: string,
}) {
const user = await authCheck();
return await createRecurringJobRuleController.execute({
caller: 'user',
userId: user._id,
projectId: request.projectId,
input: request.input,
cron: request.cron,
});
}
export async function listRecurringJobRules(request: {
projectId: string,
cursor?: string,
limit?: number,
}) {
const user = await authCheck();
return await listRecurringJobRulesController.execute({
caller: 'user',
userId: user._id,
projectId: request.projectId,
cursor: request.cursor,
limit: request.limit,
});
}
export async function fetchRecurringJobRule(request: {
ruleId: string,
}) {
const user = await authCheck();
return await fetchRecurringJobRuleController.execute({
caller: 'user',
userId: user._id,
ruleId: request.ruleId,
});
}
export async function toggleRecurringJobRule(request: {
ruleId: string,
disabled: boolean,
}) {
const user = await authCheck();
return await toggleRecurringJobRuleController.execute({
caller: 'user',
userId: user._id,
ruleId: request.ruleId,
disabled: request.disabled,
});
}
export async function deleteRecurringJobRule(request: {
projectId: string,
ruleId: string,
}) {
const user = await authCheck();
return await deleteRecurringJobRuleController.execute({
caller: 'user',
userId: user._id,
projectId: request.projectId,
ruleId: request.ruleId,
});
}

View file

@ -0,0 +1,75 @@
"use server";
import { container } from "@/di/container";
import { ICreateScheduledJobRuleController } from "@/src/interface-adapters/controllers/scheduled-job-rules/create-scheduled-job-rule.controller";
import { IListScheduledJobRulesController } from "@/src/interface-adapters/controllers/scheduled-job-rules/list-scheduled-job-rules.controller";
import { IFetchScheduledJobRuleController } from "@/src/interface-adapters/controllers/scheduled-job-rules/fetch-scheduled-job-rule.controller";
import { IDeleteScheduledJobRuleController } from "@/src/interface-adapters/controllers/scheduled-job-rules/delete-scheduled-job-rule.controller";
import { authCheck } from "./auth_actions";
import { z } from "zod";
import { Message } from "@/app/lib/types/types";
const createScheduledJobRuleController = container.resolve<ICreateScheduledJobRuleController>('createScheduledJobRuleController');
const listScheduledJobRulesController = container.resolve<IListScheduledJobRulesController>('listScheduledJobRulesController');
const fetchScheduledJobRuleController = container.resolve<IFetchScheduledJobRuleController>('fetchScheduledJobRuleController');
const deleteScheduledJobRuleController = container.resolve<IDeleteScheduledJobRuleController>('deleteScheduledJobRuleController');
export async function createScheduledJobRule(request: {
projectId: string,
input: {
messages: z.infer<typeof Message>[],
},
scheduledTime: string, // ISO datetime string
}) {
const user = await authCheck();
return await createScheduledJobRuleController.execute({
caller: 'user',
userId: user._id,
projectId: request.projectId,
input: request.input,
scheduledTime: request.scheduledTime,
});
}
export async function listScheduledJobRules(request: {
projectId: string,
cursor?: string,
limit?: number,
}) {
const user = await authCheck();
return await listScheduledJobRulesController.execute({
caller: 'user',
userId: user._id,
projectId: request.projectId,
cursor: request.cursor,
limit: request.limit,
});
}
export async function fetchScheduledJobRule(request: {
ruleId: string,
}) {
const user = await authCheck();
return await fetchScheduledJobRuleController.execute({
caller: 'user',
userId: user._id,
ruleId: request.ruleId,
});
}
export async function deleteScheduledJobRule(request: {
projectId: string,
ruleId: string,
}) {
const user = await authCheck();
return await deleteScheduledJobRuleController.execute({
caller: 'user',
userId: user._id,
projectId: request.projectId,
ruleId: request.ruleId,
});
}