feat(character): 캐릭터 등록 API

- 모든 내용을 form 에 등록하던 방식을 image와 request(json string)으로 등록하도록 수정
This commit is contained in:
Yu Sung 2025-08-07 18:35:58 +09:00
parent 7f56d0b423
commit 80b298440b
1 changed files with 50 additions and 53 deletions

View File

@ -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'