Spaces:
Build error
Build error
File size: 4,085 Bytes
9373c61 5cfe5c4 |
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 |
package com.dalab.policyengine.web.rest;
import java.net.URI;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import com.dalab.common.security.SecurityUtils;
import com.dalab.policyengine.dto.PolicyEvaluationOutputDTO;
import com.dalab.policyengine.dto.PolicyEvaluationRequestDTO;
import com.dalab.policyengine.dto.PolicyEvaluationSummaryDTO;
import com.dalab.policyengine.service.IPolicyEvaluationService;
import jakarta.validation.Valid;
@RestController
@RequestMapping("/api/v1/policyengine")
public class PolicyEvaluationController {
private static final Logger log = LoggerFactory.getLogger(PolicyEvaluationController.class);
private final IPolicyEvaluationService policyEvaluationService;
@Autowired
public PolicyEvaluationController(IPolicyEvaluationService policyEvaluationService) {
this.policyEvaluationService = policyEvaluationService;
}
@PostMapping("/{policyId}/evaluations")
@PreAuthorize("hasAnyAuthority('ROLE_ADMIN', 'ROLE_SYSTEM')")
public ResponseEntity<PolicyEvaluationOutputDTO> triggerPolicyEvaluation(
@PathVariable UUID policyId,
@Valid @RequestBody PolicyEvaluationRequestDTO evaluationRequest) {
log.info("REST request to trigger evaluation for Policy: {}", policyId);
UUID triggeredByUserId = SecurityUtils.getAuthenticatedUserId(); // Can be null if system-triggered via Kafka
PolicyEvaluationOutputDTO evaluation = policyEvaluationService.triggerPolicyEvaluation(policyId, evaluationRequest, triggeredByUserId);
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{evaluationId}")
.buildAndExpand(evaluation.getId())
.toUri();
return ResponseEntity.created(location).body(evaluation);
}
@GetMapping("/evaluations")
@PreAuthorize("hasAnyAuthority('ROLE_ADMIN', 'ROLE_POLICY_MANAGER', 'ROLE_AUDITOR')")
public ResponseEntity<Page<PolicyEvaluationSummaryDTO>> getPolicyEvaluations(
@PageableDefault(size = 50, sort = "evaluatedAt") Pageable pageable,
@RequestParam(required = false) UUID policyId,
@RequestParam(required = false) String targetAssetId,
@RequestParam(required = false) String status) {
log.info("REST request to get Policy Evaluations with filters: policyId={}, targetAssetId={}, status={}", policyId, targetAssetId, status);
Page<PolicyEvaluationSummaryDTO> resultPage = policyEvaluationService.getPolicyEvaluations(pageable, policyId, targetAssetId, status);
return ResponseEntity.ok(resultPage);
}
@GetMapping("/evaluations/{evaluationId}")
@PreAuthorize("hasAnyAuthority('ROLE_ADMIN', 'ROLE_POLICY_MANAGER', 'ROLE_AUDITOR')")
public ResponseEntity<PolicyEvaluationOutputDTO> getPolicyEvaluationById(@PathVariable UUID evaluationId) {
log.info("REST request to get Policy Evaluation by id: {}", evaluationId);
PolicyEvaluationOutputDTO evaluationDTO = policyEvaluationService.getPolicyEvaluationById(evaluationId);
return ResponseEntity.ok(evaluationDTO);
}
} |