Skip to content

[DEV-224/BE] feat: 모바일 뷰에서 기록전 상태의 면접만 조회하는 API 개발#364

Merged
kckc0608 merged 18 commits intodevfrom
DEV-224/feat/모바일-뷰에서-기록전-상태의-면접만-조회하는-API-개발
Feb 16, 2026

Hidden character warning

The head ref may contain hidden characters: "DEV-224/feat/\ubaa8\ubc14\uc77c-\ubdf0\uc5d0\uc11c-\uae30\ub85d\uc804-\uc0c1\ud0dc\uc758-\uba74\uc811\ub9cc-\uc870\ud68c\ud558\ub294-API-\uac1c\ubc1c"
Merged

[DEV-224/BE] feat: 모바일 뷰에서 기록전 상태의 면접만 조회하는 API 개발#364
kckc0608 merged 18 commits intodevfrom
DEV-224/feat/모바일-뷰에서-기록전-상태의-면접만-조회하는-API-개발

Conversation

@kckc0608
Copy link
Collaborator

관련 이슈

close #319

작업한 내용

  • 모바일 뷰에서 면접을 기록하기 전, 기록할 면접을 선택하기 위해 필요한 API 를 프론트 요청으로 추가 개발하였습니다.
  • '기록전' 상태의 면접들 중, 현재 시간 기준 최근 1달 전 인터뷰를 인터뷰 날짜 내림차순으로 조회합니다.

PR 리뷰시 참고할 사항

참고 자료 (링크, 사진, 예시 코드 등)

@gemini-code-assist
Copy link
Contributor

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@vercel
Copy link

vercel bot commented Feb 13, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
web-team4-refit Ignored Ignored Preview Feb 16, 2026 1:22am

@kckc0608 kckc0608 requested review from lja3723 and zxc534 and removed request for lja3723 February 13, 2026 04:51
@kckc0608 kckc0608 self-assigned this Feb 13, 2026
forhyundaisofteer and others added 3 commits February 13, 2026 13:53
* 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 에러 수정
@lja3723
Copy link
Collaborator

lja3723 commented Feb 13, 2026

/gemini review

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

안녕하세요. 모바일 뷰에서 기록 전 상태의 면접을 조회하는 API 추가 개발 건에 대한 리뷰입니다. 전반적으로 요구사항에 맞게 기능이 잘 구현되었고, 관련 테스트 케이스도 꼼꼼하게 작성해주셨습니다. 몇 가지 개선점을 제안드립니다. 첫째, '최근 한 달'을 조회하는 로직에서 minusDays(30) 대신 minusMonths(1)을 사용하여 월별 일수 차이를 정확히 반영하는 것을 고려해볼 수 있습니다. 둘째, 서비스 레이어의 테스트 용이성을 높이기 위해 LocalDateTime.now()를 직접 호출하는 대신 외부에서 시간 값을 주입받는 구조로 변경하는 것을 제안합니다. 자세한 내용은 각 파일의 주석을 참고해주세요.

Comment on lines +254 to +261
public List<InterviewSimpleDto> getMyNotLoggedInterviews() {
User requestUser = requestUserContext.getRequestUser();

LocalDateTime now = LocalDateTime.now();
return interviewRepository.findInterviewsNotLoggedRecentOneMonth(requestUser, now).stream()
.map(InterviewSimpleDto::from)
.toList();
}
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

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();
    }

Copy link
Collaborator

Choose a reason for hiding this comment

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

이 피드백은 제가 담당한 Jwt Encoder에서도 적용 가능한 것 같아요. 외부 주입으로 대체하는 것은 어떻게 생각하시나요?

Copy link
Collaborator Author

@kckc0608 kckc0608 Feb 14, 2026

Choose a reason for hiding this comment

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

저도 프로젝트하면서 이 부분이 항상 고민이었는데, AI 추천대로 컨트롤러로 빼기에는 '시간' 이라는 로직이 컨트롤러에 담기는 점이 불편하고, E2E 테스트를 할 때는 여전히 테스트가 어렵다는 문제점이 남아있어 AI 방법은 한계가 있는 것 같습니다!

GPT 활용해서 조사했을 때, Clock을 빈으로 주입받은 뒤, 주입받은 clock 을 LocalDateTime 생성 시 매개변수로 넘겨서 시간을 세팅하는 로직을 제안해주었는데, 이 방법이라면 테스트도 용이하고, 서비스 계층에서 시간을 다루는 것도 그대로 유지되어 계층간 책임이 명확하게 유지된다고 보여서 저도 좋은 것 같은데 이 방법은 어떠신가요??

@kckc0608 kckc0608 requested a review from lja3723 February 13, 2026 21:51
Copy link
Collaborator

@lja3723 lja3723 left a comment

Choose a reason for hiding this comment

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

수고하셨습니다! LGTM

Comment on lines +254 to +261
public List<InterviewSimpleDto> getMyNotLoggedInterviews() {
User requestUser = requestUserContext.getRequestUser();

LocalDateTime now = LocalDateTime.now();
return interviewRepository.findInterviewsNotLoggedRecentOneMonth(requestUser, now).stream()
.map(InterviewSimpleDto::from)
.toList();
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

이 피드백은 제가 담당한 Jwt Encoder에서도 적용 가능한 것 같아요. 외부 주입으로 대체하는 것은 어떻게 생각하시나요?

kckc0608 and others added 5 commits February 15, 2026 11:35
* docs: 프론트 요청에 따라 response 필드 중 not null 필드에 @NotNull 어노테이션 추가

* feat: user profile image url 필드에 not null 제약 추가 및 @NotNull 어노테이션 추가
* 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: 잘못된 테스트 이름 수정
Copy link
Collaborator

@zxc534 zxc534 left a comment

Choose a reason for hiding this comment

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

lgtm

zxc534 and others added 6 commits February 16, 2026 00:34
* 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
@kckc0608 kckc0608 merged commit 13b9cf2 into dev Feb 16, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[DEV-224/BE] feat: 모바일 뷰에서 기록전 상태의 면접만 조회하는 API 개발

5 participants