[DEV-224/BE] feat: 모바일 뷰에서 기록전 상태의 면접만 조회하는 API 개발#364
Conversation
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
* feat: LiveAudioVisualizer 데스크탑, 모바일로 분리 * feat: 복기 대기 중인 면접 mock API 연동 * feat: /record 페이지 추가 * feat: 로딩 오버레이 추가 * refactor: query 사용하게 변경
* fix: 하이라이팅 API 응답에 맞추어 pageNumber로 변수명 통일 * feat: 자기소개서 연결된 텍스트 실시간으로 보이도록 UI 변경 및 버튼 파일 분리 * feat: useSuspenseQueries 사용하여 질답별 하이라이트 조회 API 연결 및 하이라이트 생성, 수정 API 연결 * feat: 뒤로 가기 버튼 추가 * feat: 질답 조회 API 연결 및 fallback skeleton 처리 추가 * feat: 하이라이팅 관련 mock handler 추가 * fix: 하이라이팅 API 응답에 맞추어 pageNumber로 변수명 통일 * fix: minimized sidebar skeleton 추가 * fix: qnaSetId null filter 추가 Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* feat: 회고 페이지 mock-api 등록 * feat: 질답 리스트 조회 API 연결 * feat: 스크랩 모달 구현 및 스크랩 폴더 목록 조회 API 연결 * fix: 모달 사이즈에 따라 title mb 스타일 수정 * feat: 회고 저장 useUpdateQnaSet API 연동 및 스크랩 아이콘 추가 * feat: 사이드바에서 번호 변경 시, 회고 저장되도록 추가 예정 * fix: Number(interviewId) 변수화 * fix: 초기 페이지 0으로 변경 * fix: import 에러 수정
|
/gemini review |
There was a problem hiding this comment.
Code Review
안녕하세요. 모바일 뷰에서 기록 전 상태의 면접을 조회하는 API 추가 개발 건에 대한 리뷰입니다. 전반적으로 요구사항에 맞게 기능이 잘 구현되었고, 관련 테스트 케이스도 꼼꼼하게 작성해주셨습니다. 몇 가지 개선점을 제안드립니다. 첫째, '최근 한 달'을 조회하는 로직에서 minusDays(30) 대신 minusMonths(1)을 사용하여 월별 일수 차이를 정확히 반영하는 것을 고려해볼 수 있습니다. 둘째, 서비스 레이어의 테스트 용이성을 높이기 위해 LocalDateTime.now()를 직접 호출하는 대신 외부에서 시간 값을 주입받는 구조로 변경하는 것을 제안합니다. 자세한 내용은 각 파일의 주석을 참고해주세요.
...a/com/shyashyashya/refit/domain/interview/repository/impl/InterviewCustomRepositoryImpl.java
Outdated
Show resolved
Hide resolved
| public List<InterviewSimpleDto> getMyNotLoggedInterviews() { | ||
| User requestUser = requestUserContext.getRequestUser(); | ||
|
|
||
| LocalDateTime now = LocalDateTime.now(); | ||
| return interviewRepository.findInterviewsNotLoggedRecentOneMonth(requestUser, now).stream() | ||
| .map(InterviewSimpleDto::from) | ||
| .toList(); | ||
| } |
There was a problem hiding this comment.
LocalDateTime.now()를 서비스 레이어에서 직접 호출하면, 시간에 의존적인 로직에 대한 단위 테스트 작성이 어려워집니다. 시간 정보를 외부(예: 컨트롤러)에서 파라미터로 주입받도록 변경하여 테스트 용이성을 높이는 것을 제안합니다. 이렇게 변경하면 컨트롤러에서 interviewService.getMyNotLoggedInterviews(LocalDateTime.now())와 같이 호출해야 합니다.
public List<InterviewSimpleDto> getMyNotLoggedInterviews(LocalDateTime now) {
User requestUser = requestUserContext.getRequestUser();
return interviewRepository.findInterviewsNotLoggedRecentOneMonth(requestUser, now).stream()
.map(InterviewSimpleDto::from)
.toList();
}There was a problem hiding this comment.
이 피드백은 제가 담당한 Jwt Encoder에서도 적용 가능한 것 같아요. 외부 주입으로 대체하는 것은 어떻게 생각하시나요?
There was a problem hiding this comment.
저도 프로젝트하면서 이 부분이 항상 고민이었는데, AI 추천대로 컨트롤러로 빼기에는 '시간' 이라는 로직이 컨트롤러에 담기는 점이 불편하고, E2E 테스트를 할 때는 여전히 테스트가 어렵다는 문제점이 남아있어 AI 방법은 한계가 있는 것 같습니다!
GPT 활용해서 조사했을 때, Clock을 빈으로 주입받은 뒤, 주입받은 clock 을 LocalDateTime 생성 시 매개변수로 넘겨서 시간을 세팅하는 로직을 제안해주었는데, 이 방법이라면 테스트도 용이하고, 서비스 계층에서 시간을 다루는 것도 그대로 유지되어 계층간 책임이 명확하게 유지된다고 보여서 저도 좋은 것 같은데 이 방법은 어떠신가요??
| public List<InterviewSimpleDto> getMyNotLoggedInterviews() { | ||
| User requestUser = requestUserContext.getRequestUser(); | ||
|
|
||
| LocalDateTime now = LocalDateTime.now(); | ||
| return interviewRepository.findInterviewsNotLoggedRecentOneMonth(requestUser, now).stream() | ||
| .map(InterviewSimpleDto::from) | ||
| .toList(); | ||
| } |
There was a problem hiding this comment.
이 피드백은 제가 담당한 Jwt Encoder에서도 적용 가능한 것 같아요. 외부 주입으로 대체하는 것은 어떻게 생각하시나요?
* fix: prevIsOpen 제거하고 key 기반 리마운트로 초기화 처리 * fix: 다른 폴더 선택 뿐만 아니라 열기/닫기(activeModal 상태 변경) 시에도 key 바뀌도록 수정
* feat: QnaSetIntegrationTest 생성 * test: 질답_세트_생성에_성공한다 작성 * feat: 질답 세트 생성 시 interview가 qnaSetDraft 상태인지 검증 로직 추가 * test: 인터뷰 상태에 검증 추가로 테스트 로직 수정 * chore: 프롬프트 파일 삭제 * test: 어려웠던 질문 마킹 등록/해제 테스트 작성 * feat: 인터뷰 상태 검증 로직 추가 * test: 질답 세트 수정 테스트 작성 * test: 면접 생성을 메소드 사용하여 간소화 * test: 질답 세트 수정 테스트 추가 * test: 질문 답변 세트 삭제 테스트 작성 * docs: 하이라이팅 등록/수정 API swagger 작성 * feat: PDF 하이라이팅 업데이트 시 면접 상태 검증 로직 추가 * test: PDF 하이라이팅 등록 테스트 작성 * test: createAndSavePdfHighlighting 메소드 구현 * test: PDF 하이라이팅 조회 테스트 작성 * chore: spotless 적용 * test: 실제 값 검증 로직을 추가 * fix: unmark 메소드가 값을 false로 설정하도록 수정 * chore: 잘못된 테스트 이름 수정
* feat: QnaSetIntegrationTest 생성 * test: 질답_세트_생성에_성공한다 작성 * feat: 질답 세트 생성 시 interview가 qnaSetDraft 상태인지 검증 로직 추가 * test: 인터뷰 상태에 검증 추가로 테스트 로직 수정 * chore: 프롬프트 파일 삭제 * test: 어려웠던 질문 마킹 등록/해제 테스트 작성 * feat: 인터뷰 상태 검증 로직 추가 * test: 질답 세트 수정 테스트 작성 * test: 면접 생성을 메소드 사용하여 간소화 * test: 질답 세트 수정 테스트 추가 * test: 질문 답변 세트 삭제 테스트 작성 * docs: 하이라이팅 등록/수정 API swagger 작성 * feat: PDF 하이라이팅 업데이트 시 면접 상태 검증 로직 추가 * test: PDF 하이라이팅 등록 테스트 작성 * test: createAndSavePdfHighlighting 메소드 구현 * test: PDF 하이라이팅 조회 테스트 작성 * chore: spotless 적용 * test: 실제 값 검증 로직을 추가 * fix: unmark 메소드가 값을 false로 설정하도록 수정 * chore: 잘못된 테스트 이름 수정 * test: qnaSetCategory 테스트 데이터 추가 * test: qnaSetMy 통합 테스트 작성 * refactor: 테스트 코드의 공통 부분을 외부 클래스의 BeforeEach로 분리 * chore: QnaSetDraft->질답 세트 검토 중, 명칭 변경 * chore: 테스트 코드 들여쓰기 수정 * chore: 일회성 변수 타입을 var로 수정 * test: 테스트에 업데이트된 값 검증 추가 * test: 질답 세트 수정 테스트 ParameterizedTest+EnumSource로 케이스 추가 * test: 테스트 케이스 추가 * chore: given/when/then 주석 추가 * chore: spoless 적용
* refactor: 요청 URL을 Enum으로 분리 * feat: Gemini 생성 결과에 JSON 이외 텍스트 처리 로직 추가 * chore: gemini 요청 모델을 gemma 3 27B로 변경 * chore: spotless 적용 * feat: Embedding 요청 응답 dto 작성 * feat: 임베딩 요청 메소드 추가 * feat: 임베딩 요청 임시 API 추가 * chore: 불필요한 로그 제거 * chore: 메소드 명칭 수정 * chore: 에러 코드에서 의미가 명확하게 드러나도록 수정 * chore: 정적 팩토리 메소드 네이밍 수정 * chore: GenerateModel 필드명 변경 id->name * refactor: 테스트 메소드의 계층 분리 제거 * refactor: 임베딩 테스트 메소드를 테스트 컨트롤러로 이동 * chore: spotless 적용
# Conflicts: # backend/src/main/java/com/shyashyashya/refit/domain/interview/dto/InterviewSimpleDto.java
…//github.com/softeerbootcamp-7th/Team4-Lookback into DEV-224/feat/모바일-뷰에서-기록전-상태의-면접만-조회하는-API-개발
관련 이슈
close #319
작업한 내용
PR 리뷰시 참고할 사항
참고 자료 (링크, 사진, 예시 코드 등)