mirror of
https://github.com/documenso/documenso.git
synced 2026-07-26 01:45:08 +10:00
feat: unlink documents from deleted organization (#2006)
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user