rowboat/apps/rowboat/app/actions/recurring-job-rules.actions.ts
tusharmagar e2c8d0490a Add the edit function that allows editing triggers and lets copilot edit triggers too without losing previous jobs
feat: Add update functionality for recurring and scheduled job rules

- Implemented update actions for recurring job rules and scheduled job rules, allowing users to modify existing rules with new input and scheduling configurations.
- Enhanced the UI components to support editing of job rules, including forms for both creating and updating rules.
- Updated the repository interfaces and MongoDB implementations to handle the new update operations for job rules.

This update improves the flexibility of managing job rules within the application.
2025-10-06 11:25:06 +08:00

113 lines
3.9 KiB
TypeScript

"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 { IUpdateRecurringJobRuleController } from "@/src/interface-adapters/controllers/recurring-job-rules/update-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');
const updateRecurringJobRuleController = container.resolve<IUpdateRecurringJobRuleController>('updateRecurringJobRuleController');
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,
});
}
export async function updateRecurringJobRule(request: {
projectId: string,
ruleId: string,
input: {
messages: z.infer<typeof Message>[],
},
cron: string,
}) {
const user = await authCheck();
return await updateRecurringJobRuleController.execute({
caller: 'user',
userId: user.id,
projectId: request.projectId,
ruleId: request.ruleId,
input: request.input,
cron: request.cron,
});
}