Extract duplicate API path logic into helper functions in conformance and files stores

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-06 21:16:26 +08:00
parent c3d0add548
commit ec0035a182
2 changed files with 70 additions and 196 deletions

View File

@@ -17,6 +17,24 @@ import Swal from 'sweetalert2';
import { uploadFailedFirst, uploadFailedSecond, uploadloader, uploadSuccess, deleteSuccess } from '@/module/alertModal.js';
import { useLoadingStore } from '@/stores/loading';
/** Map of file type to API path segment. */
const FILE_TYPE_PATHS = {
'log': 'logs',
'filter': 'filters',
'log-check': 'log-checks',
'filter-check': 'filter-checks',
};
/**
* Returns the API base path for a file type and ID.
* @param {string} type - The file type.
* @param {number} id - The file ID.
* @returns {string} The API base path.
*/
function getFileApiBase(type, id) {
return `/api/${FILE_TYPE_PATHS[type]}/${id}`;
}
/** Pinia store for file CRUD operations and upload workflow. */
export const useFilesStore = defineStore('filesStore', {
state: () => ({
@@ -205,25 +223,9 @@ export const useFilesStore = defineStore('filesStore', {
fileName = this.uploadFileName;
}
let api;
const data = {"name": fileName};
switch (type) {
case 'log':
api = `/api/logs/${id}/name`;
break;
case 'filter':
api = `/api/filters/${id}/name`;
break;
case 'log-check':
api = `/api/log-checks/${id}/name`;
break;
case 'filter-check':
api = `/api/filter-checks/${id}/name`;
break;
}
try {
await apiClient.put(api, data);
await apiClient.put(`${getFileApiBase(type, id)}/name`, data);
this.uploadFileName = null;
await this.fetchAllFiles();
} catch(error) {
@@ -236,24 +238,8 @@ export const useFilesStore = defineStore('filesStore', {
* @param {number} id - The file ID.
*/
async getDependents(type, id) {
let api;
switch (type) {
case 'log':
api = `/api/logs/${id}/dependents`;
break;
case 'filter':
api = `/api/filters/${id}/dependents`;
break;
case 'log-check':
api = `/api/log-checks/${id}/dependents`;
break;
case 'filter-check':
api = `/api/filter-checks/${id}/dependents`;
break;
}
try {
const response = await apiClient.get(api);
const response = await apiClient.get(`${getFileApiBase(type, id)}/dependents`);
this.allDependentsData = response.data;
} catch(error) {
apiError(error, 'Failed to get Dependents of the files.');
@@ -265,30 +251,14 @@ export const useFilesStore = defineStore('filesStore', {
* @param {number} id - The file ID.
*/
async deleteFile(type, id) {
let api;
if(id === null || id === undefined || isNaN(id)) {
console.error('Delete File API Error: invalid id');
return;
};
const loading = useLoadingStore();
loading.isLoading = true;
switch (type) {
case 'log':
api = `/api/logs/${id}`;
break;
case 'filter':
api = `/api/filters/${id}`;
break;
case 'log-check':
api = `/api/log-checks/${id}`;
break;
case 'filter-check':
api = `/api/filter-checks/${id}`;
break;
}
try {
await apiClient.delete(api);
await apiClient.delete(getFileApiBase(type, id));
await this.fetchAllFiles();
await deleteSuccess();
} catch(error) {
@@ -322,26 +292,9 @@ export const useFilesStore = defineStore('filesStore', {
* @param {string} fileName - The file name.
*/
async downloadFileCSV(type, id, fileName) {
let api;
switch (type) {
case 'log':
api = `/api/logs/${id}/csv`;
break;
case 'filter':
api = `/api/filters/${id}/csv`;
break;
// case 'log-check':
// api = `/api/log-checks/${id}/csv`;
// break;
// case 'filter-check':
// api = `/api/filter-checks/${id}/csv`;
// break;
default:
return;
}
if (type !== 'log' && type !== 'filter') return;
try {
const response = await apiClient.get(api);
const response = await apiClient.get(`${getFileApiBase(type, id)}/csv`);
const csvData = response.data;
const blob = new Blob([csvData], { type: 'text/csv' });
const url = window.URL.createObjectURL(blob);