From a0f0d82b638355d4dc4d33a301ccb8ff653511d0 Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 12 Jun 2026 11:40:26 +0900 Subject: [PATCH] =?UTF-8?q?docs(aicharacter):=20=ED=81=AC=EB=A6=AC?= =?UTF-8?q?=EC=97=90=EC=9D=B4=ED=84=B0=20=EC=97=B0=EA=B2=B0=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=20=EA=B8=B0=EB=A1=9D=EC=9D=84=20=EA=B0=B1=EC=8B=A0?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plan-task.md | 56 +++++++++++++++---- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/docs/20260611_AI캐릭터_크리에이터기능_최소연결/plan-task.md b/docs/20260611_AI캐릭터_크리에이터기능_최소연결/plan-task.md index 6564d702..5321a515 100644 --- a/docs/20260611_AI캐릭터_크리에이터기능_최소연결/plan-task.md +++ b/docs/20260611_AI캐릭터_크리에이터기능_최소연결/plan-task.md @@ -159,7 +159,7 @@ ### Phase 3: 로그인 및 DM 차단 -- [ ] **Task 3.1: 일반 로그인에서 AI 캐릭터용 Member 차단** +- [x] **Task 3.1: 일반 로그인에서 AI 캐릭터용 Member 차단** - Modify: `src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt` - Test: `src/test/kotlin/kr/co/vividnext/sodalive/member/MemberServiceTest.kt` - RED: `memberKind = AI_CHARACTER`인 Member가 일반 로그인 요청 시 인증 매니저 호출 전에 예외가 발생하는 테스트를 작성한다. @@ -174,7 +174,7 @@ - Run: `./gradlew test --tests kr.co.vividnext.sodalive.member.MemberServiceTest` - Expected: AI 캐릭터 로그인 차단 테스트 PASS. -- [ ] **Task 3.2: 크리에이터 관리자 로그인에서 AI 캐릭터용 Member 차단** +- [x] **Task 3.2: 크리에이터 관리자 로그인에서 AI 캐릭터용 Member 차단** - Modify: `src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/member/CreatorAdminMemberService.kt` - Test: `src/test/kotlin/kr/co/vividnext/sodalive/creator/admin/member/CreatorAdminMemberServiceTest.kt` - RED: `memberKind = AI_CHARACTER`, `role = CREATOR`인 Member가 크리에이터 관리자 로그인 요청 시 `common.error.bad_credentials` 예외가 발생하는 테스트를 작성한다. @@ -189,13 +189,17 @@ - Run: `./gradlew test --tests kr.co.vividnext.sodalive.creator.admin.member.CreatorAdminMemberServiceTest` - Expected: PASS. -- [ ] **Task 3.3: 유저-크리에이터 DM에서 AI 캐릭터용 Member 차단** +- [x] **Task 3.3: 유저-크리에이터 DM에서 AI 캐릭터용 Member 차단** - Modify: `src/main/kotlin/kr/co/vividnext/sodalive/v2/usercreatorchat/service/UserCreatorChatService.kt` - - Test: `src/test/kotlin/kr/co/vividnext/sodalive/v2/usercreatorchat/UserCreatorChatServiceTest.kt` - - RED: `shouldRejectCreateRoomWhenCreatorIsAiCharacterMember` 테스트를 추가한다. + - Test: `src/test/kotlin/kr/co/vividnext/sodalive/v2/usercreatorchat/UserCreatorChatServiceIntegrationTest.kt` + - RED: 아래 테스트를 추가한다. + - `shouldRejectCreateRoomWhenCreatorIsAiCharacterMember` + - `shouldRejectSendTextMessageWhenOpponentIsAiCharacterMember` - `memberRepository.findById(creatorId)`는 `role = CREATOR`, `memberKind = AI_CHARACTER`인 Member를 반환한다. - `service.createOrGetRoom(user, creatorId)`는 예외를 던진다. - `roomRepository.save`와 `participantRepository.save`는 호출되지 않는다. + - 기존 방에 AI 캐릭터용 Member가 참여한 상태에서 `sendTextMessage`는 예외를 던진다. + - `messageRepository.save`와 푸시 발송 경로는 호출되지 않는다. - GREEN: `validateRecipient` 또는 `createOrGetRoom`에서 recipient가 AI 캐릭터용 Member이면 차단한다. ```kotlin if (recipient.memberKind == MemberKind.AI_CHARACTER) { @@ -204,14 +208,14 @@ ``` - REFACTOR: 기존 비활성/본인/차단 검증 메시지와 우선순위를 불필요하게 바꾸지 않는다. - Verify: - - Run: `./gradlew test --tests kr.co.vividnext.sodalive.v2.usercreatorchat.UserCreatorChatServiceTest` - - Expected: 기존 DM 테스트와 신규 차단 테스트 PASS. + - Run: `./gradlew test --tests kr.co.vividnext.sodalive.v2.usercreatorchat.UserCreatorChatServiceIntegrationTest --tests kr.co.vividnext.sodalive.v2.usercreatorchat.UserCreatorChatServiceTest` + - Expected: 기존 DM 테스트와 신규 생성/발송 차단 테스트 PASS. --- ### Phase 4: 회귀 검증 및 문서 정리 -- [ ] **Task 4.1: 핵심 단위 테스트 실행** +- [x] **Task 4.1: 핵심 단위 테스트 실행** - Files: 변경 없음 - TDD 예외 사유: 구현 완료 후 회귀 검증 task다. - 대체 검증 방법: 관련 단일 테스트를 모두 실행한다. @@ -219,13 +223,15 @@ ```bash ./gradlew test \ --tests kr.co.vividnext.sodalive.chat.character.service.ChatCharacterCreatorMemberServiceTest \ + --tests kr.co.vividnext.sodalive.chat.character.service.ChatCharacterCreatorMemberServiceIntegrationTest \ --tests kr.co.vividnext.sodalive.v2.usercreatorchat.UserCreatorChatServiceTest \ + --tests kr.co.vividnext.sodalive.v2.usercreatorchat.UserCreatorChatServiceIntegrationTest \ --tests kr.co.vividnext.sodalive.creator.admin.member.CreatorAdminMemberServiceTest \ --tests kr.co.vividnext.sodalive.member.MemberServiceTest ``` - Expected: PASS. -- [ ] **Task 4.2: 정적 검증 및 전체 회귀** +- [x] **Task 4.2: 정적 검증 및 전체 회귀** - Files: 변경 없음 - TDD 예외 사유: 전체 회귀 검증 task다. - 대체 검증 방법: Gradle 테스트와 ktlint를 실행한다. @@ -236,7 +242,7 @@ ``` - Expected: 두 명령 모두 PASS. -- [ ] **Task 4.3: 검증 기록 누적** +- [x] **Task 4.3: 검증 기록 누적** - Modify: `docs/20260611_AI캐릭터_크리에이터기능_최소연결/plan-task.md` - TDD 예외 사유: 문서 기록 task다. - 대체 검증 방법: 실행한 명령, 목적, 결과를 아래 검증 기록 섹션에 누적한다. @@ -272,3 +278,33 @@ - `./gradlew ktlintCheck` - 목적: Phase 2 Kotlin production/test 변경의 ktlint 규칙 준수 확인. - 결과: `BUILD SUCCESSFUL in 14s`. +- `./gradlew test --tests kr.co.vividnext.sodalive.member.MemberServiceTest --tests kr.co.vividnext.sodalive.creator.admin.member.CreatorAdminMemberServiceTest --tests kr.co.vividnext.sodalive.v2.usercreatorchat.UserCreatorChatServiceTest` + - 목적: Phase 3 RED 검증. AI 캐릭터용 Member의 일반 로그인, 크리에이터 관리자 로그인, 유저-크리에이터 DM 방 생성이 기존 코드에서 차단되지 않음을 확인. + - 결과: `CreatorAdminMemberServiceTest`, `MemberServiceTest`, `UserCreatorChatServiceTest`의 신규 차단 테스트 3건 실패. +- `./gradlew test --tests kr.co.vividnext.sodalive.member.MemberServiceTest --tests kr.co.vividnext.sodalive.creator.admin.member.CreatorAdminMemberServiceTest --tests kr.co.vividnext.sodalive.v2.usercreatorchat.UserCreatorChatServiceTest` + - 목적: Phase 3 GREEN 검증. 로그인/DM 차단 정책과 기존 DM 회귀 테스트 통과 확인. + - 결과: `BUILD SUCCESSFUL in 10s`. +- `./gradlew ktlintCheck` + - 목적: Phase 3/4 Kotlin production/test 및 문서 변경 전 정적 규칙 준수 확인. + - 결과: `BUILD SUCCESSFUL in 20s`. +- `./gradlew test` + - 목적: Phase 4 전체 회귀 테스트 확인. + - 결과: `BUILD SUCCESSFUL in 1m 14s`. +- `./gradlew test --tests kr.co.vividnext.sodalive.chat.character.service.ChatCharacterCreatorMemberServiceTest --tests kr.co.vividnext.sodalive.chat.character.service.ChatCharacterCreatorMemberServiceIntegrationTest --tests kr.co.vividnext.sodalive.member.MemberServiceTest --tests kr.co.vividnext.sodalive.creator.admin.member.CreatorAdminMemberServiceTest --tests kr.co.vividnext.sodalive.v2.usercreatorchat.UserCreatorChatServiceIntegrationTest --tests kr.co.vividnext.sodalive.v2.usercreatorchat.UserCreatorChatServiceTest` + - 목적: 계획 진행 중 추가한 테스트의 mock 사용 적합성 재검토 후, 저장소/JPA 관계/로그인/DM 정책 검증을 Spring 컨텍스트 + H2 repository 기반 테스트로 전환했는지 확인. + - 결과: `BUILD SUCCESSFUL in 34s`. +- `./gradlew ktlintCheck` + - 목적: 계획 관련 테스트 리팩터링 후 ktlint 규칙 준수 확인. + - 결과: `BUILD SUCCESSFUL in 10s`. +- `./gradlew test` + - 목적: 계획 관련 테스트 리팩터링 후 전체 회귀 테스트 확인. + - 결과: `BUILD SUCCESSFUL in 1m 20s`. +- `./gradlew test --tests kr.co.vividnext.sodalive.v2.usercreatorchat.UserCreatorChatServiceIntegrationTest --tests kr.co.vividnext.sodalive.v2.usercreatorchat.UserCreatorChatServiceTest` + - 목적: 리뷰 보완. AI 캐릭터용 Member가 참여한 기존 DM 방에서 `sendTextMessage`도 `message.error.recipient_not_found`로 차단되고 메시지가 저장되지 않는지 확인. + - 결과: `BUILD SUCCESSFUL in 31s`. +- `./gradlew ktlintCheck` + - 목적: 리뷰 보완 후 ktlint 규칙 준수 확인. + - 결과: `BUILD SUCCESSFUL in 8s`. +- `./gradlew test` + - 목적: 리뷰 보완 후 전체 회귀 테스트 확인. + - 결과: `BUILD SUCCESSFUL in 1m 15s`.