import axios from './instance' import { RECORD_LIST, DELETE_RECORD, UPDATE_RECORD, MERGE_RECORD, RECORD_STATUS, UPLOAD_HEADS } from './constant' import { params } from '@/env' import { jsonToForm } from '@/utils' export enum RecordStatus { UN = -2, ERR = -1, RUN = 0, SUCCESS = 1 } export interface Record { id: string cover: string title: string url: string | null sort: number status: RecordStatus } interface ServiceRecord { videoFolderId: number, videoFolderName: string, videoFolderCover: string, videoMergeUrl: string | null, sort: number, uploadStatus: RecordStatus } const toLocal = (serviceRecord: ServiceRecord) : Record => ({ id: serviceRecord.videoFolderId.toString(), cover: serviceRecord.videoFolderCover, title: serviceRecord.videoFolderName, url: serviceRecord.videoMergeUrl, sort: serviceRecord.sort, status: serviceRecord.uploadStatus || RecordStatus.RUN }) const toService = (record: Record, isUpdate = true): PartialProps => ({ ...(isUpdate ? { videoFolderId: Number(record.id) } : {}), videoFolderName: record.title, videoFolderCover: record.cover, videoMergeUrl: record.url, sort: record.sort, uploadStatus: record.status }) export type Records = Record[] export const fetchRecords = async () => { const data = await axios.get(RECORD_LIST, { params: { fusionId: params.caseId } }) return data.map(toLocal) } export const fetchRecordStatus = async (recordId: Record['id']) => { const step = await axios.get(RECORD_STATUS, { params: { folderId: Number(recordId) } }) if (step >= 100) { return RecordStatus.SUCCESS } else if (step < 0) { return RecordStatus.ERR } else { return RecordStatus.RUN } } export const postAddRecord = async (record: Record, files: File[]) => { const serviceRecord = await postMegerRecord(files) return toLocal(serviceRecord) } export const postUpdateRecord = async (record: Record) => { const serviceRecord = toService(record) await axios.post(UPDATE_RECORD, serviceRecord) } export const postMegerRecord = (files: File[], recordId?: Record['id']) => { return axios({ method: 'POST', url: MERGE_RECORD, headers: { ...UPLOAD_HEADS }, data: jsonToForm({ ...(recordId ? { folderId: recordId && Number(recordId) } : {}), fusionId: params.caseId, files }) }) } export const postDeleteRecord = async (id: Record['id']) => { await axios.post(DELETE_RECORD, { videoFolderId: Number(id) }) }