feat: unlink documents from deleted organization (#2006)

This commit is contained in:
Catalin Pit
2025-12-15 03:17:13 +02:00
committed by GitHub
parent 928edb8645
commit 02f1264eea
8 changed files with 245 additions and 21 deletions
@@ -1,4 +1,10 @@
import { TeamMemberRole } from '@prisma/client';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
import { orphanEnvelopes } from '@documenso/lib/server-only/envelope/orphan-envelopes';
import { transferTeamEnvelopes } from '@documenso/lib/server-only/envelope/transfer-team-envelopes';
import { deleteTeam } from '@documenso/lib/server-only/team/delete-team';
import { getTeamById } from '@documenso/lib/server-only/team/get-team';
import { authenticatedProcedure } from '../trpc';
import { ZDeleteTeamRequestSchema, ZDeleteTeamResponseSchema } from './delete-team.types';
@@ -8,15 +14,40 @@ export const deleteTeamRoute = authenticatedProcedure
.input(ZDeleteTeamRequestSchema)
.output(ZDeleteTeamResponseSchema)
.mutation(async ({ input, ctx }) => {
const { teamId } = input;
const { teamId, transferTeamId } = input;
const { user } = ctx;
const team = await getTeamById({ userId: user.id, teamId });
if (team.currentTeamRole !== TeamMemberRole.ADMIN) {
throw new AppError(AppErrorCode.UNAUTHORIZED, {
message: 'You are not allowed to delete this team',
});
}
ctx.logger.info({
input: {
teamId,
},
});
const transferTeam = transferTeamId
? await getTeamById({ userId: user.id, teamId: transferTeamId }).catch(() => {
throw new AppError(AppErrorCode.INVALID_REQUEST, {
message: 'Invalid transfer team ID',
});
})
: undefined;
if (transferTeam) {
await transferTeamEnvelopes({
sourceTeamId: teamId,
targetTeamId: transferTeam.id,
});
} else {
await orphanEnvelopes({ teamId });
}
await deleteTeam({
userId: user.id,
teamId,
@@ -12,6 +12,7 @@ import { z } from 'zod';
export const ZDeleteTeamRequestSchema = z.object({
teamId: z.number(),
transferTeamId: z.number().optional(),
});
export const ZDeleteTeamResponseSchema = z.void();