캐릭터 챗봇 #74
| @@ -23,35 +23,33 @@ async function getCharacter(id) { | |||||||
| async function createCharacter(characterData) { | async function createCharacter(characterData) { | ||||||
|   const formData = new FormData() |   const formData = new FormData() | ||||||
|  |  | ||||||
|   // 기본 필드 추가 |   // 이미지만 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)) |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // 이미지가 있는 경우 추가 |  | ||||||
|   if (characterData.image) formData.append('image', characterData.image) |   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: { |     headers: { | ||||||
|       'Content-Type': 'multipart/form-data' |       'Content-Type': 'multipart/form-data' | ||||||
|     } |     } | ||||||
| @@ -62,34 +60,33 @@ async function createCharacter(characterData) { | |||||||
| async function updateCharacter(characterData) { | async function updateCharacter(characterData) { | ||||||
|   const formData = new FormData() |   const formData = new FormData() | ||||||
|  |  | ||||||
|   // 기본 필드 추가 |   // 이미지만 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)) |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // 이미지가 있는 경우 추가 |  | ||||||
|   if (characterData.image) formData.append('image', characterData.image) |   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, { |   return Vue.axios.put(`/api/admin/characters/${characterData.id}`, formData, { | ||||||
|     headers: { |     headers: { | ||||||
|       'Content-Type': 'multipart/form-data' |       'Content-Type': 'multipart/form-data' | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user