Files
aeroresolve_backend/src/modules/policy-engine/policy-engine.controller.ts
T

98 lines
2.8 KiB
TypeScript

import {
Controller,
Get,
Post,
Put,
Delete,
Patch,
Body,
Param,
Query,
UseGuards,
} from '@nestjs/common';
import { PolicyEngineService } from './policy-engine.service';
import { PolicyEvaluationService } from './policy-evaluation.service';
import type { EvaluationInput } from './services/master-value-resolver.service';
import { CreatePolicyDto } from './dto/create-policy.dto';
import { UpdatePolicyDto } from './dto/update-policy.dto';
import { PolicyStatus, AudienceType } from './entities/policy.enums';
import { PermissionsGuard } from '../auth/guards/permissions.guard';
import { RequirePermissions } from '../auth/decorators/permissions.decorator';
@Controller('policy-engine')
@UseGuards(PermissionsGuard)
export class PolicyEngineController {
constructor(
private readonly policyEngineService: PolicyEngineService,
private readonly policyEvaluationService: PolicyEvaluationService,
) { }
@Post('evaluate')
@RequirePermissions('simulation:execute', 'recovery:evaluate')
async evaluate(@Body() input: EvaluationInput) {
return this.policyEvaluationService.evaluateIncident(input);
}
@Post('evaluate-batch')
@RequirePermissions('simulation:execute', 'recovery:evaluate')
async evaluateBatch(@Body() inputs: EvaluationInput[]) {
const list = Array.isArray(inputs) ? inputs : [inputs];
return Promise.all(
list.map((item) => this.policyEvaluationService.evaluateIncident(item)),
);
}
@Post()
@RequirePermissions('policy_engine:create')
async create(@Body() createPolicyDto: CreatePolicyDto) {
return this.policyEngineService.create(createPolicyDto);
}
@Get()
@RequirePermissions('policy_engine:view')
async findAll(
@Query('page') page: string = '1',
@Query('limit') limit: string = '10',
@Query('status') status?: PolicyStatus,
@Query('audienceType') audienceType?: AudienceType,
) {
return this.policyEngineService.findAll(
Number(page),
Number(limit),
status,
audienceType,
);
}
@Get(':id')
@RequirePermissions('policy_engine:view')
async findOne(@Param('id') id: string) {
return this.policyEngineService.findOne(id);
}
@Put(':id')
@RequirePermissions('policy_engine:edit')
async update(
@Param('id') id: string,
@Body() updatePolicyDto: UpdatePolicyDto,
) {
return this.policyEngineService.update(id, updatePolicyDto);
}
@Patch(':id/status')
@RequirePermissions('policy_engine:publish', 'policy_engine:edit')
async updateStatus(
@Param('id') id: string,
@Body('status') status: PolicyStatus,
) {
return this.policyEngineService.updateStatus(id, status);
}
@Delete(':id')
@RequirePermissions('policy_engine:delete')
async remove(@Param('id') id: string) {
return this.policyEngineService.remove(id);
}
}