import type { CaseCurateResponse, CaseCapabilities, CaseDetailResponse, CaseOrganizeResponse, CaseRecord, CaseSelectedFile, CaseUploadResponse } from '@/types/api'; import { apiRequest, apiUrl, authHeaders, authenticatedFileUrl, readTextPayload } from './api'; import { fileSelectionFailure } from '../utils/file-selection'; const audioExtensions = ['.mp3', '.wav', '.m4a', '.webm', '.aac', '.ogg']; export const chooseCaseAudio = () => new Promise((resolve, reject) => { uni.chooseFile({ count: 1, type: 'all', extension: audioExtensions, success: (result) => { const tempFiles = Array.isArray(result.tempFiles) ? result.tempFiles : []; const file = (tempFiles[0] || {}) as Partial; const path = file.path || result.tempFilePaths?.[0] || ''; if (!path) { reject(new Error('未获取到文件路径')); return; } resolve({ path, name: file.name || path.split('/').pop() || 'case-audio', size: Number(file.size || 0) }); }, fail: (error) => reject(fileSelectionFailure(error, '音频')) }); }); export const uploadCaseAudio = (file: CaseSelectedFile) => new Promise((resolve, reject) => { uni.uploadFile({ url: apiUrl('/api/knowledge/case/upload'), filePath: file.path, name: 'file', header: authHeaders(false), formData: {}, success: (response) => { try { resolve(readTextPayload(response.statusCode, response.data)); } catch (error) { reject(error); } }, fail: () => reject(new Error('案例音频上传失败')) }); }); export const organizeCase = (caseId: string) => apiRequest({ url: '/api/knowledge/case/organize', method: 'POST', data: { caseId }, timeout: 45000 }); export const curateCase = (caseId: string) => apiRequest({ url: '/api/knowledge/case/curate', method: 'POST', data: { caseId, criteria: '一线可复用培训案例', limit: 1 }, timeout: 30000 }); export const getCaseCapabilities = () => apiRequest({ url: '/api/knowledge/case/capabilities', method: 'GET', timeout: 15000 }); export const getCaseRecords = () => apiRequest({ url: '/api/knowledge/case/records?limit=10', method: 'GET', timeout: 15000 }); export const getCaseDetail = (caseId: string) => apiRequest({ url: `/api/knowledge/case/records/${encodeURIComponent(caseId)}`, method: 'GET', timeout: 15000 }); export const getCaseMediaUrl = (caseId: string) => authenticatedFileUrl(`/api/knowledge/case/records/${encodeURIComponent(caseId)}/media`);