90 lines
2.5 KiB
TypeScript
90 lines
2.5 KiB
TypeScript
import emailReminderTemplate from "@calcom/ee/workflows/lib/reminders/templates/emailReminderTemplate";
|
|
import { PermissionCheckService } from "@calcom/features/pbac/services/permission-check.service";
|
|
import { SENDER_NAME } from "@calcom/lib/constants";
|
|
import { getTranslation } from "@calcom/i18n/server";
|
|
import { getTimeFormatStringFromUserTimeFormat } from "@calcom/lib/timeFormat";
|
|
import type { PrismaClient } from "@calcom/prisma";
|
|
import { prisma } from "@calcom/prisma";
|
|
import type { Workflow } from "@calcom/prisma/client";
|
|
import {
|
|
MembershipRole,
|
|
TimeUnit,
|
|
WorkflowActions,
|
|
WorkflowTemplates,
|
|
WorkflowTriggerEvents,
|
|
} from "@calcom/prisma/enums";
|
|
import type { TrpcSessionUser } from "@calcom/trpc/server/types";
|
|
|
|
import { TRPCError } from "@trpc/server";
|
|
|
|
import type { TCreateInputSchema } from "./create.schema";
|
|
|
|
type CreateOptions = {
|
|
ctx: {
|
|
user: NonNullable<TrpcSessionUser>;
|
|
prisma: PrismaClient;
|
|
};
|
|
input: TCreateInputSchema;
|
|
};
|
|
|
|
export const createHandler = async ({ ctx, input }: CreateOptions) => {
|
|
const { teamId } = input;
|
|
|
|
const userId = ctx.user.id;
|
|
|
|
if (teamId) {
|
|
const permissionService = new PermissionCheckService();
|
|
|
|
const hasPermission = await permissionService.checkPermission({
|
|
userId,
|
|
teamId,
|
|
permission: "workflow.create",
|
|
fallbackRoles: [MembershipRole.ADMIN, MembershipRole.OWNER],
|
|
});
|
|
|
|
if (!hasPermission) {
|
|
throw new TRPCError({
|
|
code: "UNAUTHORIZED",
|
|
});
|
|
}
|
|
}
|
|
|
|
try {
|
|
const workflow: Workflow = await prisma.workflow.create({
|
|
data: {
|
|
name: "",
|
|
trigger: WorkflowTriggerEvents.BEFORE_EVENT,
|
|
time: 24,
|
|
timeUnit: TimeUnit.HOUR,
|
|
userId,
|
|
teamId,
|
|
},
|
|
});
|
|
|
|
const renderedEmailTemplate = emailReminderTemplate({
|
|
isEditingMode: true,
|
|
locale: ctx.user.locale,
|
|
t: await getTranslation(ctx.user.locale, "common"),
|
|
action: WorkflowActions.EMAIL_ATTENDEE,
|
|
timeFormat: getTimeFormatStringFromUserTimeFormat(ctx.user.timeFormat),
|
|
});
|
|
|
|
await ctx.prisma.workflowStep.create({
|
|
data: {
|
|
stepNumber: 1,
|
|
action: WorkflowActions.EMAIL_ATTENDEE,
|
|
template: WorkflowTemplates.REMINDER,
|
|
reminderBody: renderedEmailTemplate.emailBody,
|
|
emailSubject: renderedEmailTemplate.emailSubject,
|
|
workflowId: workflow.id,
|
|
sender: SENDER_NAME,
|
|
numberVerificationPending: false,
|
|
verifiedAt: new Date(),
|
|
},
|
|
});
|
|
return { workflow };
|
|
} catch (e) {
|
|
throw e;
|
|
}
|
|
};
|