48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import prisma from '@typebot.io/lib/prisma'
|
|
import { authenticatedProcedure } from '@/helpers/server/trpc'
|
|
import { z } from 'zod'
|
|
import { isAdminWriteWorkspaceForbidden } from '../helpers/isAdminWriteWorkspaceForbidden'
|
|
import { TRPCError } from '@trpc/server'
|
|
|
|
export const deleteWorkspace = authenticatedProcedure
|
|
.meta({
|
|
openapi: {
|
|
method: 'DELETE',
|
|
path: '/v1/workspaces/{workspaceId}',
|
|
protect: true,
|
|
summary: 'Delete workspace',
|
|
tags: ['Workspace'],
|
|
},
|
|
})
|
|
.input(
|
|
z.object({
|
|
workspaceId: z
|
|
.string()
|
|
.describe(
|
|
'[Where to find my workspace ID?](../how-to#how-to-find-my-workspaceid)'
|
|
),
|
|
})
|
|
)
|
|
.output(
|
|
z.object({
|
|
message: z.string(),
|
|
})
|
|
)
|
|
.mutation(async ({ input: { workspaceId }, ctx: { user } }) => {
|
|
const workspace = await prisma.workspace.findFirst({
|
|
where: { id: workspaceId },
|
|
include: { members: true },
|
|
})
|
|
|
|
if (!workspace || isAdminWriteWorkspaceForbidden(workspace, user))
|
|
throw new TRPCError({ code: 'NOT_FOUND', message: 'No workspaces found' })
|
|
|
|
await prisma.workspace.deleteMany({
|
|
where: { members: { some: { userId: user.id } }, id: workspaceId },
|
|
})
|
|
|
|
return {
|
|
message: 'Workspace deleted',
|
|
}
|
|
})
|