Skip to content

Refactor: Member 관련 코드 리팩터링 #42

Merged
Bumnote merged 7 commits intodevfrom
refactor/member
Jun 27, 2025
Merged

Refactor: Member 관련 코드 리팩터링 #42
Bumnote merged 7 commits intodevfrom
refactor/member

Conversation

@Bumnote
Copy link
Copy Markdown
Member

@Bumnote Bumnote commented Jun 23, 2025

#️⃣ 연관된 이슈

#36 #41

📝 작업 내용

  • Jacoco 테스트 커버리지 결과를 개선하기 위하여 Member 관련 코드 리팩토링을 진행했습니다.
  • 사용하지 않는 변수 및 메소드는 삭제했습니다.
  • 데이터 변환용으로 쓰이는 DTO 클래스들을 불변 클래스인 레코드로 변경했습니다.
  • 약관 항목이 추가되어 enum 클래스 및 관련 코드들을 수정했습니다.
  • 약관 항목 추가로 인한 REST DOCS 문서를 수정했습니다.
  • 초기 약관 데이터를 삽입하기 위한 Consent sql 파일을 작성했습니다.

💬 리뷰 요구사항

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요


Bumnote added 7 commits June 23, 2025 23:15
- 실질적으로 쓰이지 않는 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
@Bumnote Bumnote requested a review from Copilot June 23, 2025 14:37
@Bumnote Bumnote self-assigned this Jun 23, 2025
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 the INSUFFICIENT_CONSENT_EXCEPTION is thrown as expected.
    List<Consent> consents = consentRepository.findByTypeIn(request.getAgreements());

@@ -3,7 +3,6 @@
import static lombok.AccessLevel.PROTECTED;
Copy link

Copilot AI Jun 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The static import lombok.AccessLevel.PROTECTED and the NoArgsConstructor import appear unused after removing the builder—please remove these unused imports.

Copilot uses AI. Check for mistakes.
.grantType(BEARER_TYPE)
.accessToken(accessToken)
.refreshToken(refreshToken).build();
return new JwtToken(BEARER_PREFIX.trim(), accessToken, refreshToken);
Copy link

Copilot AI Jun 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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.

Copilot uses AI. Check for mistakes.
@Bumnote Bumnote merged commit ffa2598 into dev Jun 27, 2025
@Bumnote Bumnote changed the title Refactor: Member 관련 코드 리팩토링 Refactor: Member 관련 코드 리팩타링 Jun 27, 2025
@Bumnote Bumnote changed the title Refactor: Member 관련 코드 리팩타링 Refactor: Member 관련 코드 리팩터링 Jun 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Dev] Jacoco Test Coverage 측정 및 개선 [Test] 전반적인 테스트 코드 보완 및 Spring REST Docs 적용

2 participants