Openstatus
www.openstatus.dev
1import { z } from "zod";
2
3import { and, eq } from "@openstatus/db";
4import {
5 insertIntegrationSchema,
6 integration,
7} from "@openstatus/db/src/schema";
8
9import { createTRPCRouter, protectedProcedure } from "../trpc";
10
11export const integrationRouter = createTRPCRouter({
12 createIntegration: protectedProcedure
13 .input(
14 z.object({ workspaceSlug: z.string(), input: insertIntegrationSchema }),
15 )
16 .mutation(async (opts) => {
17 const exists = await opts.ctx.db
18 .select()
19 .from(integration)
20 .where(
21 and(
22 eq(integration.workspaceId, opts.ctx.workspace.id),
23 eq(integration.externalId, opts.input.input.externalId),
24 ),
25 )
26 .get();
27
28 if (exists) {
29 return;
30 }
31 await opts.ctx.db
32 .insert(integration)
33 .values({ ...opts.input.input, workspaceId: opts.ctx.workspace.id })
34 .returning()
35 .get();
36 }),
37});