0.2.0 cleaning script (#2342)

* Display maxUpdatedAt for each workspace Schema

* Factorize functions

* Add max update for public workspaces

* Merge everything in a single json

* Enrich results

* Get from proper table

* Update

* Move to proper command file

* Add a dry-run option

* Remove workspaces from database

* Fix DeleteWorkspace method

* Add new option

* Remove proper data when deleting workspace

* Minor improvements
This commit is contained in:
martmull
2023-11-06 23:15:02 +01:00
committed by GitHub
parent 377f95c9db
commit ba69435339
11 changed files with 337 additions and 75 deletions

View File

@ -137,8 +137,6 @@ export class UserService {
// Delete entire workspace
await this.workspaceService.deleteWorkspace({
workspaceId,
userId,
select: { id: true },
});
} else {
await this.prismaService.client.$transaction([

View File

@ -24,8 +24,6 @@ import {
UpdateWorkspaceAbilityHandler,
DeleteWorkspaceAbilityHandler,
} from 'src/ability/handlers/workspace.ability-handler';
import { AuthUser } from 'src/decorators/auth-user.decorator';
import { User } from 'src/core/@generated/user/user.model';
@UseGuards(JwtAuthGuard)
@Resolver(() => Workspace)
@ -108,12 +106,10 @@ export class WorkspaceResolver {
@AuthWorkspace() { id: workspaceId }: Workspace,
@PrismaSelector({ modelName: 'Workspace' })
{ value: select }: PrismaSelect<'Workspace'>,
@AuthUser() { id: userId }: User,
) {
return this.workspaceService.deleteWorkspace({
workspaceId,
select,
userId,
});
}
}

View File

@ -93,12 +93,10 @@ export class WorkspaceService {
async deleteWorkspace({
workspaceId,
select,
userId,
select = { id: true },
}: {
workspaceId: string;
select: Prisma.WorkspaceSelect;
userId: string;
select?: Prisma.WorkspaceSelect;
}) {
const workspace = await this.findUnique({
where: { id: workspaceId },
@ -109,19 +107,17 @@ export class WorkspaceService {
const where = { workspaceId };
const {
user,
workspaceMember,
refreshToken,
attachment,
comment,
activityTarget,
activity,
apiKey,
favorite,
webHook,
} = this.prismaService.client;
const activitys = await activity.findMany({
where: { authorId: userId },
});
// We don't delete user or refresh tokens as they can belong to another workspace
await this.prismaService.client.$transaction([
this.pipelineProgressService.deleteMany({
where,
@ -147,22 +143,20 @@ export class WorkspaceService {
comment.deleteMany({
where,
}),
...activitys.map(({ id: activityId }) =>
activityTarget.deleteMany({
where: { activityId },
}),
),
activityTarget.deleteMany({
where,
}),
activity.deleteMany({
where,
}),
refreshToken.deleteMany({
where: { userId },
apiKey.deleteMany({
where,
}),
// Todo delete all users from this workspace
user.delete({
where: {
id: userId,
},
favorite.deleteMany({
where,
}),
webHook.deleteMany({
where,
}),
this.delete({ where: { id: workspaceId } }),
]);