194 lines
6.3 KiB
JavaScript
194 lines
6.3 KiB
JavaScript
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
|
|
const currentPage = ref(0); // Pagina corrente
|
|
const pageSize = ref(10); // Numero di record per pagina
|
|
const filters = ref({}); // Oggetto per memorizzare i filtri
|
|
|
|
// Funzione per recuperare le esecuzioni con filtri e paginazione
|
|
async function fetchScenariosExecution(page = 0, size = 10, filters, sortField, sortOrder) {
|
|
loadingStore.scenario_loading = true;
|
|
try {
|
|
console.log('Fetching executions with filters:', page, size, filters, sortField, sortOrder);
|
|
const resp = await ScenarioExecutionService.getExecScenariosByUser(page, size, filters, sortField, sortOrder);
|
|
lstScenarioExecution.value = resp.data.content;
|
|
totalRecords.value = resp.data.totalElements;
|
|
currentPage.value = page;
|
|
pageSize.value = size;
|
|
} catch (error) {
|
|
console.error('Error fetching executions:', error);
|
|
} finally {
|
|
loadingStore.scenario_loading = false;
|
|
}
|
|
}
|
|
|
|
// 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 {
|
|
const response = await ScenarioExecutionService.downloadFile(filePath, executionId);
|
|
|
|
// Crea un URL per il blob e avvia il download
|
|
const url = window.URL.createObjectURL(new Blob([response.data]));
|
|
const link = document.createElement('a');
|
|
link.href = url;
|
|
|
|
// Estrae il nome del file dal filePath o usa un nome di default
|
|
const fileName = filePath.split('/').pop() || `file_${executionId}`;
|
|
link.setAttribute('download', fileName);
|
|
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
|
|
// Cleanup
|
|
link.remove();
|
|
window.URL.revokeObjectURL(url);
|
|
|
|
return response;
|
|
} catch (error) {
|
|
console.error('Error downloading file:', error);
|
|
throw error;
|
|
} finally {
|
|
loadingStore.scenario_loading = false;
|
|
}
|
|
}
|
|
|
|
const scenariosExecution = computed(() => {
|
|
return lstScenarioExecution.value;
|
|
});
|
|
|
|
const getSelectedExecScenario = computed(() => {
|
|
return selectedExecScenario.value;
|
|
});
|
|
|
|
const getCurrentPage = computed(() => {
|
|
return currentPage.value;
|
|
});
|
|
|
|
const getPageSize = computed(() => {
|
|
return pageSize.value;
|
|
});
|
|
|
|
const getTotalRecords = computed(() => {
|
|
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;
|
|
};
|
|
|
|
// Funzione per aggiornare i filtri
|
|
const updateFilters = (newFilters) => {
|
|
console.log('New filters:', newFilters);
|
|
filters.value = newFilters;
|
|
filters.value = encodeURIComponent(JSON.stringify(newFilters));
|
|
fetchScenariosExecution(currentPage.value, pageSize.value, filters.value); // Ricarica con i nuovi filtri
|
|
};
|
|
|
|
// Funzione per resettare lo 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;
|
|
filters.value = {};
|
|
};
|
|
|
|
return {
|
|
getCurrentPage,
|
|
getPageSize,
|
|
getTotalRecords,
|
|
getCurrentScenario,
|
|
getCurrentExecution,
|
|
getExecutionProgressData,
|
|
fetchScenariosExecution,
|
|
fetchScenario,
|
|
executeScenario,
|
|
getScenarioExecution,
|
|
getExecutionProgress,
|
|
downloadFile,
|
|
selectedExecScenario,
|
|
lstScenarioExecution,
|
|
scenariosExecution,
|
|
getSelectedExecScenario,
|
|
setSelectedExecScenario,
|
|
updateFilters,
|
|
filters,
|
|
resetStore
|
|
};
|
|
});
|