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 | 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 1x 1x 1x 1x 4x 4x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 1x 1x 1x 1x 1x 1x 1x 1x 6x 6x 6x 6x 6x 6x 6x 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 1x | import { Body, Controller, Delete, Get, Logger, Param, Patch, Post, Put, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { Company, type Rule } from '@amalia/core/models';
import { UuidPipe } from '@amalia/kernel/api';
import {
AmaliaAuthGuard,
CheckPolicies,
CurrentAuthenticatedContext,
CurrentUserCompany,
PoliciesGuard,
} from '@amalia/kernel/auth/core';
import { canModifyPlans, canViewPlanTokens } from '@amalia/kernel/auth/shared';
import { type AuthenticatedContext } from '@amalia/kernel/auth/types';
import { CreateRuleDto, UpdateRuleDto } from './dto/create-rule.dto';
import { PatchRuleDTO } from './dto/patch-rule.dto';
import { RulesService } from './rules.service';
import { CreateRuleUseCase } from './use-cases/create-rule.use-case';
import { DeleteRuleUseCase } from './use-cases/delete-rule.use-case';
import { PatchRuleUseCase } from './use-cases/patch-rule.use-case';
import { UpdateRuleUseCase } from './use-cases/update-rule.use-case';
@UseGuards(AmaliaAuthGuard, PoliciesGuard)
@ApiBearerAuth()
@ApiTags('rules')
@Controller('rules')
export class RulesController {
private readonly logger = new Logger(RulesController.name);
public constructor(
private readonly ruleService: RulesService,
private readonly createRuleUseCase: CreateRuleUseCase,
private readonly patchRuleUseCase: PatchRuleUseCase,
private readonly updateRuleUseCase: UpdateRuleUseCase,
private readonly deleteRuleUseCase: DeleteRuleUseCase,
) {}
@Get()
@CheckPolicies((ability) => canViewPlanTokens(ability))
public async findAll(@CurrentUserCompany() company: Company): Promise<Rule[]> {
return this.ruleService.findAll(company);
}
@Post()
@CheckPolicies((ability) => canModifyPlans(ability))
public async create(
@CurrentAuthenticatedContext() authenticatedContext: AuthenticatedContext,
@Body() rule: CreateRuleDto,
): Promise<Rule> {
this.logger.log(`Creates new rule ${rule.name}`);
return this.createRuleUseCase.execute({ authenticatedContext, rule });
}
@Patch(':ruleId')
@CheckPolicies((ability) => canModifyPlans(ability))
public async patch(
@CurrentAuthenticatedContext() authenticatedContext: AuthenticatedContext,
@Param('ruleId', new UuidPipe()) ruleId: Rule['id'],
@Body() patchRuleRequest: PatchRuleDTO,
): Promise<Rule> {
return this.patchRuleUseCase.execute({ authenticatedContext, ruleId, request: patchRuleRequest });
}
@Put(':id')
@CheckPolicies((ability) => canModifyPlans(ability))
public async update(
@CurrentAuthenticatedContext() authenticatedContext: AuthenticatedContext,
@Param('id', new UuidPipe()) id: string,
@Body() rule: UpdateRuleDto,
): Promise<Rule> {
this.logger.log(`Update rule ${id}`);
return this.updateRuleUseCase.execute({ authenticatedContext, rule, id });
}
@Delete(':ruleId')
@CheckPolicies((ability) => canModifyPlans(ability))
public async delete(
@Param('ruleId', new UuidPipe()) ruleId: string,
@CurrentAuthenticatedContext() authenticatedContext: AuthenticatedContext,
): Promise<Rule> {
this.logger.log(`Delete rule ${ruleId}`);
return this.deleteRuleUseCase.execute({ ruleId, authenticatedContext });
}
}
|