import Vue from 'vue'; // 캐릭터 리스트 async function getCharacterList(page = 1, size = 20) { return Vue.axios.get('/admin/chat/character/list', { params: { page: page - 1, size } }) } // 캐릭터 검색 async function searchCharacters(keyword, page = 1, size = 20) { return Vue.axios.get('/api/admin/chat/character/search', { params: { keyword, page, size } }) } // 캐릭터 상세 조회 async function getCharacter(id) { return Vue.axios.get(`/admin/chat/character/${id}`) } // 캐릭터 등록 async function createCharacter(characterData) { const formData = new FormData() // 이미지만 FormData에 추가 if (characterData.image) formData.append('image', characterData.image) // 나머지 데이터는 JSON 문자열로 변환하여 request 필드에 추가 const requestData = { name: characterData.name, systemPrompt: characterData.systemPrompt, description: characterData.description, age: characterData.age, gender: characterData.gender, mbti: characterData.mbti, speechPattern: characterData.speechPattern, speechStyle: characterData.conversationStyle, appearance: characterData.appearance, tags: characterData.tags || [], hobbies: characterData.hobbies || [], values: characterData.values || [], goals: characterData.goals || [], relationships: characterData.relationships || [], personalities: characterData.personalities || [], backgrounds: characterData.backgrounds || [], memories: characterData.memories || [] } formData.append('request', JSON.stringify(requestData)) return Vue.axios.post('/admin/chat/character/register', formData, { headers: { 'Content-Type': 'multipart/form-data' } }) } // 캐릭터 수정 async function updateCharacter(characterData) { const formData = new FormData() // 이미지만 FormData에 추가 if (characterData.image) formData.append('image', characterData.image) // 나머지 데이터는 JSON 문자열로 변환하여 request 필드에 추가 const requestData = { id: characterData.id, name: characterData.name, systemPrompt: characterData.systemPrompt, description: characterData.description, age: characterData.age, gender: characterData.gender, mbti: characterData.mbti, speechPattern: characterData.speechPattern, speechStyle: characterData.conversationStyle, appearance: characterData.appearance, tags: characterData.tags || [], hobbies: characterData.hobbies || [], values: characterData.values || [], goals: characterData.goals || [], relationships: characterData.relationships || [], personalities: characterData.personalities || [], backgrounds: characterData.backgrounds || [], memories: characterData.memories || [], isActive: characterData.isActive } formData.append('request', JSON.stringify(requestData)) return Vue.axios.put(`/admin/chat/character/update`, formData, { headers: { 'Content-Type': 'multipart/form-data' } }) } // 캐릭터 삭제 async function deleteCharacter(id) { return Vue.axios.delete(`/api/admin/characters/${id}`) } export { getCharacterList, searchCharacters, getCharacter, createCharacter, updateCharacter, deleteCharacter }