Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
d49f58e
feat: 나의 최근 한달동안 기록전 면접 조회
kckc0608 Feb 13, 2026
979f7ca
test: 나의 최근 한 달 기록전 면접 리스트 조회 테스트 작성
kckc0608 Feb 13, 2026
a0bb76a
[DEV-234] feat: 데스크탑 record 페이지 개발 (#360)
forhyundaisofteer Feb 13, 2026
d236440
[DEV-220/FE] feat: 자소서 연동 mock-api 연결 (#356)
HIHJH Feb 13, 2026
1d1876e
[DEV-221/FE] feat: 스크랩 모달 UI 구현 및 회고 작성 페이지 일부 mock-api 연결 (#359)
HIHJH Feb 13, 2026
eed6c48
feat: 프론트 요청에 따라 dto 응답에 review status 를 응답하도록 추가 (#367)
kckc0608 Feb 13, 2026
4b7a8df
[DEV-257/BE] docs: 모든 API 응답의 필수 필드에 @NotNull 어노테이션 추가 (#376)
kckc0608 Feb 15, 2026
be30e1f
[DEV-258/FE] fix: 스크롤 폴더 이름 입력 안되는 이슈 수정 (#374)
HIHJH Feb 15, 2026
4b8d92f
[DEV-261/BE] refactor: Swagger의 Pageable 객체 렌더링 개선 (#382)
lja3723 Feb 15, 2026
239ea6c
[DEV-263/BE] feat: 사용자 조회 API 응답에 동의 여부 필드 추가 (#386)
kckc0608 Feb 15, 2026
9b93bcc
[DEV-176/BE] test: QnaSetController 테스트 작성 (#369)
zxc534 Feb 15, 2026
5e5e6ea
[DEV-256/BE] test: QnaSetMyController 테스트 작성 (#371)
zxc534 Feb 15, 2026
33273d4
[DEV-188/BE] feat: llm 요청에 대한 인터페이스 설계 및 구현 (#378)
zxc534 Feb 16, 2026
2291a61
refactor: 최근 한달의 정의를 30일에서 실제 월 별 1달로 수정
kckc0608 Feb 16, 2026
fb8fa88
feat: 나의 최근 한달동안 기록전 면접 조회
kckc0608 Feb 13, 2026
96d9a14
test: 나의 최근 한 달 기록전 면접 리스트 조회 테스트 작성
kckc0608 Feb 13, 2026
9391aa9
refactor: 최근 한달의 정의를 30일에서 실제 월 별 1달로 수정
kckc0608 Feb 16, 2026
0425de7
Merge branch 'DEV-224/feat/모바일-뷰에서-기록전-상태의-면접만-조회하는-API-개발' of https:…
kckc0608 Feb 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.shyashyashya.refit.domain.company.dto;

import com.shyashyashya.refit.domain.company.model.Company;
import jakarta.validation.constraints.NotNull;

public record CompanyDto(Long companyId, String companyName, String companyLogoUrl) {
public record CompanyDto(@NotNull Long companyId, @NotNull String companyName, String companyLogoUrl) {
public static CompanyDto from(Company company) {
return new CompanyDto(company.getId(), company.getName(), company.getLogoUrl());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.shyashyashya.refit.domain.industry.dto;

import com.shyashyashya.refit.domain.industry.model.Industry;
import jakarta.validation.constraints.NotNull;

public record IndustryResponse(Long industryId, String industryName) {
public record IndustryResponse(
@NotNull Long industryId, @NotNull String industryName) {

public static IndustryResponse from(Industry industry) {
return new IndustryResponse(industry.getId(), industry.getName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import jakarta.validation.constraints.Positive;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
Expand Down Expand Up @@ -68,7 +69,7 @@ public ResponseEntity<ApiResponse<List<DashboardCalendarResponse>>> getDashboard
""")
@GetMapping("/interview/upcoming")
public ResponseEntity<ApiResponse<Page<DashboardUpcomingInterviewResponse>>> getUpcomingInterviews(
Pageable pageable) {
@ParameterObject Pageable pageable) {
var body = dashboardService.getUpcomingInterviews(pageable);
var response = ApiResponse.success(COMMON200, body);
return ResponseEntity.ok(response);
Expand All @@ -77,7 +78,7 @@ public ResponseEntity<ApiResponse<Page<DashboardUpcomingInterviewResponse>>> get
@Operation(summary = "대시보드에서 '내가 어렵게 느낀 질문'을 조회합니다.")
@GetMapping("/qna-set/my/difficult")
public ResponseEntity<ApiResponse<Page<DashboardMyDifficultQuestionResponse>>> getMyDifficultQnaSets(
Pageable pageable) {
@ParameterObject Pageable pageable) {
var body = dashboardService.getMyDifficultQnaSets(pageable);
var response = ApiResponse.success(COMMON200, body);
return ResponseEntity.ok(response);
Expand All @@ -86,7 +87,7 @@ public ResponseEntity<ApiResponse<Page<DashboardMyDifficultQuestionResponse>>> g
@Operation(summary = "대시보드에서 복기 대기중인 면접 리스트를 조회합니다.")
@GetMapping("/interview/debrief-uncompleted")
public ResponseEntity<ApiResponse<Page<DashboardDebriefIncompletedInterviewResponse>>>
getDebriefIncompletedInterviews(Pageable pageable) {
getDebriefIncompletedInterviews(@ParameterObject Pageable pageable) {
var body = dashboardService.getDebriefIncompletedInterviews(pageable);
var response = ApiResponse.success(COMMON200, body);
return ResponseEntity.ok(response);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
Expand All @@ -35,7 +37,7 @@ public class InterviewMyController {
""")
@PostMapping("/search")
public ResponseEntity<ApiResponse<Page<InterviewDto>>> searchInterviews(
@Valid @RequestBody InterviewSearchRequest request, Pageable pageable) {
@Valid @RequestBody InterviewSearchRequest request, @ParameterObject Pageable pageable) {
var body = interviewService.searchMyInterviews(request, pageable);
var response = ApiResponse.success(COMMON200, body);
return ResponseEntity.ok(response);
Expand All @@ -47,9 +49,20 @@ public ResponseEntity<ApiResponse<Page<InterviewDto>>> searchInterviews(
""")
@GetMapping("/draft")
public ResponseEntity<ApiResponse<Page<InterviewSimpleDto>>> getMyInterviewDrafts(
@RequestParam InterviewDraftType interviewDraftType, Pageable pageable) {
@RequestParam InterviewDraftType interviewDraftType, @ParameterObject Pageable pageable) {
var body = interviewService.getMyInterviewDrafts(interviewDraftType, pageable);
var response = ApiResponse.success(COMMON200, body);
return ResponseEntity.ok(response);
}

@Operation(summary = "아직 기록하지 않은 나의 면접들을 조회합니다.", description = """
현재일 기준 최근 한 달동안 본 면접 데이터 중 상태가 '기록전' 상태인 면접을 면접일 기준 내림차순으로 조회합니다.
모바일 화면에서 기록할 면접을 조회할 때 사용됩니다.
""")
@GetMapping("/not-logged")
public ResponseEntity<ApiResponse<List<InterviewSimpleDto>>> getMyNotLoggedInterviews() {
var body = interviewService.getMyNotLoggedInterviews();
var response = ApiResponse.success(COMMON200, body);
return ResponseEntity.ok(response);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,24 @@
import com.shyashyashya.refit.domain.company.model.Company;
import com.shyashyashya.refit.domain.interview.model.Interview;
import com.shyashyashya.refit.domain.interview.model.InterviewResultStatus;
import com.shyashyashya.refit.domain.interview.model.InterviewReviewStatus;
import com.shyashyashya.refit.domain.interview.model.InterviewType;
import com.shyashyashya.refit.domain.jobcategory.model.JobCategory;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;

public record InterviewDto(
Long interviewId,
InterviewType interviewType,
LocalDateTime interviewStartAt,
InterviewResultStatus interviewResultStatus,
@NotNull Long interviewId,
@NotNull InterviewType interviewType,
@NotNull LocalDateTime interviewStartAt,
@NotNull InterviewResultStatus interviewResultStatus,
@NotNull InterviewReviewStatus interviewReviewStatus,
String interviewRawText,
String companyName,
Long jobCategoryId,
String jobCategoryName,
LocalDateTime updatedAt,
LocalDateTime createdAt) {
@NotNull String companyName,
@NotNull Long jobCategoryId,
@NotNull String jobCategoryName,
@NotNull LocalDateTime updatedAt,
@NotNull LocalDateTime createdAt) {
public static InterviewDto from(Interview interview) {
Company company = interview.getCompany();
JobCategory jobCategory = interview.getJobCategory();
Expand All @@ -27,6 +30,7 @@ public static InterviewDto from(Interview interview) {
interview.getInterviewType(),
interview.getStartAt(),
interview.getResultStatus(),
interview.getReviewStatus(),
interview.getRawText(),
company.getName(),
jobCategory.getId(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.shyashyashya.refit.domain.interview.model.InterviewType;
import com.shyashyashya.refit.domain.qnaset.model.QnaSet;
import com.shyashyashya.refit.domain.qnaset.model.QnaSetSelfReview;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
Expand All @@ -14,17 +15,17 @@

@Builder(access = AccessLevel.PRIVATE)
public record InterviewFullDto(
Long interviewId,
InterviewType interviewType,
LocalDateTime interviewStartAt,
InterviewResultStatus interviewResultStatus,
String company,
Long industryId,
Long jobCategoryId,
@NotNull Long interviewId,
@NotNull InterviewType interviewType,
@NotNull LocalDateTime interviewStartAt,
@NotNull InterviewResultStatus interviewResultStatus,
@NotNull String company,
@NotNull Long industryId,
@NotNull Long jobCategoryId,
String jobRole,
LocalDateTime updatedAt,
@NotNull LocalDateTime updatedAt,
String pdfUrl,
List<QnaSetDto> qnaSets,
@NotNull List<QnaSetDto> qnaSets,
InterviewSelfReviewDto interviewSelfReview) {
public static InterviewFullDto fromInterviewWithEmptyQnaSets(Interview interview) {
return InterviewFullDto.builder()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package com.shyashyashya.refit.domain.interview.dto;

import com.shyashyashya.refit.domain.interview.model.InterviewSelfReview;
import jakarta.validation.constraints.NotNull;

public record InterviewSelfReviewDto(String keepText, String problemText, String tryText) {
public record InterviewSelfReviewDto(
@NotNull String keepText,
@NotNull String problemText,
@NotNull String tryText) {

public static InterviewSelfReviewDto from(InterviewSelfReview interviewSelfReview) {
return new InterviewSelfReviewDto(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@
import com.shyashyashya.refit.domain.interview.model.Interview;
import com.shyashyashya.refit.domain.interview.model.InterviewReviewStatus;
import com.shyashyashya.refit.domain.interview.model.InterviewType;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime;

public record InterviewSimpleDto(
Long interviewId,
InterviewType interviewType,
InterviewReviewStatus interviewReviewStatus,
LocalDateTime interviewStartAt,
CompanyDto companyInfo,
String jobCategoryName,
LocalDateTime updatedAt) {
@NotNull Long interviewId,
@NotNull InterviewType interviewType,
@NotNull InterviewReviewStatus interviewReviewStatus,
@NotNull LocalDateTime interviewStartAt,
@NotNull CompanyDto companyInfo,
@NotNull String jobCategoryName,
@NotNull LocalDateTime updatedAt) {
public static InterviewSimpleDto from(Interview interview) {
return new InterviewSimpleDto(
interview.getId(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@

import com.shyashyashya.refit.domain.qnaset.model.QnaSet;
import com.shyashyashya.refit.domain.qnaset.model.QnaSetSelfReview;
import jakarta.validation.constraints.NotNull;

public record QnaSetDto(
Long qnaSetId,
Long interviewId,
String questionText,
String answerText,
String qnaSetSelfReviewText,
@NotNull Long qnaSetId,
@NotNull Long interviewId,
@NotNull String questionText,
@NotNull String answerText,
@NotNull String qnaSetSelfReviewText,
StarAnalysisDto starAnalysis,
Boolean isMarkedDifficult) {
@NotNull Boolean isMarkedDifficult) {
public static QnaSetDto from(QnaSet qnaSet, QnaSetSelfReview qnaSetSelfReview, StarAnalysisDto starAnalysisDto) {
String selfReviewText = "";
if (qnaSetSelfReview != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

import com.shyashyashya.refit.domain.qnaset.model.StarAnalysis;
import com.shyashyashya.refit.domain.qnaset.model.StarInclusionLevel;
import jakarta.validation.constraints.NotNull;

public record StarAnalysisDto(
StarInclusionLevel sInclusionLevel,
StarInclusionLevel tInclusionLevel,
StarInclusionLevel aInclusionLevel,
StarInclusionLevel rInclusionLevel,
String overallSummary) {
@NotNull StarInclusionLevel sInclusionLevel,
@NotNull StarInclusionLevel tInclusionLevel,
@NotNull StarInclusionLevel aInclusionLevel,
@NotNull StarInclusionLevel rInclusionLevel,
@NotNull String overallSummary) {
public static StarAnalysisDto from(StarAnalysis starAnalysis) {
return new StarAnalysisDto(
starAnalysis.getSInclusionLevel(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@

import com.shyashyashya.refit.domain.interview.dto.InterviewDto;
import com.shyashyashya.refit.domain.interview.model.Interview;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDate;
import java.util.List;

public record DashboardCalendarResponse(LocalDate date, Long dDay, List<InterviewDto> interviews) {
public record DashboardCalendarResponse(
@NotNull LocalDate date,
@NotNull Long dDay,
@NotNull List<InterviewDto> interviews) {

public static DashboardCalendarResponse of(LocalDate date, Long dDay, List<Interview> interviews) {
return new DashboardCalendarResponse(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import com.shyashyashya.refit.domain.interview.dto.InterviewDto;
import com.shyashyashya.refit.domain.interview.model.Interview;
import jakarta.validation.constraints.NotNull;

public record DashboardDebriefIncompletedInterviewResponse(InterviewDto interview, Long passedDays) {
public record DashboardDebriefIncompletedInterviewResponse(
@NotNull InterviewDto interview, @NotNull Long passedDays) {
public static DashboardDebriefIncompletedInterviewResponse of(Interview interview, Long passedDays) {
return new DashboardDebriefIncompletedInterviewResponse(InterviewDto.from(interview), passedDays);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.shyashyashya.refit.domain.interview.dto.response;

import com.shyashyashya.refit.domain.user.model.User;
import jakarta.validation.constraints.NotNull;

public record DashboardHeadlineResponse(
DashboardHeadlineType headlineType, String nickname, Long upcomingInterviewDday) {
@NotNull DashboardHeadlineType headlineType,
@NotNull String nickname,
Long upcomingInterviewDday) {
public static DashboardHeadlineResponse registerInterview(User user) {
return new DashboardHeadlineResponse(DashboardHeadlineType.REGISTER_INTERVIEW, user.getNickname(), null);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import com.shyashyashya.refit.domain.interview.dto.InterviewDto;
import com.shyashyashya.refit.domain.qnaset.model.QnaSet;
import jakarta.validation.constraints.NotNull;

public record DashboardMyDifficultQuestionResponse(String question, InterviewDto interview) {
public record DashboardMyDifficultQuestionResponse(
@NotNull String question, @NotNull InterviewDto interview) {

public static DashboardMyDifficultQuestionResponse from(QnaSet qnaSet) {
return new DashboardMyDifficultQuestionResponse(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
import com.shyashyashya.refit.domain.interview.dto.InterviewDto;
import com.shyashyashya.refit.domain.interview.model.Interview;
import com.shyashyashya.refit.domain.qnaset.model.QnaSet;
import jakarta.validation.constraints.NotNull;
import java.util.List;

public record DashboardUpcomingInterviewResponse(
InterviewDto upcomingInterview, List<String> frequentlyAskedQuestions, List<InterviewDto> relatedInterviews) {
@NotNull InterviewDto upcomingInterview,
@NotNull List<String> frequentlyAskedQuestions,
@NotNull List<InterviewDto> relatedInterviews) {

public static DashboardUpcomingInterviewResponse of(
Interview upcomingInterview, List<QnaSet> frequentlyAskedQuestions, List<Interview> relatedInterviews) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
package com.shyashyashya.refit.domain.interview.dto.response;

public record GuideQuestionResponse(String guideQuestion) {}
import jakarta.validation.constraints.NotNull;

public record GuideQuestionResponse(@NotNull String guideQuestion) {}
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.shyashyashya.refit.domain.interview.dto.response;

import com.shyashyashya.refit.domain.qnaset.model.QnaSet;
import jakarta.validation.constraints.NotNull;
import lombok.AccessLevel;
import lombok.Builder;

@Builder(access = AccessLevel.PRIVATE)
public record QnaSetCreateResponse(Long qnaSetId) {
public record QnaSetCreateResponse(@NotNull Long qnaSetId) {
public static QnaSetCreateResponse from(QnaSet qnaSet) {
return new QnaSetCreateResponse(qnaSet.getId());
return QnaSetCreateResponse.builder().qnaSetId(qnaSet.getId()).build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
public enum InterviewReviewStatus {
NOT_LOGGED, // 기록 전
LOG_DRAFT, // 기록 중
QNA_SET_DRAFT,
QNA_SET_DRAFT, // 질답 세트 검토 중
SELF_REVIEW_DRAFT, // 회고 중
DEBRIEF_COMPLETED // 회고 완료
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import com.shyashyashya.refit.domain.interview.model.InterviewType;
import com.shyashyashya.refit.domain.user.model.User;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
Expand All @@ -19,4 +21,6 @@ Page<Interview> searchInterviews(
LocalDate startDate,
LocalDate endDate,
Pageable pageable);

List<Interview> findInterviewsNotLoggedRecentOneMonth(User user, LocalDateTime now);
}
Loading
Loading