From 035510537aa27ac8e9e99c090fc952809862a50e Mon Sep 17 00:00:00 2001 From: "andrea.terzani" Date: Fri, 25 Oct 2024 19:22:02 +0200 Subject: [PATCH] Refactor project controller and user entity - Refactor the ProjectController class to add support for updating the selected application. - Update the User entity to include a selected application field. Related work items: #1234 --- .../controllers/ProjectController.java | 8 ++++- .../hermione/models/ScenarioExecution.java | 2 ++ .../hermione/security/entity/User.java | 4 +++ .../hermione/services/ProjectService.java | 32 ++++++------------- .../services/ScenarioExecutionService.java | 24 +++++++++++++- 5 files changed, 45 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/olympus/hermione/controllers/ProjectController.java b/src/main/java/com/olympus/hermione/controllers/ProjectController.java index d5622c7..e228eb8 100644 --- a/src/main/java/com/olympus/hermione/controllers/ProjectController.java +++ b/src/main/java/com/olympus/hermione/controllers/ProjectController.java @@ -8,7 +8,9 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import com.olympus.hermione.repository.ProjectRepository; +import com.olympus.hermione.security.entity.User; import com.olympus.hermione.services.ProjectService; +import com.olympus.model.Application; import com.olympus.model.Project; @RestController @@ -26,10 +28,14 @@ public class ProjectController { } @PostMapping("/updateSelectedProject") - public Boolean setSelectedProjects(@RequestBody Project projectId) { + public User setSelectedProjects(@RequestBody Project projectId) { return projectService.updateUserSelectedProject(projectId); } + @PostMapping("/updateSelectedApplication") + public User setSelectedApplication(@RequestBody Application application) { + return projectService.updateUserSelectedApplication(application); + } @PostMapping("/getProject") public Optional getUserProjects(@RequestBody String projectId) { return projectRepo.findById(projectId); diff --git a/src/main/java/com/olympus/hermione/models/ScenarioExecution.java b/src/main/java/com/olympus/hermione/models/ScenarioExecution.java index 53fdac4..a9ad069 100644 --- a/src/main/java/com/olympus/hermione/models/ScenarioExecution.java +++ b/src/main/java/com/olympus/hermione/models/ScenarioExecution.java @@ -28,6 +28,8 @@ public class ScenarioExecution { private String nextStepId; private String currentStepDescription; + private String executedByUserId; + private ScenarioExecutionInput scenarioExecutionInput; } diff --git a/src/main/java/com/olympus/hermione/security/entity/User.java b/src/main/java/com/olympus/hermione/security/entity/User.java index c73ef46..4763be0 100644 --- a/src/main/java/com/olympus/hermione/security/entity/User.java +++ b/src/main/java/com/olympus/hermione/security/entity/User.java @@ -9,6 +9,7 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; +import com.olympus.model.Application; import com.olympus.model.Project; import lombok.AllArgsConstructor; @@ -38,6 +39,9 @@ public class User implements UserDetails{ @DocumentReference private List lstProjects; + @DocumentReference + private Application selectedApplication; + private Role role; diff --git a/src/main/java/com/olympus/hermione/services/ProjectService.java b/src/main/java/com/olympus/hermione/services/ProjectService.java index 762ef38..c48455d 100644 --- a/src/main/java/com/olympus/hermione/services/ProjectService.java +++ b/src/main/java/com/olympus/hermione/services/ProjectService.java @@ -20,6 +20,7 @@ import com.olympus.hermione.models.ScenarioExecution; import com.olympus.hermione.repository.ProjectRepository; import com.olympus.hermione.security.entity.User; import com.olympus.hermione.security.repository.UserRepository; +import com.olympus.model.Application; import com.olympus.model.Project; @Service @@ -42,39 +43,24 @@ public class ProjectService { } - public Boolean updateUserSelectedProject(Project idProject){ + public User updateUserSelectedProject(Project idProject){ User principal = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); principal.setSelectedProject(idProject); User u = userRepo.save(principal); - - User principal2 = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - - return true; + return u; } + public User updateUserSelectedApplication(Application application){ + User principal = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - /* public static List convertToObjectIdList(List listProjectIds) { - List objectIdList = new ArrayList<>(); - ObjectMapper objectMapper = new ObjectMapper(); + principal.setSelectedApplication(application); + User u = userRepo.save(principal); + return u; - for (String jsonString : listProjectIds) { - try { - // Deserializza la stringa JSON in un oggetto mappa - Map map = objectMapper.readValue(jsonString, Map.class); - // Estrai il valore dell'ObjectId e creane un'istanza - String oid = map.get("$oid"); - if (oid != null) { - objectIdList.add(new ObjectId(oid)); - } - } catch (Exception e) { - e.printStackTrace(); // Gestione degli errori - } - } + } - return objectIdList; - } */ public static List convertToObjectIdList(List listProjectIds) { List objectIdList = new ArrayList<>(); diff --git a/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java b/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java index 74b813d..4c1fba2 100644 --- a/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java +++ b/src/main/java/com/olympus/hermione/services/ScenarioExecutionService.java @@ -20,6 +20,7 @@ import org.springframework.ai.vectorstore.VectorStore; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.scheduling.annotation.Async; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import com.olympus.hermione.dto.ScenarioExecutionInput; @@ -31,6 +32,7 @@ import com.olympus.hermione.models.ScenarioStep; import com.olympus.hermione.repository.AiModelRepository; import com.olympus.hermione.repository.ScenarioExecutionRepository; import com.olympus.hermione.repository.ScenarioRepository; +import com.olympus.hermione.security.entity.User; import com.olympus.hermione.stepSolvers.AdvancedAIPromptSolver; import com.olympus.hermione.stepSolvers.BasicAIPromptSolver; import com.olympus.hermione.stepSolvers.BasicQueryRagSolver; @@ -235,10 +237,30 @@ public class ScenarioExecutionService { Scenario scenario = o_scenario.get(); logger.info("Executing scenario: " + scenario.getName()); - + + ScenarioExecution scenarioExecution = new ScenarioExecution(); scenarioExecution.setScenario(scenario); scenarioExecution.setScenarioExecutionInput(scenarioExecutionInput); + + try{ + if( SecurityContextHolder.getContext() != null + && SecurityContextHolder.getContext().getAuthentication() != null + && SecurityContextHolder.getContext().getAuthentication().getPrincipal()!= null + ){ + + User principal = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + scenarioExecution.setExecutedByUserId(principal.getId()); + + scenarioExecutionInput.getInputs().put("selected_application", principal.getSelectedApplication().getInternal_name()); + scenarioExecutionInput.getInputs().put("selected_project", principal.getSelectedProject().getInternal_name()); + } + + }catch(Exception e){ + logger.error("Error while saving user information in scenario execution: " + e.getMessage()); + } + + scenarioExecutionRepository.save(scenarioExecution); scenarioOutput.setScenarioExecution_id(scenarioExecution.getId());