Conversation
- 실질적으로 쓰이지 않는 QueryDsl Q 객체를 테스트 커버리지 목록에서 제거했습니다. issue #41
- 나이 관련 약관이 추가되어 해당 약관을 enum 클래스에 추가했습니다. issue 36
- 공통으로 사용되는 final String 변수들을 CommonConstant 파일로 따로 분리하여 static 변수로 활용하도록 수정했습니다. - 필드 변수가 별로 없는 클래스에 한에서 Builder 패턴을 제거하여 가독성을 높였습니다. - Jacoco 테스트 커버리지에서 발견된 사용하지 않는 변수 또는 클래스를 제거했습니다. issue #41
- 데이터 변환용으로 쓰이는 DTO 클래스들은 불변 클래스인 레코드로 변경했습니다. issue #41
- 약관이 추가되어 이에 대한 REST DOCS 파일에 예외 항목을 추가했습니다. issue #36
- RedirectStrategy 인터페이스를 따로 분리하여 빈 의존성을 추가했습니다. issue #41
- 초기 약관 데이터를 저장할 파일을 하나 만들었습니다. issue #36
There was a problem hiding this comment.
Pull Request Overview
This PR refactors Member-related code to improve test coverage, remove unused builders, centralize constants, and add consent functionality.
- Replaced Lombok builders with constructors and Java records across DTOs, entities, and JWT classes
- Introduced new consent domain (type, entity, SQL), updated exception codes, REST docs, and service logic
- Centralized header, URI, TTL, and regex constants; cleaned up utilities and authentication filters
Reviewed Changes
Copilot reviewed 36 out of 37 changed files in this pull request and generated 2 comments.
Show a summary per file
| File/Area | Description |
|---|---|
| src/test/java/.../TypingRepositoryTest.java | Use new Member(...) instead of builder |
| src/test/java/.../RefreshToken*.java | Adapt to JwtToken record methods (refreshToken()) |
| src/test/java/.../TypingServiceTest.java | Use direct constructor for Member |
| src/test/java/.../RankingServiceTest.java | Same constructor update for Member |
| src/test/java/.../NicknameServiceTest.java | Removed unused @ActiveProfiles("test") annotation |
| src/test/java/.../MemberServiceTest.java | Added consent setup; adjusted exception imports |
| src/test/java/.../MemberControllerTest.java | Imported CommonConstant prefixes; removed local constants |
| src/test/java/.../MemberControllerDocsTest.java | Same constant cleanup and record use |
| src/main/java/dasi/typing/utils/PatternUtil.java | New nickname validation patterns |
| src/main/java/dasi/typing/utils/DateTimeUtil.java | Removed unused isInRange method |
| src/main/java/dasi/typing/utils/CommonConstant.java | Centralize header/URI/token/TTL/constants |
| src/main/java/dasi/typing/jwt/JwtTokenProvider.java | Remove hard-coded values; use centralized constants |
| src/main/java/dasi/typing/jwt/JwtToken.java | Converted to record |
| src/main/java/dasi/typing/jwt/JwtAuthenticationFilter.java | Refactor to use constants and formatting |
| src/main/java/dasi/typing/jwt/GuestPrincipal.java | Converted to record |
| src/main/java/dasi/typing/jwt/GuestAuthenticationFilter.java | Use constants/static imports, remove inline strings |
| src/main/java/dasi/typing/handler/OAuth2AuthenticationSuccessHandler.java | Use constants and injected RedirectStrategy |
| src/main/java/dasi/typing/handler/OAuth2AuthenticationFailureHandler.java | Same refactor for failure path |
| src/main/java/dasi/typing/exception/Code.java | Add INSUFFICIENT_CONSENT_EXCEPTION code and message |
| src/main/java/dasi/typing/domain/refreshToken/RefreshToken.java | Remove @Builder, expose public constructor |
| src/main/java/dasi/typing/domain/memberConsent/MemberConsent.java | Builder removal, add protected no-args |
| src/main/java/dasi/typing/domain/member/Member.java | Builder removal, new addConsent(List<Consent>) method |
| src/main/java/dasi/typing/domain/consent/ConsentType.java | Add new AGE_LIMIT_POLICY enum member |
| src/main/java/dasi/typing/domain/consent/Consent.java | Add protected no-args and constructor for Consent |
| src/main/java/dasi/typing/config/RedirectConfig.java | Register RedirectStrategy bean |
| src/main/java/dasi/typing/api/service/oauth/request/KakaoUserCreateServiceRequest.java | Replace builder with constructor |
| src/main/java/dasi/typing/api/service/oauth/info/KakaoUserInfo.java | Remove unused imports; replace builder |
| src/main/java/dasi/typing/api/service/oauth/CustomOAuth2UserService.java | Use common constants for headers/URLs |
| src/main/java/dasi/typing/api/service/member/request/MemberCreateServiceRequest.java | Make fields final; remove logging |
| src/main/java/dasi/typing/api/service/member/MemberService.java | Add consent validation; use constants & record methods |
| src/main/java/dasi/typing/api/controller/member/response/NicknameResponse.java | Converted to record |
| src/main/java/dasi/typing/api/controller/member/MemberController.java | Use constants for headers; records for responses |
| src/docs/asciidoc/api/overview.adoc | Document new 6000 consent-required error |
| sql/consent-default.sql | Insert default consent records |
Comments suppressed due to low confidence (1)
src/main/java/dasi/typing/api/service/member/MemberService.java:61
- Consider adding a unit test for the new insufficient-consent scenario (when
consents.size() != REQUIRED_CONSENT_COUNT) to ensure theINSUFFICIENT_CONSENT_EXCEPTIONis thrown as expected.
List<Consent> consents = consentRepository.findByTypeIn(request.getAgreements());
| @@ -3,7 +3,6 @@ | |||
| import static lombok.AccessLevel.PROTECTED; | |||
There was a problem hiding this comment.
The static import lombok.AccessLevel.PROTECTED and the NoArgsConstructor import appear unused after removing the builder—please remove these unused imports.
| .grantType(BEARER_TYPE) | ||
| .accessToken(accessToken) | ||
| .refreshToken(refreshToken).build(); | ||
| return new JwtToken(BEARER_PREFIX.trim(), accessToken, refreshToken); |
There was a problem hiding this comment.
[nitpick] Relying on BEARER_PREFIX.trim() to derive the grant type could be fragile; consider defining a dedicated constant (e.g. GRANT_TYPE = "Bearer") to avoid trimming logic at runtime.
#️⃣ 연관된 이슈
#36 #41
📝 작업 내용
💬 리뷰 요구사항