84 lines
2.4 KiB
JavaScript
84 lines
2.4 KiB
JavaScript
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, image = null) {
|
|
const formData = new FormData()
|
|
|
|
// 이미지가 있는 경우에만 FormData에 추가
|
|
if (image) formData.append('image', image)
|
|
|
|
// 변경된 데이터만 JSON 문자열로 변환하여 request 필드에 추가
|
|
// characterData는 이미 변경된 필드만 포함하고 있음
|
|
formData.append('request', JSON.stringify(characterData))
|
|
|
|
return Vue.axios.put(`/admin/chat/character/update`, formData, {
|
|
headers: {
|
|
'Content-Type': 'multipart/form-data'
|
|
}
|
|
})
|
|
}
|
|
|
|
export {
|
|
getCharacterList,
|
|
searchCharacters,
|
|
getCharacter,
|
|
createCharacter,
|
|
updateCharacter
|
|
}
|