WorkflowValidationController.java
package com.licensis.notaire.api;
import com.licensis.notaire.repository.WorkflowDefinitionRepository;
import com.licensis.notaire.repository.WorkflowNodeRepository;
import com.licensis.notaire.repository.WorkflowTransitionRepository;
import com.licensis.notaire.service.WorkflowValidationService;
import com.licensis.notaire.service.WorkflowValidationService.ValidationResult;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/api/v1/workflow-definition")
@Tag(name = "Workflow Validation", description = "CU72 - Validación de consistencia del workflow")
public class WorkflowValidationController {
private final WorkflowDefinitionRepository workflowRepository;
private final WorkflowNodeRepository nodeRepository;
private final WorkflowTransitionRepository transitionRepository;
private final WorkflowValidationService validationService;
public WorkflowValidationController(WorkflowDefinitionRepository workflowRepository,
WorkflowNodeRepository nodeRepository,
WorkflowTransitionRepository transitionRepository,
WorkflowValidationService validationService) {
this.workflowRepository = workflowRepository;
this.nodeRepository = nodeRepository;
this.transitionRepository = transitionRepository;
this.validationService = validationService;
}
@PostMapping("/{id}/validate")
@Operation(summary = "Validar consistencia de un workflow")
public ResponseEntity<Map<String, Object>> validate(@PathVariable Integer id) {
if (!workflowRepository.existsById(id)) {
return ResponseEntity.notFound().build();
}
ValidationResult result = validationService.validate(
nodeRepository.findByWorkflowDefinitionId(id),
transitionRepository.findByWorkflowDefinitionId(id));
return ResponseEntity.ok(Map.of(
"valid", result.isValid(),
"errors", result.getErrors()));
}
}