mirror of
https://github.com/eliasstepanik/core.git
synced 2026-01-11 17:18:28 +00:00
65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
import { PrismaClient } from "@prisma/client";
|
|
import { logger, schedules, task } from "@trigger.dev/sdk/v3";
|
|
|
|
import { integrationRunSchedule } from "./integration-run-schedule";
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
export const scheduler = task({
|
|
id: "scheduler",
|
|
run: async (payload: { integrationAccountId: string }) => {
|
|
const { integrationAccountId } = payload;
|
|
|
|
const integrationAccount = await prisma.integrationAccount.findUnique({
|
|
where: { id: integrationAccountId, deleted: null },
|
|
include: {
|
|
integrationDefinition: true,
|
|
workspace: true,
|
|
},
|
|
});
|
|
|
|
if (!integrationAccount) {
|
|
logger.error("Integration account not found");
|
|
return null;
|
|
}
|
|
|
|
if (!integrationAccount.workspace) {
|
|
return null;
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const spec = integrationAccount.integrationDefinition.spec as any;
|
|
|
|
if (spec.schedule && spec.schedule.frequency) {
|
|
const createdSchedule = await schedules.create({
|
|
// The id of the scheduled task you want to attach to.
|
|
task: integrationRunSchedule.id,
|
|
// The schedule in cron format.
|
|
cron: spec.schedule.frequency,
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
// timezone: (integrationAccount.workspace.preferences as any).timezone,
|
|
// this is required, it prevents you from creating duplicate schedules. It will update the schedule if it already exists.
|
|
deduplicationKey: integrationAccount.id,
|
|
externalId: integrationAccount.id,
|
|
});
|
|
|
|
await prisma.integrationAccount.update({
|
|
where: {
|
|
id: integrationAccount.id,
|
|
},
|
|
data: {
|
|
settings: {
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
...(integrationAccount.settings as any),
|
|
scheduleId: createdSchedule.id,
|
|
},
|
|
},
|
|
});
|
|
|
|
return createdSchedule;
|
|
}
|
|
|
|
return "No schedule for this task";
|
|
},
|
|
});
|