98 lines
2.8 KiB
TypeScript
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);
|
|
}
|
|
}
|
|
|