From 52c723d2171f9d0871a5089d9dab3a0884ae6609 Mon Sep 17 00:00:00 2001 From: jxmen Date: Sun, 1 Sep 2024 17:30:58 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20member=20entity=20equals/hashcode=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 멤버 일치 여부 equalsId로 대체 - 이미 적용된 chat entity null 제약조건 제거 (이미 적용됨) --- .../cs/ai/interviewer/domain/chat/Chat.kt | 4 ++-- .../cs/ai/interviewer/domain/chat/Chats.kt | 2 +- .../cs/ai/interviewer/domain/member/Member.kt | 23 +++---------------- .../cs/ai/interviewer/MemberScenarioTest.kt | 4 ++-- 4 files changed, 8 insertions(+), 25 deletions(-) diff --git a/src/main/kotlin/dev/jxmen/cs/ai/interviewer/domain/chat/Chat.kt b/src/main/kotlin/dev/jxmen/cs/ai/interviewer/domain/chat/Chat.kt index 673fc91..be2aa32 100644 --- a/src/main/kotlin/dev/jxmen/cs/ai/interviewer/domain/chat/Chat.kt +++ b/src/main/kotlin/dev/jxmen/cs/ai/interviewer/domain/chat/Chat.kt @@ -27,10 +27,10 @@ class Chat( @Comment("주제") val subject: Subject, - @ManyToOne(fetch = FetchType.LAZY, optional = true) // NOTE: sessionId 컬럼 제거 시 nullable 제거 + @ManyToOne(fetch = FetchType.LAZY) // NOTE: sessionId 컬럼 제거 시 nullable 제거 @JoinColumn(name = "member_id") @Comment("멤버 아이디") - val member: Member? = null, + val member: Member, @get:Embedded val content: ChatContent, diff --git a/src/main/kotlin/dev/jxmen/cs/ai/interviewer/domain/chat/Chats.kt b/src/main/kotlin/dev/jxmen/cs/ai/interviewer/domain/chat/Chats.kt index 867c71c..31934be 100644 --- a/src/main/kotlin/dev/jxmen/cs/ai/interviewer/domain/chat/Chats.kt +++ b/src/main/kotlin/dev/jxmen/cs/ai/interviewer/domain/chat/Chats.kt @@ -12,7 +12,7 @@ data class Chats( } fun validateMatchMember(member: Member) { - require(chats.all { it.member == member }) { "멤버가 일치하지 않습니다." } + require(chats.all { it.member.equalsId(member) }) { "멤버가 일치하지 않습니다." } } fun validateNotUseAllAnswers() { diff --git a/src/main/kotlin/dev/jxmen/cs/ai/interviewer/domain/member/Member.kt b/src/main/kotlin/dev/jxmen/cs/ai/interviewer/domain/member/Member.kt index 0fe0809..941cf70 100644 --- a/src/main/kotlin/dev/jxmen/cs/ai/interviewer/domain/member/Member.kt +++ b/src/main/kotlin/dev/jxmen/cs/ai/interviewer/domain/member/Member.kt @@ -12,6 +12,7 @@ import java.io.Serializable @Suppress("ktlint:standard:no-blank-line-in-list") @Entity @Table( + // TODO: 구글 외 다른 소셜 로그인을 지원한다면 email unique 제약조건을 제거할지 검토 필요 uniqueConstraints = [UniqueConstraint(columnNames = ["email"])], ) class Member( @@ -20,6 +21,7 @@ class Member( @Comment("이름") val name: String, + // TODO: 구글 외 다른 소셜 로그인을 지원한다면 email unique 제약조건을 제거할지 검토 필요 @Column(nullable = false, unique = true) @Comment("이메일") val email: String, @@ -54,24 +56,5 @@ class Member( } } - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (javaClass != other?.javaClass) return false - - other as Member - - if (id != other.id) return false - if (name != other.name) return false - if (email != other.email) return false - if (loginType != other.loginType) return false - - return true - } - - override fun hashCode(): Int { - var result = name.hashCode() - result = 31 * result + email.hashCode() - result = 31 * result + loginType.hashCode() - return result - } + fun equalsId(other: Member): Boolean = id == other.id } diff --git a/src/test/kotlin/dev/jxmen/cs/ai/interviewer/MemberScenarioTest.kt b/src/test/kotlin/dev/jxmen/cs/ai/interviewer/MemberScenarioTest.kt index a7d3580..17e014e 100644 --- a/src/test/kotlin/dev/jxmen/cs/ai/interviewer/MemberScenarioTest.kt +++ b/src/test/kotlin/dev/jxmen/cs/ai/interviewer/MemberScenarioTest.kt @@ -61,7 +61,7 @@ class MemberScenarioTest( private val fixtureMonkey = FixtureMonkey.builder().plugin(KotlinPlugin()).build() @MockBean - lateinit var reactiveMemberChatService: ChatAnswerUseCase + lateinit var chatAnswerUseCase: ChatAnswerUseCase init { beforeEach { @@ -137,7 +137,7 @@ class MemberScenarioTest( memberCommandRepository.save(member) setAuthentication(member) - given { reactiveMemberChatService.answer(any()) }.willReturn { + given { chatAnswerUseCase.answer(any()) }.willReturn { Flux .create { it.next(ChatResponse(listOf(Generation(answer))))