import type { RequestResult, SkillCategory, SkillCategoryDraft, SkillFileContent, SkillFileNode, SkillImportBatchResult, SkillImportConfirmPayload, SkillImportPreview, SkillInfo, SkillValidationResult, } from './types'; import { api } from '#/api/request'; import { buildSkillCategoryPayload } from './skill-category'; import { buildSkillDraftPayload } from './skill-draft'; export function getSkillDetail(id: number | string) { return api.get>('/api/v1/skill/detail', { params: { id }, }); } export function saveSkill(skill: SkillInfo) { return api.post>( '/api/v1/skill/save', buildSkillDraftPayload(skill, false), ); } export function updateSkill(skill: SkillInfo) { return api.post>( '/api/v1/skill/update', buildSkillDraftPayload(skill, true), ); } export function copySkill(payload: { categoryId?: number | string; displayName: string; name: string; sourceId: number | string; }) { return api.post>('/api/v1/skill/copy', payload); } export function validateSkillForPublish(id: number | string) { return api.post>( '/api/v1/skill/validatePublish', { id }, ); } export function getSkillCategories() { return api.get>( '/api/v1/skill/category/visibleList', { params: { sortKey: 'sortNo', sortType: 'asc' } }, ); } export function getSkillCategoryTree() { return api.get>( '/api/v1/skill/category/tree', { params: { sortKey: 'sortNo', sortType: 'asc' } }, ); } export function saveSkillCategory(category: SkillCategoryDraft) { return api.post>( '/api/v1/skill/category/save', buildSkillCategoryPayload(category, false), ); } export function updateSkillCategory(category: SkillCategoryDraft) { return api.post>( '/api/v1/skill/category/update', buildSkillCategoryPayload(category, true), ); } export function deleteSkillCategory(id: number | string) { return api.post>('/api/v1/skill/category/remove', { id }); } export function submitSkillPublishApproval( id: number | string, applicationReason: string, ) { return api.post>( '/api/v1/skill/submitPublishApproval', { applicationReason, id }, ); } export function submitSkillOfflineApproval(id: number | string) { return api.post>( '/api/v1/skill/submitOfflineApproval', { id }, ); } export function submitSkillDeleteApproval(id: number | string) { return api.post>( '/api/v1/skill/submitDeleteApproval', { id }, ); } export function getSkillFileTree(skillId: number | string) { return api.get>('/api/v1/skill/file/tree', { params: { skillId }, }); } export function getSkillFileContent(skillId: number | string, path: string) { return api.get>( '/api/v1/skill/file/content', { params: { path, skillId } }, ); } export function saveSkillFile( skillId: number | string, path: string, content: string, expectedContentHash?: string, ) { return api.post>('/api/v1/skill/file/save', { content, expectedContentHash, path, skillId, }); } export function createSkillFile( skillId: number | string, path: string, content = '', ) { return api.post>( '/api/v1/skill/file/create', { content, path, skillId, }, ); } export function renameSkillFile( skillId: number | string, path: string, newPath: string, expectedContentHash: string, ) { return api.post>( '/api/v1/skill/file/rename', { expectedContentHash, newPath, path, skillId, }, ); } export function deleteSkillFile( skillId: number | string, path: string, expectedContentHash: string, ) { return api.post>('/api/v1/skill/file/delete', { expectedContentHash, path, skillId, }); } export function uploadSkillFile( skillId: number | string, path: string, file: File, expectedContentHash?: string, ) { const formData = new FormData(); formData.append('skillId', String(skillId)); formData.append('path', path); if (expectedContentHash) formData.append('expectedContentHash', expectedContentHash); formData.append('file', file); return api.postFile>( '/api/v1/skill/file/upload', formData, ); } export function downloadSkillFile(skillId: number | string, path: string) { return api.download('/api/v1/skill/file/download', { params: { path, skillId }, }); } export function previewSkillFile(skillId: number | string, path: string) { return api.download('/api/v1/skill/file/preview', { params: { path, skillId }, }); } export function importSkillPreviews(files: File[]) { const formData = new FormData(); files.forEach((file) => formData.append('files', file)); return api.postFile>( '/api/v1/skill/import/preview', formData, ); } export function importSkillConfirmBatch(payload: SkillImportConfirmPayload[]) { return api.post>( '/api/v1/skill/import/confirmBatch', payload, ); } export function cancelSkillImport(importToken: string) { return api.post>('/api/v1/skill/import/cancel', { importToken, }); } export function exportSkills(ids: Array) { return api.download('/api/v1/skill/export', { data: { ids }, method: 'POST', }); }