Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Expand Up @@ -72,6 +72,11 @@ public PageResponseDTO<List<ContentResponseDTO>> getContentsByJobId(int page, in
.toList();

boolean hasNext = contentPage.hasNext();
return new PageResponseDTO<>(page, hasNext, contentList);

return PageResponseDTO.<List<ContentResponseDTO>>builder()
.page(page)
.hasNext(hasNext)
.result(contentList)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ public PageResponseDTO<List<ContentScrapResponseDTO>> getScrapContents(Member me
.map(ContentScrapConverter::toContentScrapResponseDTO)
.toList();

return new PageResponseDTO<>(page, scraps.hasNext(), contentList);
return PageResponseDTO.<List<ContentScrapResponseDTO>>builder()
.page(page)
.hasNext(scraps.hasNext())
.result(contentList)
.build();
}
Comment on lines +62 to 67
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

PageResponseDTO 생성 시 totalPages 필드 누락

PageResponseDTO에 새로 추가된 totalPages 필드가 설정되지 않았습니다. 클라이언트의 페이지네이션 구현을 위해 이 정보가 필요할 수 있습니다.

다음과 같이 수정을 제안합니다:

 return PageResponseDTO.<List<ContentScrapResponseDTO>>builder()
     .page(page)
     .hasNext(scraps.hasNext())
+    .totalPages(scraps.getTotalPages())
     .result(contentList)
     .build();
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
return PageResponseDTO.<List<ContentScrapResponseDTO>>builder()
.page(page)
.hasNext(scraps.hasNext())
.result(contentList)
.build();
}
return PageResponseDTO.<List<ContentScrapResponseDTO>>builder()
.page(page)
.hasNext(scraps.hasNext())
.totalPages(scraps.getTotalPages())
.result(contentList)
.build();
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package UMC.career_mate.domain.member.service;

