feat: 캐릭터 등록 폼 추가
This commit is contained in:
@@ -1,16 +1,112 @@
|
||||
import Vue from 'vue';
|
||||
|
||||
// 캐릭터 리스트
|
||||
async function getCharacterList() {
|
||||
return Vue.axios.get('/api/admin/characters')
|
||||
async function getCharacterList(page = 1, size = 10) {
|
||||
return Vue.axios.get('/api/admin/characters', {
|
||||
params: { page, size }
|
||||
})
|
||||
}
|
||||
|
||||
// 캐릭터 검색
|
||||
async function searchCharacters(keyword, page = 1, size = 10) {
|
||||
return Vue.axios.get('/api/admin/characters/search', {
|
||||
params: { keyword, page, size }
|
||||
})
|
||||
}
|
||||
|
||||
// 캐릭터 상세 조회
|
||||
async function getCharacter(id) {
|
||||
return Vue.axios.get(`/api/admin/characters/${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))
|
||||
}
|
||||
|
||||
// 이미지가 있는 경우 추가
|
||||
if (characterData.image) formData.append('image', characterData.image)
|
||||
|
||||
return Vue.axios.post('/api/admin/characters', formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 캐릭터 수정
|
||||
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))
|
||||
}
|
||||
|
||||
// 이미지가 있는 경우 추가
|
||||
if (characterData.image) formData.append('image', characterData.image)
|
||||
|
||||
return Vue.axios.put(`/api/admin/characters/${characterData.id}`, formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 캐릭터 삭제
|
||||
async function deleteCharacter(id) {
|
||||
return Vue.axios.delete(`/api/admin/characters/${id}`)
|
||||
}
|
||||
|
||||
export {
|
||||
getCharacterList
|
||||
getCharacterList,
|
||||
searchCharacters,
|
||||
getCharacter,
|
||||
createCharacter,
|
||||
updateCharacter,
|
||||
deleteCharacter
|
||||
}
|
||||
|
Reference in New Issue
Block a user