247 lines
6.7 KiB
TypeScript
247 lines
6.7 KiB
TypeScript
import { defineStore } from 'pinia';
|
|
import { ref } from 'vue';
|
|
import downloadService from '@/services/download';
|
|
import databaseService from '@/services/database';
|
|
import { getApiBaseUrl } from '@/services/api';
|
|
|
|
export interface RegistryStats {
|
|
totalArtists: number;
|
|
totalArtworks: number;
|
|
lastUpdated: string;
|
|
}
|
|
|
|
export interface RegistryConfig {
|
|
useRegistryCheck: boolean;
|
|
fallbackToScan: boolean;
|
|
storageMode?: 'json' | 'database';
|
|
}
|
|
|
|
export const useRegistryStore = defineStore('registry', () => {
|
|
// 状态
|
|
const stats = ref<RegistryStats | null>(null);
|
|
const config = ref<RegistryConfig>({
|
|
useRegistryCheck: true,
|
|
fallbackToScan: false,
|
|
storageMode: 'json'
|
|
});
|
|
const loading = ref(false);
|
|
const error = ref<string | null>(null);
|
|
|
|
// 获取注册表统计信息
|
|
const fetchStats = async (useDatabase = false) => {
|
|
try {
|
|
loading.value = true;
|
|
error.value = null;
|
|
|
|
let response;
|
|
if (useDatabase) {
|
|
response = await databaseService.getRegistryStats();
|
|
} else {
|
|
response = await downloadService.getRegistryStats();
|
|
}
|
|
|
|
if (response.success) {
|
|
// 映射API响应数据到组件期望的格式
|
|
stats.value = {
|
|
totalArtists: response.data.artistCount || 0,
|
|
totalArtworks: response.data.artworkCount || 0,
|
|
lastUpdated: response.data.updated_at || response.data.created_at || ''
|
|
};
|
|
} else {
|
|
throw new Error(response.error || '获取统计信息失败');
|
|
}
|
|
} catch (err: any) {
|
|
error.value = err.message || '获取统计信息失败';
|
|
console.error('获取注册表统计信息失败:', err);
|
|
} finally {
|
|
loading.value = false;
|
|
}
|
|
};
|
|
|
|
// 导出注册表
|
|
const exportRegistry = async (useDatabase = false) => {
|
|
try {
|
|
loading.value = true;
|
|
error.value = null;
|
|
|
|
let response;
|
|
if (useDatabase) {
|
|
response = await databaseService.exportRegistry();
|
|
} else {
|
|
response = await downloadService.exportRegistry();
|
|
}
|
|
|
|
if (response.success) {
|
|
return { success: true, data: response.data };
|
|
} else {
|
|
throw new Error(response.error || '导出注册表失败');
|
|
}
|
|
} catch (err: any) {
|
|
error.value = err.message || '导出注册表失败';
|
|
console.error('导出注册表失败:', err);
|
|
return { success: false, error: error.value };
|
|
} finally {
|
|
loading.value = false;
|
|
}
|
|
};
|
|
|
|
// 导入注册表
|
|
const importRegistry = async (data: any, useDatabase = false) => {
|
|
try {
|
|
loading.value = true;
|
|
error.value = null;
|
|
|
|
let response;
|
|
if (useDatabase) {
|
|
response = await databaseService.importRegistry(data);
|
|
} else {
|
|
response = await downloadService.importRegistry(data);
|
|
}
|
|
|
|
if (response.success) {
|
|
// 刷新统计信息
|
|
await fetchStats(useDatabase);
|
|
return { success: true, data: response.data };
|
|
} else {
|
|
throw new Error(response.error || '导入注册表失败');
|
|
}
|
|
} catch (err: any) {
|
|
error.value = err.message || '导入注册表失败';
|
|
console.error('导入注册表失败:', err);
|
|
return { success: false, error: error.value };
|
|
} finally {
|
|
loading.value = false;
|
|
}
|
|
};
|
|
|
|
// 重建注册表
|
|
const rebuildRegistry = async (useDatabase = false) => {
|
|
try {
|
|
loading.value = true;
|
|
error.value = null;
|
|
|
|
let response;
|
|
if (useDatabase) {
|
|
response = await databaseService.rebuildRegistry();
|
|
} else {
|
|
response = await downloadService.rebuildRegistry();
|
|
}
|
|
|
|
if (response.success) {
|
|
// 刷新统计信息
|
|
await fetchStats(useDatabase);
|
|
return { success: true, data: response.data };
|
|
} else {
|
|
throw new Error(response.error || '重建注册表失败');
|
|
}
|
|
} catch (err: any) {
|
|
error.value = err.message || '重建注册表失败';
|
|
console.error('重建注册表失败:', err);
|
|
return { success: false, error: error.value };
|
|
} finally {
|
|
loading.value = false;
|
|
}
|
|
};
|
|
|
|
// 清理注册表
|
|
const cleanupRegistry = async (useDatabase = false) => {
|
|
try {
|
|
loading.value = true;
|
|
error.value = null;
|
|
|
|
let response;
|
|
if (useDatabase) {
|
|
response = await databaseService.cleanupRegistry();
|
|
} else {
|
|
response = await downloadService.cleanupRegistry();
|
|
}
|
|
|
|
if (response.success) {
|
|
// 刷新统计信息
|
|
await fetchStats(useDatabase);
|
|
return { success: true, data: response.data };
|
|
} else {
|
|
throw new Error(response.error || '清理注册表失败');
|
|
}
|
|
} catch (err: any) {
|
|
error.value = err.message || '清理注册表失败';
|
|
console.error('清理注册表失败:', err);
|
|
return { success: false, error: error.value };
|
|
} finally {
|
|
loading.value = false;
|
|
}
|
|
};
|
|
|
|
// 获取配置
|
|
const fetchConfig = async () => {
|
|
try {
|
|
const response = await fetch(`${getApiBaseUrl()}/api/download/registry/config`);
|
|
const result = await response.json();
|
|
|
|
if (result.success && result.data) {
|
|
config.value = { ...config.value, ...result.data };
|
|
return result.data;
|
|
} else {
|
|
throw new Error(result.error || '获取配置失败');
|
|
}
|
|
} catch (err: any) {
|
|
error.value = err.message || '获取配置失败';
|
|
console.error('获取配置失败:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
// 更新配置
|
|
const updateConfig = async (newConfig: Partial<RegistryConfig>) => {
|
|
try {
|
|
loading.value = true;
|
|
error.value = null;
|
|
|
|
const response = await fetch(`${getApiBaseUrl()}/api/download/registry/config`, {
|
|
method: 'PUT',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify(newConfig),
|
|
});
|
|
|
|
const result = await response.json();
|
|
|
|
if (result.success && result.data) {
|
|
config.value = { ...config.value, ...result.data };
|
|
return { success: true, data: result.data };
|
|
} else {
|
|
throw new Error(result.error || '更新配置失败');
|
|
}
|
|
} catch (err: any) {
|
|
error.value = err.message || '更新配置失败';
|
|
console.error('更新配置失败:', err);
|
|
return { success: false, error: error.value };
|
|
} finally {
|
|
loading.value = false;
|
|
}
|
|
};
|
|
|
|
// 清除错误
|
|
const clearError = () => {
|
|
error.value = null;
|
|
};
|
|
|
|
return {
|
|
// 状态
|
|
stats,
|
|
config,
|
|
loading,
|
|
error,
|
|
|
|
// 方法
|
|
fetchStats,
|
|
exportRegistry,
|
|
importRegistry,
|
|
rebuildRegistry,
|
|
cleanupRegistry,
|
|
fetchConfig,
|
|
updateConfig,
|
|
clearError
|
|
};
|
|
}); |