sodalive-vuejs-admin/src/api/character.js

111 lines
3.2 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) {
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
}