From b1c70c5fbf40eccc542a5b2a7566bc249431b0e8 Mon Sep 17 00:00:00 2001 From: Emanuele Ferrelli Date: Wed, 5 Nov 2025 16:34:22 +0100 Subject: [PATCH] Create document picklist and refactor axios call --- src/components/DynamicPicker.vue | 228 +++++++++++++++++ src/service/FileUploadService.js | 21 ++ src/service/KSDocumentService.js | 28 +++ src/service/ScenarioService.js | 57 +++-- src/stores/FileUploadStore.js | 55 +++++ src/stores/ScenarioExecutionStore.js | 77 +++++- src/views/pages/ScenarioExec.vue | 351 +++++++++++++++++---------- 7 files changed, 662 insertions(+), 155 deletions(-) create mode 100644 src/components/DynamicPicker.vue create mode 100644 src/service/FileUploadService.js create mode 100644 src/service/KSDocumentService.js create mode 100644 src/stores/FileUploadStore.js diff --git a/src/components/DynamicPicker.vue b/src/components/DynamicPicker.vue new file mode 100644 index 0000000..f39aceb --- /dev/null +++ b/src/components/DynamicPicker.vue @@ -0,0 +1,228 @@ + + + + + diff --git a/src/service/FileUploadService.js b/src/service/FileUploadService.js new file mode 100644 index 0000000..49405c8 --- /dev/null +++ b/src/service/FileUploadService.js @@ -0,0 +1,21 @@ +import axios from 'axios'; + +export const FileUploadService = { + /** + * Elimina un file dal server + * @param {string} fileName - Nome del file da eliminare + * @param {string} folderName - Nome della cartella contenente il file + * @returns {Promise} Promise con la risposta del server + */ + deleteFile(fileName, folderName) { + return axios.post( + '/deleteFile', + { fileName, folderName }, + { + headers: { + 'Content-Type': 'application/json' + } + } + ); + } +}; diff --git a/src/service/KSDocumentService.js b/src/service/KSDocumentService.js new file mode 100644 index 0000000..c736377 --- /dev/null +++ b/src/service/KSDocumentService.js @@ -0,0 +1,28 @@ +import axios from 'axios'; + +export const KSDocumentService = { + /** + * Recupera tutti i KSDocument per il progetto selezionato dall'utente corrente + * @returns {Promise} Promise con la lista di KSDocument + */ + getKSDocuments() { + return axios.get('/ksDocuments'); + }, + + /** + * Recupera tutti i KSDocument completati per il progetto selezionato dall'utente corrente + * @returns {Promise} Promise con la lista di KSDocument completati + */ + getCompletedKSDocuments() { + return axios.get('/ksDocuments/completed'); + }, + + /** + * Recupera tutti i KSDocument per un progetto specifico + * @param {string} projectId - ID del progetto + * @returns {Promise} Promise con la lista di KSDocument + */ + getKSDocumentsByProject(projectId) { + return axios.post('/ksDocuments/byProject', projectId); + } +}; diff --git a/src/service/ScenarioService.js b/src/service/ScenarioService.js index 99306bb..867c0ab 100644 --- a/src/service/ScenarioService.js +++ b/src/service/ScenarioService.js @@ -1,39 +1,52 @@ import axios from 'axios'; export const ScenarioService = { - getScenarios() { - return axios.get('/scenarios') - + return axios.get('/scenarios'); }, getScenariosProject(projectId) { - return axios.post('/scenariosProject' , projectId) - + return axios.post('/scenariosProject', projectId); }, getScenariosApplication(app) { - return axios.post('/scenariosByApp' , app) - + return axios.post('/scenariosByApp', app); }, getScenariosCross() { - return axios.get('/scenariosCross') - + return axios.get('/scenariosCross'); }, getExecScenariosByUser(page = 0, size = 10, filters = {}, sortField, sortOrder) { // Filtri potrebbero essere vuoti, quindi rimuoviamoli se non necessari - const requestBody = { page, size, ...filters, sortField, sortOrder }; + const requestBody = { page, size, ...filters, sortField, sortOrder }; return axios.post('/executions', requestBody); - } - - , - getScenariosForRE(){ - return axios.get('/getScenariosForRE') - }, - updateScenarioExecRating(id, rating) { - return axios.get('/updateRating?id=' + id + '&rating=' + rating) }, - getExecScenarioByProject () { - return axios.get('/getExecScenarioByProject') - } + getScenariosForRE() { + return axios.get('/getScenariosForRE'); + }, + updateScenarioExecRating(id, rating) { + return axios.get('/updateRating?id=' + id + '&rating=' + rating); + }, -} \ No newline at end of file + getExecScenarioByProject() { + return axios.get('/getExecScenarioByProject'); + }, + + // Nuovo metodo per recuperare un singolo scenario + getScenarioById(id) { + return axios.get(`/scenarios/${id}`); + }, + + // Nuovo metodo per eseguire uno scenario in modo asincrono + executeScenarioAsync(data) { + return axios.post('/scenarios/execute-async', data); + }, + + // Nuovo metodo per recuperare i dettagli di esecuzione di uno scenario + getScenarioExecution(execId) { + return axios.get('/scenarios/execute/' + execId); + }, + + // Nuovo metodo per recuperare il progresso di esecuzione + getExecutionProgress(execId) { + return axios.get('/scenarios/getExecutionProgress/' + execId); + } +}; diff --git a/src/stores/FileUploadStore.js b/src/stores/FileUploadStore.js new file mode 100644 index 0000000..f24b2db --- /dev/null +++ b/src/stores/FileUploadStore.js @@ -0,0 +1,55 @@ +import { defineStore } from 'pinia'; +import { ref } from 'vue'; +import { FileUploadService } from '../service/FileUploadService'; + +export const FileUploadStore = defineStore('file_upload_store', () => { + const uploadedFiles = ref([]); + const folderName = ref(''); + const numberPrFiles = ref(0); + + // Funzione per eliminare un file + async function deleteFile(fileName, folderName) { + try { + const response = await FileUploadService.deleteFile(fileName, folderName); + return response; + } catch (error) { + console.error('Error deleting file:', error); + throw error; + } + } + + // Funzione per generare un ID univoco per la cartella + function generateUniqueFolderId() { + const timestamp = Date.now(); + const randomNumber = Math.floor(Math.random() * 1000); + const newFolderName = `${timestamp}_${randomNumber}`; + folderName.value = newFolderName; + return newFolderName; + } + + // Funzione per resettare lo store + function resetStore() { + uploadedFiles.value = []; + folderName.value = ''; + numberPrFiles.value = 0; + } + + // Funzione per aggiornare il numero di file PR + function updatePrFilesCount(increment = true) { + if (increment) { + numberPrFiles.value += 1; + } else { + numberPrFiles.value -= 1; + } + } + + return { + uploadedFiles, + folderName, + numberPrFiles, + deleteFile, + generateUniqueFolderId, + resetStore, + updatePrFilesCount + }; +}); diff --git a/src/stores/ScenarioExecutionStore.js b/src/stores/ScenarioExecutionStore.js index 9dd79f5..544360f 100644 --- a/src/stores/ScenarioExecutionStore.js +++ b/src/stores/ScenarioExecutionStore.js @@ -1,11 +1,15 @@ import { defineStore } from 'pinia'; import { computed, ref } from 'vue'; import { ScenarioExecutionService } from '../service/ScenarioExecutionService'; +import { ScenarioService } from '../service/ScenarioService'; import { LoadingStore } from './LoadingStore'; export const ScenarioExecutionStore = defineStore('scenario_execution_store', () => { const lstScenarioExecution = ref([]); const selectedExecScenario = ref(null); + const currentScenario = ref({}); + const currentExecution = ref(null); + const executionProgress = ref(null); const loadingStore = LoadingStore(); const totalRecords = ref(0); // Numero totale di record @@ -30,6 +34,53 @@ export const ScenarioExecutionStore = defineStore('scenario_execution_store', () } } + // Funzione per recuperare un singolo scenario + async function fetchScenario(id) { + try { + const response = await ScenarioService.getScenarioById(id); + currentScenario.value = response.data; + return response.data; + } catch (error) { + console.error('Error fetching scenario:', error); + throw error; + } + } + + // Funzione per eseguire uno scenario + async function executeScenario(data) { + try { + const response = await ScenarioService.executeScenarioAsync(data); + currentExecution.value = response.data; + return response.data; + } catch (error) { + console.error('Error executing scenario:', error); + throw error; + } + } + + // Funzione per recuperare i dettagli di esecuzione + async function getScenarioExecution(execId) { + try { + const response = await ScenarioService.getScenarioExecution(execId); + return response.data; + } catch (error) { + console.error('Error getting scenario execution:', error); + throw error; + } + } + + // Funzione per recuperare il progresso di esecuzione + async function getExecutionProgress(execId) { + try { + const response = await ScenarioService.getExecutionProgress(execId); + executionProgress.value = response.data; + return response.data; + } catch (error) { + console.error('Error getting execution progress:', error); + throw error; + } + } + async function downloadFile(filePath, executionId) { loadingStore.scenario_loading = true; try { @@ -80,6 +131,18 @@ export const ScenarioExecutionStore = defineStore('scenario_execution_store', () return totalRecords.value; }); + const getCurrentScenario = computed(() => { + return currentScenario.value; + }); + + const getCurrentExecution = computed(() => { + return currentExecution.value; + }); + + const getExecutionProgressData = computed(() => { + return executionProgress.value; + }); + const setSelectedExecScenario = (execScenario) => { selectedExecScenario.value = execScenario; }; @@ -96,6 +159,9 @@ export const ScenarioExecutionStore = defineStore('scenario_execution_store', () const resetStore = () => { lstScenarioExecution.value = []; selectedExecScenario.value = null; + currentScenario.value = {}; + currentExecution.value = null; + executionProgress.value = null; totalRecords.value = 0; currentPage.value = 0; pageSize.value = 10; @@ -106,15 +172,22 @@ export const ScenarioExecutionStore = defineStore('scenario_execution_store', () getCurrentPage, getPageSize, getTotalRecords, + getCurrentScenario, + getCurrentExecution, + getExecutionProgressData, fetchScenariosExecution, + fetchScenario, + executeScenario, + getScenarioExecution, + getExecutionProgress, downloadFile, selectedExecScenario, lstScenarioExecution, scenariosExecution, getSelectedExecScenario, setSelectedExecScenario, - updateFilters, // Aggiunto per aggiornare i filtri + updateFilters, filters, - resetStore // Rende disponibile i filtri come parte dello store + resetStore }; }); diff --git a/src/views/pages/ScenarioExec.vue b/src/views/pages/ScenarioExec.vue index 741fbec..322375e 100644 --- a/src/views/pages/ScenarioExec.vue +++ b/src/views/pages/ScenarioExec.vue @@ -148,12 +148,18 @@
- -
- -
+