Update cleaning suspended workspace job (#9999)
- split workspace metadata deletion into multiple queries - delete all subscriptions when workspace is deleted --------- Co-authored-by: etiennejouan <jouan.etienne@gmail.com>
This commit is contained in:
@ -106,7 +106,7 @@ export class BillingSubscriptionService {
|
|||||||
return billingSubscriptionItem;
|
return billingSubscriptionItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteSubscription(workspaceId: string) {
|
async deleteSubscriptions(workspaceId: string) {
|
||||||
const subscriptionToCancel =
|
const subscriptionToCancel =
|
||||||
await this.getCurrentBillingSubscriptionOrThrow({
|
await this.getCurrentBillingSubscriptionOrThrow({
|
||||||
workspaceId,
|
workspaceId,
|
||||||
@ -116,8 +116,8 @@ export class BillingSubscriptionService {
|
|||||||
await this.stripeSubscriptionService.cancelSubscription(
|
await this.stripeSubscriptionService.cancelSubscription(
|
||||||
subscriptionToCancel.stripeSubscriptionId,
|
subscriptionToCancel.stripeSubscriptionId,
|
||||||
);
|
);
|
||||||
await this.billingSubscriptionRepository.delete(subscriptionToCancel.id);
|
|
||||||
}
|
}
|
||||||
|
await this.billingSubscriptionRepository.delete({ workspaceId });
|
||||||
}
|
}
|
||||||
|
|
||||||
async handleUnpaidInvoices(data: Stripe.SetupIntentSucceededEvent.Data) {
|
async handleUnpaidInvoices(data: Stripe.SetupIntentSucceededEvent.Data) {
|
||||||
|
|||||||
@ -184,7 +184,7 @@ export class WorkspaceService extends TypeOrmQueryService<Workspace> {
|
|||||||
await this.userWorkspaceRepository.delete({ workspaceId: id });
|
await this.userWorkspaceRepository.delete({ workspaceId: id });
|
||||||
|
|
||||||
if (this.billingService.isBillingEnabled()) {
|
if (this.billingService.isBillingEnabled()) {
|
||||||
await this.billingSubscriptionService.deleteSubscription(workspace.id);
|
await this.billingSubscriptionService.deleteSubscriptions(workspace.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.workspaceManagerService.delete(id);
|
await this.workspaceManagerService.delete(id);
|
||||||
|
|||||||
@ -4,8 +4,10 @@ import { TypeOrmModule } from '@nestjs/typeorm';
|
|||||||
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
|
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
|
||||||
import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity';
|
import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity';
|
||||||
import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module';
|
import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module';
|
||||||
|
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||||
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 { RoleModule } from 'src/engine/metadata-modules/role/role.module';
|
import { RoleModule } from 'src/engine/metadata-modules/role/role.module';
|
||||||
import { UserRoleModule } from 'src/engine/metadata-modules/userRole/userRole.module';
|
import { UserRoleModule } from 'src/engine/metadata-modules/userRole/userRole.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';
|
||||||
@ -30,6 +32,10 @@ import { WorkspaceManagerService } from './workspace-manager.service';
|
|||||||
TypeOrmModule.forFeature([UserWorkspace], 'core'),
|
TypeOrmModule.forFeature([UserWorkspace], 'core'),
|
||||||
RoleModule,
|
RoleModule,
|
||||||
UserRoleModule,
|
UserRoleModule,
|
||||||
|
TypeOrmModule.forFeature(
|
||||||
|
[FieldMetadataEntity, RelationMetadataEntity],
|
||||||
|
'metadata',
|
||||||
|
),
|
||||||
],
|
],
|
||||||
exports: [WorkspaceManagerService],
|
exports: [WorkspaceManagerService],
|
||||||
providers: [WorkspaceManagerService],
|
providers: [WorkspaceManagerService],
|
||||||
|
|||||||
@ -7,12 +7,14 @@ import { Repository } from 'typeorm';
|
|||||||
import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity';
|
import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity';
|
||||||
import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity';
|
import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity';
|
||||||
import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service';
|
import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service';
|
||||||
|
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||||
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 {
|
import {
|
||||||
PermissionsException,
|
PermissionsException,
|
||||||
PermissionsExceptionCode,
|
PermissionsExceptionCode,
|
||||||
} from 'src/engine/metadata-modules/permissions/permissions.exception';
|
} from 'src/engine/metadata-modules/permissions/permissions.exception';
|
||||||
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 { RoleService } from 'src/engine/metadata-modules/role/role.service';
|
import { RoleService } from 'src/engine/metadata-modules/role/role.service';
|
||||||
import { UserRoleService } from 'src/engine/metadata-modules/userRole/userRole.service';
|
import { UserRoleService } from 'src/engine/metadata-modules/userRole/userRole.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';
|
||||||
@ -36,6 +38,10 @@ export class WorkspaceManagerService {
|
|||||||
private readonly dataSourceService: DataSourceService,
|
private readonly dataSourceService: DataSourceService,
|
||||||
private readonly workspaceSyncMetadataService: WorkspaceSyncMetadataService,
|
private readonly workspaceSyncMetadataService: WorkspaceSyncMetadataService,
|
||||||
private readonly permissionsService: PermissionsService,
|
private readonly permissionsService: PermissionsService,
|
||||||
|
@InjectRepository(FieldMetadataEntity, 'metadata')
|
||||||
|
private readonly fieldMetadataRepository: Repository<FieldMetadataEntity>,
|
||||||
|
@InjectRepository(RelationMetadataEntity, 'metadata')
|
||||||
|
private readonly relationMetadataRepository: Repository<RelationMetadataEntity>,
|
||||||
@InjectRepository(UserWorkspace, 'core')
|
@InjectRepository(UserWorkspace, 'core')
|
||||||
private readonly userWorkspaceRepository: Repository<UserWorkspace>,
|
private readonly userWorkspaceRepository: Repository<UserWorkspace>,
|
||||||
private readonly roleService: RoleService,
|
private readonly roleService: RoleService,
|
||||||
@ -184,6 +190,13 @@ export class WorkspaceManagerService {
|
|||||||
*/
|
*/
|
||||||
public async delete(workspaceId: string): Promise<void> {
|
public async delete(workspaceId: string): Promise<void> {
|
||||||
// Delete data from metadata tables
|
// Delete data from metadata tables
|
||||||
|
await this.relationMetadataRepository.delete({
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
|
await this.fieldMetadataRepository.delete({
|
||||||
|
workspaceId,
|
||||||
|
});
|
||||||
|
|
||||||
await this.objectMetadataService.deleteObjectsMetadata(workspaceId);
|
await this.objectMetadataService.deleteObjectsMetadata(workspaceId);
|
||||||
await this.workspaceMigrationService.deleteAllWithinWorkspace(workspaceId);
|
await this.workspaceMigrationService.deleteAllWithinWorkspace(workspaceId);
|
||||||
await this.dataSourceService.delete(workspaceId);
|
await this.dataSourceService.delete(workspaceId);
|
||||||
|
|||||||
Reference in New Issue
Block a user