Delete related userWorkspaceRole and role when deleting workspace (#10707)

Closes https://github.com/twentyhq/core-team-issues/issues/537
This commit is contained in:
Marie
2025-03-06 18:24:37 +01:00
committed by GitHub
parent 777c12dd06
commit f6314e52fe
3 changed files with 48 additions and 1 deletions

View File

@ -13,7 +13,9 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat
import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service'; import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service';
import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service'; import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service';
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
import { RoleService } from 'src/engine/metadata-modules/role/role.service'; import { RoleService } from 'src/engine/metadata-modules/role/role.service';
import { UserWorkspaceRoleEntity } from 'src/engine/metadata-modules/role/user-workspace-role.entity';
import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service';
import { WorkspaceMigrationEntity } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity'; import { WorkspaceMigrationEntity } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service'; import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service';
@ -30,6 +32,8 @@ describe('WorkspaceManagerService', () => {
let workspaceRelationMetadataRepository: Repository<RelationMetadataEntity>; let workspaceRelationMetadataRepository: Repository<RelationMetadataEntity>;
let workspaceFieldMetadataRepository: Repository<FieldMetadataEntity>; let workspaceFieldMetadataRepository: Repository<FieldMetadataEntity>;
let workspaceDataSourceService: WorkspaceDataSourceService; let workspaceDataSourceService: WorkspaceDataSourceService;
let userWorkspaceRoleRepository: Repository<UserWorkspaceRoleEntity>;
let roleRepository: Repository<RoleEntity>;
beforeEach(async () => { beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({ const module: TestingModule = await Test.createTestingModule({
@ -75,6 +79,18 @@ describe('WorkspaceManagerService', () => {
delete: jest.fn(), delete: jest.fn(),
}, },
}, },
{
provide: getRepositoryToken(UserWorkspaceRoleEntity, 'metadata'),
useValue: {
delete: jest.fn(),
},
},
{
provide: getRepositoryToken(RoleEntity, 'metadata'),
useValue: {
delete: jest.fn(),
},
},
{ {
provide: PermissionsService, provide: PermissionsService,
useValue: {}, useValue: {},
@ -133,6 +149,12 @@ describe('WorkspaceManagerService', () => {
workspaceDataSourceService = module.get<WorkspaceDataSourceService>( workspaceDataSourceService = module.get<WorkspaceDataSourceService>(
WorkspaceDataSourceService, WorkspaceDataSourceService,
); );
userWorkspaceRoleRepository = module.get<
Repository<UserWorkspaceRoleEntity>
>(getRepositoryToken(UserWorkspaceRoleEntity, 'metadata'));
roleRepository = module.get<Repository<RoleEntity>>(
getRepositoryToken(RoleEntity, 'metadata'),
);
}); });
it('should be defined', () => { it('should be defined', () => {
@ -155,6 +177,12 @@ describe('WorkspaceManagerService', () => {
expect(dataSourceRepository.delete).toHaveBeenCalledWith({ expect(dataSourceRepository.delete).toHaveBeenCalledWith({
workspaceId: 'workspace-id', workspaceId: 'workspace-id',
}); });
expect(userWorkspaceRoleRepository.delete).toHaveBeenCalledWith({
workspaceId: 'workspace-id',
});
expect(roleRepository.delete).toHaveBeenCalledWith({
workspaceId: 'workspace-id',
});
expect( expect(
workspaceDataSourceService.deleteWorkspaceDBSchema, workspaceDataSourceService.deleteWorkspaceDBSchema,
).toHaveBeenCalled(); ).toHaveBeenCalled();

View File

@ -9,7 +9,9 @@ import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/
import { ObjectMetadataModule } from 'src/engine/metadata-modules/object-metadata/object-metadata.module'; import { ObjectMetadataModule } from 'src/engine/metadata-modules/object-metadata/object-metadata.module';
import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module';
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
import { RoleModule } from 'src/engine/metadata-modules/role/role.module'; import { RoleModule } from 'src/engine/metadata-modules/role/role.module';
import { UserWorkspaceRoleEntity } from 'src/engine/metadata-modules/role/user-workspace-role.entity';
import { UserRoleModule } from 'src/engine/metadata-modules/user-role/user-role.module'; import { UserRoleModule } from 'src/engine/metadata-modules/user-role/user-role.module';
import { WorkspaceMigrationModule } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.module'; import { WorkspaceMigrationModule } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.module';
import { SeederModule } from 'src/engine/seeder/seeder.module'; import { SeederModule } from 'src/engine/seeder/seeder.module';
@ -34,7 +36,12 @@ import { WorkspaceManagerService } from './workspace-manager.service';
RoleModule, RoleModule,
UserRoleModule, UserRoleModule,
TypeOrmModule.forFeature( TypeOrmModule.forFeature(
[FieldMetadataEntity, RelationMetadataEntity], [
FieldMetadataEntity,
RelationMetadataEntity,
UserWorkspaceRoleEntity,
RoleEntity,
],
'metadata', 'metadata',
), ),
], ],

View File

@ -18,7 +18,9 @@ import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/
import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service'; import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service';
import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service'; import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service';
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
import { RoleService } from 'src/engine/metadata-modules/role/role.service'; import { RoleService } from 'src/engine/metadata-modules/role/role.service';
import { UserWorkspaceRoleEntity } from 'src/engine/metadata-modules/role/user-workspace-role.entity';
import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service'; import { UserRoleService } from 'src/engine/metadata-modules/user-role/user-role.service';
import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service'; import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service';
import { PETS_DATA_SEEDS } from 'src/engine/seeder/data-seeds/pets-data-seeds'; import { PETS_DATA_SEEDS } from 'src/engine/seeder/data-seeds/pets-data-seeds';
@ -54,6 +56,10 @@ export class WorkspaceManagerService {
private readonly featureFlagService: FeatureFlagService, private readonly featureFlagService: FeatureFlagService,
@InjectRepository(Workspace, 'core') @InjectRepository(Workspace, 'core')
private readonly workspaceRepository: Repository<Workspace>, private readonly workspaceRepository: Repository<Workspace>,
@InjectRepository(UserWorkspaceRoleEntity, 'metadata')
private readonly userWorkspaceRoleRepository: Repository<UserWorkspaceRoleEntity>,
@InjectRepository(RoleEntity, 'metadata')
private readonly roleRepository: Repository<RoleEntity>,
) {} ) {}
/** /**
@ -255,6 +261,12 @@ export class WorkspaceManagerService {
await this.fieldMetadataRepository.delete({ await this.fieldMetadataRepository.delete({
workspaceId, workspaceId,
}); });
await this.userWorkspaceRoleRepository.delete({
workspaceId,
});
await this.roleRepository.delete({
workspaceId,
});
await this.objectMetadataService.deleteObjectsMetadata(workspaceId); await this.objectMetadataService.deleteObjectsMetadata(workspaceId);
await this.workspaceMigrationService.deleteAllWithinWorkspace(workspaceId); await this.workspaceMigrationService.deleteAllWithinWorkspace(workspaceId);