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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | 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 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 10x 1x 1x 1x 1x 4x 4x 4x 4x 4x 4x 4x 4x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 1x | import { Body, Controller, Delete, Get, Inject, Patch, Post, Query, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { Company, type PlanAssignment } from '@amalia/core/models';
import { Relations, UuidPipe } from '@amalia/kernel/api';
import {
AmaliaAuthGuard,
CheckPolicies,
CurrentAuthenticatedContext,
CurrentUserCompany,
PoliciesGuard,
} from '@amalia/kernel/auth/core';
import { canModifyPlanAssignments, canViewPlanAssignments } from '@amalia/kernel/auth/shared';
import { type AuthenticatedContext } from '@amalia/kernel/auth/types';
import { UpsertPlanAssignmentsDryRunResponse } from '@amalia/payout-definition/plans/types';
import {
DeletePlanAssignmentsUseCase,
UpdatePlanAssignmentsUseCase,
UpsertPlanAssignmentsUseCase,
} from '../lib/plan-assignment.core-module';
import { ValidatePlanAssignmentsCsvUseCase } from '../lib/use-cases/validate-plan-assignments-csv.use-case';
import { DeletePlanAssignmentsDto } from './dto/delete-plan-assignments.dto';
import { UpdatePlanAssignmentsDto } from './dto/update-plan-assignments.dto';
import { UpsertPlanAssignmentsDto } from './dto/upsert-plan-assignments.dto';
import { ValidatePlanAssignmentsCsvDto } from './dto/validate-plan-assignments-csv.dto';
import { PlansAssignmentsService } from './plan-assignments.service';
@UseGuards(AmaliaAuthGuard, PoliciesGuard)
@ApiBearerAuth()
@ApiTags('assignments')
@Controller('plan-assignments')
export class PlansAssignmentsController {
public constructor(
@Inject(PlansAssignmentsService)
private readonly planAssignmentService: PlansAssignmentsService,
private readonly validatePlanAssignmentsCsvUseCase: ValidatePlanAssignmentsCsvUseCase,
private readonly upsertPlanAssignmentsUseCase: UpsertPlanAssignmentsUseCase,
private readonly updatePlanAssignmentsUseCase: UpdatePlanAssignmentsUseCase,
private readonly deletePlanAssignmentsUseCase: DeletePlanAssignmentsUseCase,
) {}
@Get()
@CheckPolicies((ability) => canViewPlanAssignments(ability))
public async findAll(
@CurrentUserCompany() company: Company,
@Query('planId', new UuidPipe({ multiple: true, optional: true })) planIds?: string[],
@Query('userId', new UuidPipe({ optional: true })) userId?: string,
@Relations('company,plan,user,mainTeam') relations?: string[],
): Promise<PlanAssignment[]> {
return this.planAssignmentService.findAll(
company.id,
planIds || null,
userId ? [userId] : null,
undefined,
relations,
);
}
@Post()
@CheckPolicies((ability) => canModifyPlanAssignments(ability))
public async upsert(
@CurrentAuthenticatedContext() authenticatedContext: AuthenticatedContext,
@Body() upsertPlanAssignmentsDto: UpsertPlanAssignmentsDto,
): Promise<PlanAssignment[]> {
return this.upsertPlanAssignmentsUseCase.execute({
authenticatedContext,
upsertPlanAssignmentsRequest: upsertPlanAssignmentsDto,
});
}
@Post('validate')
@CheckPolicies((ability) => canModifyPlanAssignments(ability))
public async validateCsv(
@CurrentAuthenticatedContext() authenticatedContext: AuthenticatedContext,
@Body() dto: ValidatePlanAssignmentsCsvDto,
): Promise<UpsertPlanAssignmentsDryRunResponse> {
return this.validatePlanAssignmentsCsvUseCase.execute({
authenticatedContext,
request: dto,
});
}
@Patch()
@CheckPolicies((ability) => canModifyPlanAssignments(ability))
public async update(
@CurrentAuthenticatedContext() authenticatedContext: AuthenticatedContext,
@Body() updatePlanAssignmentsDto: UpdatePlanAssignmentsDto,
): Promise<PlanAssignment[]> {
return this.updatePlanAssignmentsUseCase.execute({
authenticatedContext,
updatePlanAssignmentsRequest: updatePlanAssignmentsDto,
});
}
@Delete()
@CheckPolicies((ability) => canModifyPlanAssignments(ability))
public async delete(
@CurrentAuthenticatedContext() authenticatedContext: AuthenticatedContext,
@Body() deletePlanAssignmentsDto: DeletePlanAssignmentsDto,
): Promise<void> {
await this.deletePlanAssignmentsUseCase.execute({
authenticatedContext,
deletePlanAssignmentsRequest: deletePlanAssignmentsDto,
});
}
}
|