diff --git a/src/api/character.js b/src/api/character.js index a5adab3..cf0e18f 100644 --- a/src/api/character.js +++ b/src/api/character.js @@ -23,35 +23,33 @@ async function getCharacter(id) { async function createCharacter(characterData) { const formData = new FormData() - // 기본 필드 추가 - formData.append('name', characterData.name) - formData.append('description', characterData.description) - formData.append('isActive', characterData.isActive) - - // 추가 필드가 있는 경우 추가 - if (characterData.personality) formData.append('personality', characterData.personality) - if (characterData.gender) formData.append('gender', characterData.gender) - if (characterData.birthDate) formData.append('birthDate', characterData.birthDate) - if (characterData.mbti) formData.append('mbti', characterData.mbti) - if (characterData.ageRestricted !== undefined) formData.append('ageRestricted', characterData.ageRestricted) - if (characterData.worldView) formData.append('worldView', characterData.worldView) - if (characterData.relationships) formData.append('relationships', characterData.relationships) - if (characterData.speechPattern) formData.append('speechPattern', characterData.speechPattern) - if (characterData.systemPrompt) formData.append('systemPrompt', characterData.systemPrompt) - - // 태그와 메모리는 배열이므로 JSON 문자열로 변환 - if (characterData.tags && characterData.tags.length > 0) { - formData.append('tags', JSON.stringify(characterData.tags)) - } - - if (characterData.memories && characterData.memories.length > 0) { - formData.append('memories', JSON.stringify(characterData.memories)) - } - - // 이미지가 있는 경우 추가 + // 이미지만 FormData에 추가 if (characterData.image) formData.append('image', characterData.image) - return Vue.axios.post('/api/admin/characters', formData, { + // 나머지 데이터는 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' } @@ -62,34 +60,33 @@ async function createCharacter(characterData) { async function updateCharacter(characterData) { const formData = new FormData() - // 기본 필드 추가 - formData.append('name', characterData.name) - formData.append('description', characterData.description) - formData.append('isActive', characterData.isActive) - - // 추가 필드가 있는 경우 추가 - if (characterData.personality) formData.append('personality', characterData.personality) - if (characterData.gender) formData.append('gender', characterData.gender) - if (characterData.birthDate) formData.append('birthDate', characterData.birthDate) - if (characterData.mbti) formData.append('mbti', characterData.mbti) - if (characterData.ageRestricted !== undefined) formData.append('ageRestricted', characterData.ageRestricted) - if (characterData.worldView) formData.append('worldView', characterData.worldView) - if (characterData.relationships) formData.append('relationships', characterData.relationships) - if (characterData.speechPattern) formData.append('speechPattern', characterData.speechPattern) - if (characterData.systemPrompt) formData.append('systemPrompt', characterData.systemPrompt) - - // 태그와 메모리는 배열이므로 JSON 문자열로 변환 - if (characterData.tags && characterData.tags.length > 0) { - formData.append('tags', JSON.stringify(characterData.tags)) - } - - if (characterData.memories && characterData.memories.length > 0) { - formData.append('memories', JSON.stringify(characterData.memories)) - } - - // 이미지가 있는 경우 추가 + // 이미지만 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 || [], + isActive: characterData.isActive + } + + formData.append('request', JSON.stringify(requestData)) + return Vue.axios.put(`/api/admin/characters/${characterData.id}`, formData, { headers: { 'Content-Type': 'multipart/form-data'