diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/character/AdminChatCharacterController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/character/AdminChatCharacterController.kt index 95f848c..498688c 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/character/AdminChatCharacterController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/character/AdminChatCharacterController.kt @@ -126,7 +126,7 @@ class AdminChatCharacterController( memories = request.memories.map { Triple(it.title, it.content, it.emotion) }, personalities = request.personalities.map { Pair(it.trait, it.description) }, backgrounds = request.backgrounds.map { Pair(it.topic, it.description) }, - relationships = request.relationships + relationships = request.relationships.map { it.name to it.relationShip } ) // 3. 이미지 저장 및 ChatCharacter에 이미지 path 설정 diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/character/dto/ChatCharacterDetailResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/character/dto/ChatCharacterDetailResponse.kt index e71b9fe..308acea 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/character/dto/ChatCharacterDetailResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/character/dto/ChatCharacterDetailResponse.kt @@ -20,7 +20,7 @@ data class ChatCharacterDetailResponse( val hobbies: List, val values: List, val goals: List, - val relationships: List, + val relationships: List, val personalities: List, val backgrounds: List, val memories: List @@ -51,7 +51,7 @@ data class ChatCharacterDetailResponse( hobbies = chatCharacter.hobbyMappings.map { it.hobby.hobby }, values = chatCharacter.valueMappings.map { it.value.value }, goals = chatCharacter.goalMappings.map { it.goal.goal }, - relationships = chatCharacter.relationships.map { it.relationShip }, + relationships = chatCharacter.relationships.map { RelationshipResponse(it.name, it.relationShip) }, personalities = chatCharacter.personalities.map { PersonalityResponse(it.trait, it.description) }, @@ -81,3 +81,8 @@ data class MemoryResponse( val content: String, val emotion: String ) + +data class RelationshipResponse( + val name: String, + val relationShip: String +) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/character/dto/ChatCharacterDto.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/character/dto/ChatCharacterDto.kt index 717bcd6..773d814 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/character/dto/ChatCharacterDto.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/chat/character/dto/ChatCharacterDto.kt @@ -18,6 +18,11 @@ data class ChatCharacterMemoryRequest( @JsonProperty("emotion") val emotion: String ) +data class ChatCharacterRelationshipRequest( + @JsonProperty("name") val name: String, + @JsonProperty("relationShip") val relationShip: String +) + data class ChatCharacterRegisterRequest( @JsonProperty("name") val name: String, @JsonProperty("systemPrompt") val systemPrompt: String, @@ -32,7 +37,7 @@ data class ChatCharacterRegisterRequest( @JsonProperty("hobbies") val hobbies: List = emptyList(), @JsonProperty("values") val values: List = emptyList(), @JsonProperty("goals") val goals: List = emptyList(), - @JsonProperty("relationships") val relationships: List = emptyList(), + @JsonProperty("relationships") val relationships: List = emptyList(), @JsonProperty("personalities") val personalities: List = emptyList(), @JsonProperty("backgrounds") val backgrounds: List = emptyList(), @JsonProperty("memories") val memories: List = emptyList() @@ -64,7 +69,7 @@ data class ChatCharacterUpdateRequest( @JsonProperty("hobbies") val hobbies: List? = null, @JsonProperty("values") val values: List? = null, @JsonProperty("goals") val goals: List? = null, - @JsonProperty("relationships") val relationships: List? = null, + @JsonProperty("relationships") val relationships: List? = null, @JsonProperty("personalities") val personalities: List? = null, @JsonProperty("backgrounds") val backgrounds: List? = null, @JsonProperty("memories") val memories: List? = null diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/ChatCharacter.kt b/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/ChatCharacter.kt index a5a3e86..2dfbf99 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/ChatCharacter.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/ChatCharacter.kt @@ -14,8 +14,7 @@ class ChatCharacter( // 캐릭터 이름 (API 키 내에서 유일해야 함) var name: String, - // 캐릭터 설명 - @Column(columnDefinition = "TEXT", nullable = false) + // 캐릭터 한 줄 소개 var description: String, // AI 시스템 프롬프트 @@ -113,8 +112,8 @@ class ChatCharacter( } // 관계 추가 헬퍼 메소드 - fun addRelationship(relationShip: String) { - val relationship = ChatCharacterRelationship(relationShip, this) + fun addRelationship(name: String, relationShip: String) { + val relationship = ChatCharacterRelationship(name, relationShip, this) relationships.add(relationship) } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/ChatCharacterRelationship.kt b/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/ChatCharacterRelationship.kt index ba3932c..d0b6e2c 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/ChatCharacterRelationship.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/ChatCharacterRelationship.kt @@ -12,6 +12,7 @@ import javax.persistence.ManyToOne @Entity class ChatCharacterRelationship( + var name: String, val relationShip: String, @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/controller/ChatCharacterController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/controller/ChatCharacterController.kt index 20d1e75..5503bb8 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/controller/ChatCharacterController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/controller/ChatCharacterController.kt @@ -7,6 +7,7 @@ import kr.co.vividnext.sodalive.chat.character.dto.CharacterDetailResponse import kr.co.vividnext.sodalive.chat.character.dto.CharacterMainResponse import kr.co.vividnext.sodalive.chat.character.dto.CharacterMemoryResponse import kr.co.vividnext.sodalive.chat.character.dto.CharacterPersonalityResponse +import kr.co.vividnext.sodalive.chat.character.dto.CharacterRelationshipResponse import kr.co.vividnext.sodalive.chat.character.dto.CurationSection import kr.co.vividnext.sodalive.chat.character.dto.RecentCharacter import kr.co.vividnext.sodalive.chat.character.service.ChatCharacterBannerService @@ -137,7 +138,7 @@ class ChatCharacterController( ) } - val relationships = character.relationships.map { it.relationShip } + val relationships = character.relationships.map { CharacterRelationshipResponse(it.name, it.relationShip) } // 응답 생성 ApiResponse.ok( diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/dto/CharacterDetailResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/dto/CharacterDetailResponse.kt index d9f2492..d093ca3 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/dto/CharacterDetailResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/dto/CharacterDetailResponse.kt @@ -14,7 +14,7 @@ data class CharacterDetailResponse( val memories: List = emptyList(), val personalities: List = emptyList(), val backgrounds: List = emptyList(), - val relationships: List = emptyList(), + val relationships: List = emptyList(), val tags: List = emptyList(), val values: List = emptyList(), val hobbies: List = emptyList(), @@ -36,3 +36,8 @@ data class CharacterBackgroundResponse( val topic: String, val description: String ) + +data class CharacterRelationshipResponse( + val name: String, + val relationShip: String +) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/service/ChatCharacterService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/service/ChatCharacterService.kt index 8ddce61..2e567c0 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/service/ChatCharacterService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/chat/character/service/ChatCharacterService.kt @@ -266,8 +266,8 @@ class ChatCharacterService( * 캐릭터에 관계 추가 */ @Transactional - fun addRelationshipToChatCharacter(chatCharacter: ChatCharacter, relationShip: String) { - chatCharacter.addRelationship(relationShip) + fun addRelationshipToChatCharacter(chatCharacter: ChatCharacter, name: String, relationShip: String) { + chatCharacter.addRelationship(name, relationShip) saveChatCharacter(chatCharacter) } @@ -293,7 +293,7 @@ class ChatCharacterService( memories: List> = emptyList(), personalities: List> = emptyList(), backgrounds: List> = emptyList(), - relationships: List = emptyList() + relationships: List> = emptyList() ): ChatCharacter { val chatCharacter = createChatCharacter( characterUUID, name, description, systemPrompt, age, gender, mbti, @@ -313,8 +313,8 @@ class ChatCharacterService( chatCharacter.addBackground(topic, description) } - relationships.forEach { relationShip -> - chatCharacter.addRelationship(relationShip) + relationships.forEach { (name, relationShip) -> + chatCharacter.addRelationship(name, relationShip) } return saveChatCharacter(chatCharacter) @@ -412,7 +412,7 @@ class ChatCharacterService( if (request.relationships != null) { chatCharacter.relationships.clear() request.relationships.forEach { relationship -> - chatCharacter.addRelationship(relationship) + chatCharacter.addRelationship(relationship.name, relationship.relationShip) } }