All files / apps/api/src/modules/sampleData/handlers purgeCompanyDataHandler.ts

90% Statements 36/40
42.85% Branches 3/7
100% Functions 2/2
90% Lines 36/40

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 411x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x         1x 1x 1x 1x  
import { Logger } from '@nestjs/common';
import { CommandHandler, type ICommandHandler } from '@nestjs/cqrs';
import { pick } from 'lodash-es';
import { UnknownRecord } from 'type-fest';
 
import { PurgeCompanyDataCommand } from '@amalia/core/models';
import { AppLogger, InjectAppLogger, withLoggerContext } from '@amalia/kernel/logger/server';
import { AUDIT_DATASET_NAME } from '@amalia/tenants/monitoring/audit/core';
import { BigQueryService } from '@amalia/vendors/google-cloud/big-query';
 
import { SampleDataService } from '../sampleData.service';
 
@CommandHandler(PurgeCompanyDataCommand)
export class PurgeCompanyDataHandler implements ICommandHandler<PurgeCompanyDataCommand> {
  private readonly logger = new Logger(PurgeCompanyDataHandler.name);
 
  public constructor(
    @InjectAppLogger(PurgeCompanyDataHandler.name)
    private readonly appLogger: AppLogger,
    private readonly sampleDataService: SampleDataService,
    private readonly bigQueryService: BigQueryService,
  ) {}
 
  public async execute(command: PurgeCompanyDataCommand): Promise<void> {
    const { company } = command;
 
    await withLoggerContext(this.appLogger, { company: pick(company, ['id', 'name']) }, async () => {
      this.logger.log(`Purge Company data`);
      await this.sampleDataService.purgeCompanyData(company);
      try {
        await this.bigQueryService.deleteTable(AUDIT_DATASET_NAME, company.slug);
      } catch (e) {
        if ((e as UnknownRecord)['code'] !== 404) {
          throw e;
        }
      }
      this.logger.log(`Company data fully purged`);
    });
  }
}