import UMC.career_mate.domain.chatgpt.GptAnswer;
import UMC.career_mate.domain.chatgpt.repository.GptAnswerRepository;
import UMC.career_mate.domain.job.Job;
import UMC.career_mate.domain.job.Service.JobService;
import UMC.career_mate.domain.member.Member;
Expand All @@ -8,10 +10,11 @@
import UMC.career_mate.domain.member.dto.response.MemberInfoDTO;
import UMC.career_mate.domain.member.enums.SocialType;
import UMC.career_mate.domain.member.repository.MemberRepository;
import UMC.career_mate.domain.planner.dto.request.CreatePlannerDTO;
import UMC.career_mate.domain.planner.service.PlannerCommandService;
import UMC.career_mate.domain.recruit.enums.RecruitKeyword;
import UMC.career_mate.global.response.exception.GeneralException;
import UMC.career_mate.global.response.exception.code.CommonErrorCode;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -26,6 +29,7 @@ public class MemberService {
private final MemberRepository memberRepository;
private final JobService jobService;
private final PlannerCommandService plannerService;
private final GptAnswerRepository gptAnswerRepository;

@Transactional
public Member makeProfile(CreateProfileDTO request,Member member) {
Expand Down Expand Up @@ -77,9 +81,17 @@ public Member findMemberByIdAndClientId(Long memberId, String clientId) {
@Transactional
public Member changeProfile(Long memberId, CreateProfileDTO request) {
Member member = findMemberByMemberId(memberId);
Job beforeJob = member.getJob();
Job job = jobService.findJobById(request.job());
member.createProfile(request, job);

if (!beforeJob.getId().equals(job.getId())) {
gptAnswerRepository.findByMember(member).ifPresent(
gptAnswer -> gptAnswer.updateData(
RecruitKeyword.getRecruitKeywordFromProfileJob(job), 0)
);
}

return member;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package UMC.career_mate.domain.recruit.controller;

import UMC.career_mate.domain.member.Member;
import UMC.career_mate.domain.recruit.dto.response.RecommendRecruitDTO;
import UMC.career_mate.domain.recruit.dto.response.RecommendRecruitsDTO;
import UMC.career_mate.domain.recruit.dto.response.RecruitInfoDTO;
import UMC.career_mate.domain.recruit.enums.JobCode;
import UMC.career_mate.domain.recruit.enums.RecruitSortType;
Expand All @@ -11,7 +11,6 @@
import UMC.career_mate.global.common.PageResponseDTO;
import UMC.career_mate.global.response.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
Expand Down Expand Up @@ -41,7 +40,7 @@ public class RecruitController {
마감 늦은 순 -> DEADLINE_DESC
""")
@GetMapping
public ApiResponse<PageResponseDTO<List<RecommendRecruitDTO>>> getRecommendRecruitList(
public ApiResponse<PageResponseDTO<RecommendRecruitsDTO>> getRecommendRecruitList(
@RequestParam(defaultValue = "1", required = false) int page,
@RequestParam(defaultValue = "6", required = false) int size,
@RequestParam(defaultValue = "POSTING_DESC", required = false) RecruitSortType recruitSortType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
import UMC.career_mate.domain.recruit.dto.FilterConditionDTO;
import UMC.career_mate.domain.recruit.dto.MemberTemplateAnswerDTO;
import UMC.career_mate.domain.recruit.dto.api.SaraminResponseDTO.Job;
import UMC.career_mate.domain.recruit.dto.response.RecommendRecruitDTO;
import UMC.career_mate.domain.recruit.dto.response.RecommendRecruitsDTO;
import UMC.career_mate.domain.recruit.dto.response.RecommendRecruitsDTO.RecruitThumbNailInfoDTO;
import UMC.career_mate.domain.recruit.dto.response.RecruitInfoDTO;
import UMC.career_mate.domain.recruit.enums.EducationLevel;
import UMC.career_mate.domain.recruit.enums.RecruitKeyword;
Expand All @@ -15,6 +16,7 @@
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringEscapeUtils;

Expand Down Expand Up @@ -51,8 +53,15 @@ public static Recruit toRecruit(Job job, String recruitUrl, String companyInfoUr
.build();
}

public static RecommendRecruitDTO toRecommendRecruitDTO(Recruit recruit, boolean isScraped) {
return RecommendRecruitDTO.builder()
public static RecommendRecruitsDTO toRecommendRecruitsDTO(Member member, List<RecruitThumbNailInfoDTO> recruitThumbNailInfoDTOList) {
return RecommendRecruitsDTO.builder()
.jobName(member.getJob().getName())
.recruitThumbNailInfoDTOList(recruitThumbNailInfoDTOList)
.build();
}

public static RecruitThumbNailInfoDTO toRecruitThumbNailInfoDTO(Recruit recruit, boolean isScraped) {
return RecruitThumbNailInfoDTO.builder()
.recruitId(recruit.getId())
.companyName(recruit.getCompanyName())
.title(recruit.getTitle())
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package UMC.career_mate.domain.recruit.dto.response;

import java.time.LocalDateTime;
import java.util.List;
import lombok.Builder;

@Builder
public record RecommendRecruitsDTO(
String jobName,
List<RecruitThumbNailInfoDTO> recruitThumbNailInfoDTOList
) {

@Builder
public record RecruitThumbNailInfoDTO(
Long recruitId,
String companyName,
String title,
String deadLine,
boolean isScraped,

/**
* TODO: 아래로는 (필터링, 정렬) 잘 되는지 확인용 데이터, 나중에 삭제 예정
*/
Integer experienceLevelCode, // 경력 코드 : 0(경력무관), 1(신입), 2(경력), 3(신입/경력)
Integer experienceLevelMin, // 경력 년수 최소 값
Integer experienceLevelMax, // 경력 년수 최대 값
String experienceLevelName,
Integer educationLevelCode, // 학력 코드 0(학력무관), 1(고등학교졸업), 2(대학졸업(2,3년)), 3(대학졸업(4년)), 4(석사졸업), 5(박사졸업) 등
String educationLevelName,
LocalDateTime postingDate
) {

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,16 @@ public Page<Recruit> findByKeywordWithBooleanBuilder(RecruitKeyword recruitKeywo
.where(builder)
.orderBy(createOrderSpecifier(recruitSortType))
.offset(pageable.getOffset())
.limit(pageable.getPageSize() + 1)
.limit(pageable.getPageSize())
.fetch();

return new PageImpl<>(result);
Long total = queryFactory
.select(recruit.count())
.from(recruit)
.where(builder)
.fetchOne();

return new PageImpl<>(result, pageable, total);
}

private void filterIncludeKeywordList(List<String> includekeywordList, BooleanBuilder builder) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import UMC.career_mate.domain.member.Member;
import UMC.career_mate.domain.recruit.Recruit;
import UMC.career_mate.domain.recruit.converter.RecruitConverter;
import UMC.career_mate.domain.recruit.dto.response.RecommendRecruitDTO;
import UMC.career_mate.domain.recruit.dto.response.RecommendRecruitsDTO;
import UMC.career_mate.domain.recruit.dto.response.RecruitInfoDTO;
import UMC.career_mate.domain.recruit.enums.EducationLevel;
import UMC.career_mate.domain.recruit.enums.RecruitKeyword;
Expand Down Expand Up @@ -60,7 +60,7 @@ public class RecruitQueryService {
private final static String INTERN_QUESTION_CONTENT_PERIOD = "근무기간";
private final static String TEMPLATE_ANSWER_IS_NULL_OR_EMPTY_COMMENT = "프로젝트 또는 인턴 템플릿에 대해 답변을 작성하고, Chat GPT의 코멘트를 받아보세요!";

public PageResponseDTO<List<RecommendRecruitDTO>> getRecommendRecruitList(int page, int size,
public PageResponseDTO<RecommendRecruitsDTO> getRecommendRecruitList(int page, int size,
RecruitSortType recruitSortType, Member member) {
FilterConditionDTO filterCondition = createFilterCondition(member);

Expand All @@ -74,7 +74,7 @@ public PageResponseDTO<List<RecommendRecruitDTO>> getRecommendRecruitList(int pa
filterCondition.recruitKeyword(), educationLevel, filterCondition.careerYear(),
recruitSortType, pageRequest);

return createPageResponseDTO(page, size, findRecruitPage, member);
return createPageResponseDTO(findRecruitPage, member);
}

public RecruitInfoDTO findRecruitInfo(Member member, Long recruitId) {
Expand Down Expand Up @@ -266,22 +266,19 @@ private boolean isEmptyContentBuilder(StringBuilder contentBuilder, int projectE
== PROJECT_PREFIX.length() + projectEnterCnt + INTERN_PREFIX.length() + internEnterCnt;
}

private PageResponseDTO<List<RecommendRecruitDTO>> createPageResponseDTO(int page,
int size, Page<Recruit> findRecruitPage, Member member) {
private PageResponseDTO<RecommendRecruitsDTO> createPageResponseDTO(Page<Recruit> findRecruitPage, Member member) {
Set<Long> scrapedRecruitIds = recruitScrapRepository.findRecruitIdsByMember(member);

boolean hasNext = findRecruitPage.getSize() == size + 1;
RecommendRecruitsDTO recommendRecruitsDTO = RecruitConverter.toRecommendRecruitsDTO(member,
findRecruitPage.stream()
.map(recruit -> RecruitConverter.toRecruitThumbNailInfoDTO(recruit,
scrapedRecruitIds.contains(recruit.getId())))
.toList());

List<RecommendRecruitDTO> recommendRecruitDTOList = findRecruitPage.stream()
.limit(size)
.map(recruit -> RecruitConverter.toRecommendRecruitDTO(recruit,
scrapedRecruitIds.contains(recruit.getId())))
.toList();

return PageResponseDTO.<List<RecommendRecruitDTO>>builder()
.page(page)
.hasNext(hasNext)
.result(recommendRecruitDTOList)
return PageResponseDTO.<RecommendRecruitsDTO>builder()
.page(findRecruitPage.getNumber() + 1)
.totalPages(findRecruitPage.getTotalPages())
.result(recommendRecruitsDTO)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package UMC.career_mate.global.common;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Builder;

@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public record PageResponseDTO<T>(

int page,
boolean hasNext,
Boolean hasNext,
Integer totalPages,
T result

) {
Expand Down