All files / libs/payout-calculation/compute-engine/core-plan-template/src/planTemplate planTemplate.controller.ts

69.23% Statements 27/39
25% Branches 1/4
50% Functions 1/2
69.23% Lines 27/39

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 401x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 7x 7x 7x 1x 1x 1x 1x                         1x  
import { Controller, Get, Param, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
 
import { EngineError } from '@amalia/core/types';
import { UuidPipe } from '@amalia/kernel/api';
import { AmaliaAuthGuard, CheckPolicies, CurrentAuthenticatedContext, PoliciesGuard } from '@amalia/kernel/auth/core';
import { canViewPlans } from '@amalia/kernel/auth/shared';
import { type AuthenticatedContext } from '@amalia/kernel/auth/types';
import { PlanTemplateDehydrated } from '@amalia/payout-calculation/types';
import { CompaniesService } from '@amalia/tenants/companies/core';
 
import { PlanTemplateService } from './planTemplate.service';
 
@UseGuards(AmaliaAuthGuard, PoliciesGuard)
@ApiBearerAuth()
@ApiTags('planTemplate')
@Controller()
export class PlanTemplateController {
  public constructor(
    private readonly planTemplateService: PlanTemplateService,
    private readonly companiesService: CompaniesService,
  ) {}
 
  @Get('/plans/:id/analyze')
  @CheckPolicies((ability) => canViewPlans(ability))
  public async analyze(
    @Param('id', new UuidPipe()) id: string,
    @CurrentAuthenticatedContext() authenticatedContext: AuthenticatedContext,
  ): Promise<{ planTemplate: PlanTemplateDehydrated | null; error?: EngineError }> {
    const company = await this.companiesService.findById(authenticatedContext.user.companyId);

    const { planTemplate, error } = await this.planTemplateService.buildPlanTemplateStandalone(company, id);

    return {
      planTemplate,
      error: error?.getError(),
    };
  }
}