Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/#113 로그 요청 목록 유효성 검사 기능 구현 #115

Merged
merged 6 commits into from
Aug 25, 2024

Conversation

miiiinju1
Copy link
Member

🚀 작업 내용

  • LogRequestsValidator 클래스 구현
  • LogController에 유효성 검사 기능 적용

LogRequestsValidator 로직 흐름

  1. 빈 요청 검사

    • 허용: 요청 목록이 null이 아니고 비어있지 않은 경우
    • 비허용: 요청 목록이 null이거나 비어있는 경우
      • 에러 메시지: "빈 요청이 전달되었습니다."
  2. 개별 요청 유효성 검사

    • 각 CreateLogRequest 객체에 대해 Jakarta Validation 수행
    • 허용: 모든 필드가 유효성 검사를 통과한 요청
    • 비허용: 하나 이상의 필드가 유효성 검사를 통과하지 못한 요청
      • 에러 메시지: "Request [인덱스]: [상세 오류 메시지]"
  3. 유효한 요청 필터링

    • 유효성 검사를 통과한 요청만 새 리스트에 추가
    • 원본 요청 목록을 유효한 요청들로 갱신
  4. 최종 검사

    • 허용: 하나 이상의 유효한 요청이 남아있는 경우
    • 비허용: 모든 요청이 유효성 검사를 통과하지 못한 경우
      • 에러 메시지: 모든 개별 요청의 오류 메시지를 줄바꿈으로 구분하여 반환

주요 시나리오 처리

  1. 모든 요청이 유효한 경우

    • 결과: 전체 요청 허용, 정상 처리
  2. 일부 요청만 유효한 경우

    • 결과: 유효한 요청만 허용, 유효하지 않은 요청은 필터링됨
    • 동작: 유효한 요청들만 로그 저장 서비스로 전달
  3. 모든 요청이 유효하지 않은 경우

    • 결과: 전체 요청 비허용
    • 동작: 모든 개별 요청의 오류 메시지를 포함한 ConstraintViolationException 발생
  4. 빈 요청 목록이 전달된 경우

    • 결과: 전체 요청 비허용
    • 동작: "빈 요청이 전달되었습니다." 메시지와 함께 ConstraintViolationException 발생

📸 이슈 번호

👀 Focus Commits [Optional]

  • 커밋해시: 내용

✍ 궁금한 점

  • 중점적으로 봐줄 내용
  • 변수명 괜찮나요
  • 로직이 좀 더럽나요
  • 가독성이 좀 그런가요?

- LogRequestsValidator 클래스 생성
- 빈 요청, 개별 요청, 전체 요청의 유효성 검사 로직 구현
- 유효하지 않은 요청 필터링 및 오류 메시지 생성 기능 추가
- 빈 요청 시 400 에러 반환 테스트
- 모든 요청 무효 시 400 에러 반환 테스트
- 일부 요청만 유효한 경우 정상 처리 테스트
- 전체 요청 유효 시 정상 처리 테스트
- data가 빈 줄일 때에 대한 예외상황을 허용하도록 변경
- @ValidLogRequests 어노테이션을 LogController의 saveLogs 메서드에 적용
@miiiinju1 miiiinju1 added the ⭐️ Feat 새로운 기능이나 요청 label Aug 24, 2024
@miiiinju1 miiiinju1 self-assigned this Aug 24, 2024
Copy link

github-actions bot commented Aug 24, 2024

Risk Level 2 - /home/runner/work/Team5-Guys/Team5-Guys/logbat/src/test/java/info/logbat/domain/log/presentation/LogControllerTest.java

The test cases are well-structured. However, consider using constants for repeated strings like the expected log level and data to improve maintainability. Example:

private static final String EXPECTED_LOG_LEVEL = \"INFO\";
private static final String EXPECTED_LOG_DATA = \"테스트_로그_데이터\";

Risk Level 2 - /home/runner/work/Team5-Guys/Team5-Guys/logbat/src/main/java/info/logbat/domain/log/presentation/LogController.java

The addition of the @ValidLogRequests annotation is a good practice for validating incoming requests. However, ensure that the LogService's saveLogs method handles potential null values for appKey and requests gracefully. Consider adding null checks before processing to avoid NullPointerExceptions.


