From e6d63592ec67541a867e7a51fa025b8294e5afc3 Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 13 Aug 2025 19:49:46 +0900 Subject: [PATCH] =?UTF-8?q?fix(chat-character):=20=EA=B4=80=EA=B3=84=20?= =?UTF-8?q?=EC=8A=A4=ED=82=A4=EB=A7=88=20=EB=B3=80=EA=B2=BD=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=20=EC=97=94=ED=8B=B0=ED=8B=B0/CRUD/=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=20DTO=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ChatCharacterRelationship 엔티티를 personName, relationshipName, description(TEXT), importance, relationshipType, currentStatus로 변경 - ChatCharacter.addRelationship 및 Service 메서드 시그니처를 새 스키마에 맞게 수정 - 등록/수정 플로우에서 relationships 매핑 로직 업데이트 - Admin 상세 응답 DTO(RelationshipResponse) 및 매핑 업데이트 - 전체 빌드 성공 --- .../character/AdminChatCharacterController.kt | 2 +- .../dto/ChatCharacterDetailResponse.kt | 19 ++++++-- .../chat/character/dto/ChatCharacterDto.kt | 8 +++- .../sodalive/chat/character/ChatCharacter.kt | 19 +++++++- .../character/ChatCharacterRelationship.kt | 16 ++++++- .../character/service/ChatCharacterService.kt | 44 ++++++++++++++++--- 6 files changed, 91 insertions(+), 17 deletions(-) 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 ef05865..ab05224 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 @@ -133,7 +133,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.map { it.name to it.relationShip } + relationships = request.relationships ) // 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 eb42368..fa006db 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 @@ -53,7 +53,16 @@ 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 { RelationshipResponse(it.name, it.relationShip) }, + relationships = chatCharacter.relationships.map { + RelationshipResponse( + personName = it.personName, + relationshipName = it.relationshipName, + description = it.description, + importance = it.importance, + relationshipType = it.relationshipType, + currentStatus = it.currentStatus + ) + }, personalities = chatCharacter.personalities.map { PersonalityResponse(it.trait, it.description) }, @@ -85,6 +94,10 @@ data class MemoryResponse( ) data class RelationshipResponse( - val name: String, - val relationShip: String + val personName: String, + val relationshipName: String, + val description: String, + val importance: Int, + val relationshipType: String, + val currentStatus: 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 6b89ac7..0710330 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 @@ -20,8 +20,12 @@ data class ChatCharacterMemoryRequest( ) data class ChatCharacterRelationshipRequest( - @JsonProperty("name") val name: String, - @JsonProperty("relationShip") val relationShip: String + @JsonProperty("personName") val personName: String, + @JsonProperty("relationshipName") val relationshipName: String, + @JsonProperty("description") val description: String, + @JsonProperty("importance") val importance: Int, + @JsonProperty("relationshipType") val relationshipType: String, + @JsonProperty("currentStatus") val currentStatus: String ) data class ChatCharacterRegisterRequest( 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 de39635..75d8680 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 @@ -127,8 +127,23 @@ class ChatCharacter( } // 관계 추가 헬퍼 메소드 - fun addRelationship(name: String, relationShip: String) { - val relationship = ChatCharacterRelationship(name, relationShip, this) + fun addRelationship( + personName: String, + relationshipName: String, + description: String, + importance: Int, + relationshipType: String, + currentStatus: String + ) { + val relationship = ChatCharacterRelationship( + personName, + relationshipName, + description, + importance, + relationshipType, + currentStatus, + 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 d0b6e2c..5ef16c2 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 @@ -1,6 +1,7 @@ package kr.co.vividnext.sodalive.chat.character import kr.co.vividnext.sodalive.common.BaseEntity +import javax.persistence.Column import javax.persistence.Entity import javax.persistence.FetchType import javax.persistence.JoinColumn @@ -12,8 +13,19 @@ import javax.persistence.ManyToOne @Entity class ChatCharacterRelationship( - var name: String, - val relationShip: String, + // 상대 인물 이름 + var personName: String, + // 관계명 (예: 친구, 동료 등) + var relationshipName: String, + // 관계 설명 + @Column(columnDefinition = "TEXT") + var description: String, + // 중요도 + var importance: Int, + // 관계 타입 (분류용) + var relationshipType: String, + // 현재 상태 + var currentStatus: String, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "chat_character_id") 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 8cc3076..8993429 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 @@ -1,5 +1,6 @@ package kr.co.vividnext.sodalive.chat.character.service +import kr.co.vividnext.sodalive.admin.chat.character.dto.ChatCharacterRelationshipRequest import kr.co.vividnext.sodalive.admin.chat.character.dto.ChatCharacterUpdateRequest import kr.co.vividnext.sodalive.chat.character.CharacterType import kr.co.vividnext.sodalive.chat.character.ChatCharacter @@ -372,8 +373,23 @@ class ChatCharacterService( * 캐릭터에 관계 추가 */ @Transactional - fun addRelationshipToChatCharacter(chatCharacter: ChatCharacter, name: String, relationShip: String) { - chatCharacter.addRelationship(name, relationShip) + fun addRelationshipToChatCharacter( + chatCharacter: ChatCharacter, + personName: String, + relationshipName: String, + description: String, + importance: Int, + relationshipType: String, + currentStatus: String + ) { + chatCharacter.addRelationship( + personName, + relationshipName, + description, + importance, + relationshipType, + currentStatus + ) saveChatCharacter(chatCharacter) } @@ -402,7 +418,7 @@ class ChatCharacterService( memories: List> = emptyList(), personalities: List> = emptyList(), backgrounds: List> = emptyList(), - relationships: List> = emptyList() + relationships: List = emptyList() ): ChatCharacter { val chatCharacter = createChatCharacter( characterUUID = characterUUID, @@ -437,8 +453,15 @@ class ChatCharacterService( chatCharacter.addBackground(topic, description) } - relationships.forEach { (name, relationShip) -> - chatCharacter.addRelationship(name, relationShip) + relationships.forEach { rr -> + chatCharacter.addRelationship( + rr.personName, + rr.relationshipName, + rr.description, + rr.importance, + rr.relationshipType, + rr.currentStatus + ) } return saveChatCharacter(chatCharacter) @@ -536,8 +559,15 @@ class ChatCharacterService( if (request.relationships != null) { chatCharacter.relationships.clear() - request.relationships.forEach { relationship -> - chatCharacter.addRelationship(relationship.name, relationship.relationShip) + request.relationships.forEach { rr -> + chatCharacter.addRelationship( + rr.personName, + rr.relationshipName, + rr.description, + rr.importance, + rr.relationshipType, + rr.currentStatus + ) } }