56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import prisma from '@/lib/prisma'
|
|
import { authenticatedProcedure } from '@/helpers/server/trpc'
|
|
import { TRPCError } from '@trpc/server'
|
|
import { ThemeTemplate, themeTemplateSchema } from '@typebot.io/schemas'
|
|
import { z } from 'zod'
|
|
import { getUserRoleInWorkspace } from '@/features/workspace/helpers/getUserRoleInWorkspace'
|
|
import { WorkspaceRole } from '@typebot.io/prisma'
|
|
|
|
export const deleteThemeTemplate = authenticatedProcedure
|
|
.meta({
|
|
openapi: {
|
|
method: 'DELETE',
|
|
path: '/themeTemplates/{themeTemplateId}',
|
|
protect: true,
|
|
summary: 'Delete a theme template',
|
|
tags: ['Workspace', 'Theme'],
|
|
},
|
|
})
|
|
.input(
|
|
z.object({
|
|
workspaceId: z.string(),
|
|
themeTemplateId: z.string(),
|
|
})
|
|
)
|
|
.output(
|
|
z.object({
|
|
themeTemplate: themeTemplateSchema,
|
|
})
|
|
)
|
|
.mutation(
|
|
async ({ input: { themeTemplateId, workspaceId }, ctx: { user } }) => {
|
|
const workspace = await prisma.workspace.findUnique({
|
|
where: { id: workspaceId },
|
|
select: {
|
|
members: true,
|
|
},
|
|
})
|
|
const userRole = getUserRoleInWorkspace(user.id, workspace?.members)
|
|
if (userRole === undefined || userRole === WorkspaceRole.GUEST)
|
|
throw new TRPCError({
|
|
code: 'NOT_FOUND',
|
|
message: 'Workspace not found',
|
|
})
|
|
|
|
const themeTemplate = (await prisma.themeTemplate.delete({
|
|
where: {
|
|
id: themeTemplateId,
|
|
},
|
|
})) as ThemeTemplate
|
|
|
|
return {
|
|
themeTemplate,
|
|
}
|
|
}
|
|
)
|