All files / libs/payout-calculation/statements/core/src/modules/statementOverwrites statementOverwrites.controller.ts

100% Statements 68/68
61.53% Branches 8/13
100% Functions 3/3
100% Lines 68/68

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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 691x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 4x 4x 4x 4x 4x 4x 4x 4x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 1x  
import { Body, Controller, Delete, Logger, Param, Post, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
 
import { Company, type Overwrite } from '@amalia/core/models';
import { UuidPipe } from '@amalia/kernel/api';
import {
  AmaliaAuthGuard,
  CheckPolicies,
  CurrentAuthenticatedContext,
  CurrentUserCompany,
  PoliciesGuard,
} from '@amalia/kernel/auth/core';
import { canOverwriteStatements, canSimulateForecastedStatements } from '@amalia/kernel/auth/shared';
import { type AuthenticatedContext } from '@amalia/kernel/auth/types';
 
import { CreateStatementOverwriteDto } from './dto/createStatementOverwrite.dto';
import { StatementOverwritesService } from './statementOverwrites.service';
 
@UseGuards(AmaliaAuthGuard, PoliciesGuard)
@ApiBearerAuth()
@ApiTags('statements')
@Controller('statements/:statementId/overwrites')
export class StatementOverwritesController {
  private readonly logger = new Logger(StatementOverwritesController.name);
 
  public constructor(private readonly statementOverwritesService: StatementOverwritesService) {}
 
  @Post()
  @CheckPolicies((ability) => canOverwriteStatements(ability) || canSimulateForecastedStatements(ability))
  public async createOverwrite(
    @Param('statementId', new UuidPipe()) statementId: string,
    @CurrentUserCompany() company: Company,
    @CurrentAuthenticatedContext() authenticatedContext: AuthenticatedContext,
    @Body() createStatementOverwriteDto: CreateStatementOverwriteDto,
  ): Promise<Overwrite> {
    const statement = await this.statementOverwritesService.findStatementToOverwrite(
      company,
      authenticatedContext,
      statementId,
      createStatementOverwriteDto.scope,
    );
 
    return this.statementOverwritesService.createStatementOverwrite(
      company,
      authenticatedContext,
      statement,
      createStatementOverwriteDto,
    );
  }
 
  @Delete('/:overwriteId')
  @CheckPolicies((ability) => canOverwriteStatements(ability) || canSimulateForecastedStatements(ability))
  public async deleteOverwrite(
    @Param('statementId', new UuidPipe()) statementId: string,
    @Param('overwriteId', new UuidPipe()) overwriteId: string,
    @CurrentUserCompany() company: Company,
    @CurrentAuthenticatedContext() authenticatedContext: AuthenticatedContext,
  ) {
    this.logger.log(`Clear overwrite ${overwriteId}`);
 
    return this.statementOverwritesService.clearStatementOverwrite(
      company,
      overwriteId,
      authenticatedContext,
      statementId,
    );
  }
}