Risk Level 3 - /home/runner/work/Team5-Guys/Team5-Guys/logbat/src/main/java/info/logbat/domain/log/presentation/validation/LogRequestsValidator.java

The isValid method could be improved for readability. Instead of using multiple return statements, consider using a single return statement at the end. This can help in understanding the flow of the method better. Example:

return !isEmptyRequest(requests, context) && !requests.isEmpty();

📝🔍⚙️


Powered by Code Review GPT

Copy link
Member

@LuizyHub LuizyHub left a comment

Choose a reason for hiding this comment

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

직접 Validator로 Validating 하면서 실패 에러를확인 할 수 있겠군요!
코드 잘 봤습니다!
코멘트 한번 검토부탁드리겠습니다

Comment on lines 76 to 78
return requests.stream()
.filter(request -> isValidRequest(request, requests.indexOf(request), errorMessages))
.toList();
Copy link
Member

Choose a reason for hiding this comment

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

indexOf 의 시간복잡도가 O(N)이라서 이렇게 직접 반복문을 돌 수 있도록 수정하는게 어떨까요?
아니면, index의 역할이 에러 message에만 추가하는 목적으로 보여서 index를 사용하지 않고 message를 추가하는 편도 좋겠어요!

Suggested change
return requests.stream()
.filter(request -> isValidRequest(request, requests.indexOf(request), errorMessages))
.toList();
List<CreateLogRequest> validRequests = new ArrayList<>();
for (int i = 0; i < requests.size(); i++) {
CreateLogRequest request = requests.get(i);
if (isValidRequest(request, i, errorMessages)) {
validRequests.add(request);
}
}
return validRequests;

Copy link
Member Author

Choose a reason for hiding this comment

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

좋습니다~~

Copy link
Member Author

Choose a reason for hiding this comment

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

@LuizyHub @tidavid1 확인 한 번 부탁드려요~

caf8bea

Copy link
Member

Choose a reason for hiding this comment

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

테스트 좋아요 👍🏻

Copy link
Member

@tidavid1 tidavid1 left a comment

Choose a reason for hiding this comment

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

@LuizyHub 이 남겨둔 리뷰 확인 후 체크해주면 좋을 것 같습니다

- requests로 stream을 돌리지 않고 ,IntStream을 통해 index 기반 접근하여 반환하도록 수정했습니다.
Copy link
Member

@LuizyHub LuizyHub left a comment

Choose a reason for hiding this comment

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

배열연산 수정된 부분 잘 확인했습니다!
수고하셨습니다~

@tidavid1 tidavid1 merged commit ee5a8f4 into dev Aug 25, 2024
1 check passed
@tidavid1 tidavid1 deleted the feat/#113 branch August 25, 2024 05:40
LuizyHub pushed a commit that referenced this pull request Aug 27, 2024
* feat: 로그 요청 유효성 검사를 위한 커스텀 어노테이션 추가

- ValidLogRequests 어노테이션 생성

* feat: 로그 요청 목록 유효성 검사 기능 구현

- LogRequestsValidator 클래스 생성
- 빈 요청, 개별 요청, 전체 요청의 유효성 검사 로직 구현
- 유효하지 않은 요청 필터링 및 오류 메시지 생성 기능 추가

* test: 여러 로그 POST 요청에 대한 테스트 케이스 추가

- 빈 요청 시 400 에러 반환 테스트
- 모든 요청 무효 시 400 에러 반환 테스트
- 일부 요청만 유효한 경우 정상 처리 테스트
- 전체 요청 유효 시 정상 처리 테스트

* test: 빈 줄을 허용하는 비즈니스 로직 변화로 테스트 코드 수정

- data가 빈 줄일 때에 대한 예외상황을 허용하도록 변경

* feat: LogController에 로그 요청 유효성 검사 적용

- @ValidLogRequests 어노테이션을 LogController의 saveLogs 메서드에 적용

* refactor: indexOf 연산을 사용하지 않기 위한 리팩토링

- requests로 stream을 돌리지 않고 ,IntStream을 통해 index 기반 접근하여 반환하도록 수정했습니다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
⭐️ Feat 새로운 기능이나 요청
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants