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 @@ -60,13 +60,13 @@ public static RecommendRecruitsDTO toRecommendRecruitsDTO(Member member, List<Re
.build();
}

public static RecruitThumbNailInfoDTO toRecruitThumbNailInfoDTO(Recruit recruit, boolean isScraped) {
public static RecruitThumbNailInfoDTO toRecruitThumbNailInfoDTO(Recruit recruit, boolean isScrapped) {
return RecruitThumbNailInfoDTO.builder()
.recruitId(recruit.getId())
.companyName(recruit.getCompanyName())
.title(recruit.getTitle())
.deadLine(formatDeadLine(recruit))
.isScraped(isScraped)
.isScrapped(isScrapped)
.experienceLevelCode(recruit.getExperienceLevelCode())
.experienceLevelMin(recruit.getExperienceLevelMin())
.experienceLevelMax(recruit.getExperienceLevelMax())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public record RecruitThumbNailInfoDTO(
String companyName,
String title,
String deadLine,
boolean isScraped,
boolean isScrapped,

/**
* TODO: 아래로는 (필터링, 정렬) 잘 되는지 확인용 데이터, 나중에 삭제 예정
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -267,12 +267,12 @@ private boolean isEmptyContentBuilder(StringBuilder contentBuilder, int projectE
}

private PageResponseDTO<RecommendRecruitsDTO> createPageResponseDTO(Page<Recruit> findRecruitPage, Member member) {
Set<Long> scrapedRecruitIds = recruitScrapRepository.findRecruitIdsByMember(member);
Set<Long> scrappedRecruitIds = recruitScrapRepository.findRecruitIdsByMember(member);

RecommendRecruitsDTO recommendRecruitsDTO = RecruitConverter.toRecommendRecruitsDTO(member,
findRecruitPage.stream()
.map(recruit -> RecruitConverter.toRecruitThumbNailInfoDTO(recruit,
scrapedRecruitIds.contains(recruit.getId())))
scrappedRecruitIds.contains(recruit.getId())))
.toList());

return PageResponseDTO.<RecommendRecruitsDTO>builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,6 @@ public class RecruitScrap extends BaseEntity {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "recruit_id")
private Recruit recruit;

private String jobName;
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

jobName 필드에 제약 조건 추가 필요

jobName 필드에 대한 길이 제한이나 null 허용 여부 등의 제약 조건이 명시되어 있지 않습니다.

다음과 같이 제약 조건을 추가하는 것을 권장합니다:

-    private String jobName;
+    @Column(name = "job_name", nullable = false, length = 100)
+    private String jobName;
📝 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
private String jobName;
@Column(name = "job_name", nullable = false, length = 100)
private String jobName;

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
import UMC.career_mate.global.annotation.LoginMember;
import UMC.career_mate.global.response.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import java.util.List;

import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.DeleteMapping;
Expand Down Expand Up @@ -60,9 +58,7 @@ public ApiResponse<String> deleteRecruitScrap(@LoginMember Member member,
로그인 인증만을 요구합니다.
""")
@GetMapping
public ApiResponse<List<RecruitScrapResponseDTO>> getRecruitScrapList(
@LoginMember Member member) {
public ApiResponse<RecruitScrapResponseDTO> getRecruitScrapList(@LoginMember Member member) {
return ApiResponse.onSuccess(recruitScrapQueryService.findRecruitScrapList(member));
}

}
Original file line number Diff line number Diff line change
@@ -1,31 +1,47 @@
package UMC.career_mate.domain.recruitScrap.converter;

import UMC.career_mate.domain.job.Job;
import UMC.career_mate.domain.member.Member;
import UMC.career_mate.domain.recruit.Recruit;
import UMC.career_mate.domain.recruitScrap.RecruitScrap;
import UMC.career_mate.domain.recruitScrap.dto.response.RecruitScrapResponseDTO;
import UMC.career_mate.domain.recruitScrap.dto.response.RecruitScrapResponseDTO.RecruitScrapThumbNailInfoDTO;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.List;

public class RecruitScrapConverter {

public static RecruitScrap toEntity(Member member, Recruit recruit) {
return RecruitScrap.builder()
.member(member)
.recruit(recruit)
.jobName(member.getJob().getName())
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

member.getJob()에 대한 null 체크 필요

member.getJob()이 null을 반환할 경우 NullPointerException이 발생할 수 있습니다.

다음과 같이 수정하는 것을 권장합니다:

-            .jobName(member.getJob().getName())
+            .jobName(member.getJob() != null ? member.getJob().getName() : null)
📝 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
.jobName(member.getJob().getName())
.jobName(member.getJob() != null ? member.getJob().getName() : null)

.build();
}

public static RecruitScrapResponseDTO toRecruitScrapResponseDTO(Recruit recruit, String jobName) {
public static RecruitScrapResponseDTO toRecruitScrapResponseDTO(Job job,
List<RecruitScrapThumbNailInfoDTO> recruitScrapThumbNailInfoDTOList) {
return RecruitScrapResponseDTO.builder()
.recruitId(recruit.getId())
.companyName(recruit.getCompanyName())
.title(recruit.getTitle())
.deadLine(formatDeadLine(recruit))
.isScraped(true)
.companyInfoUrl(recruit.getCompanyInfoUrl())
.recruitUrl(recruit.getRecruitUrl())
.jobName(jobName)
.jobName(job.getName())
.recruitScrapThumbNailInfoDTOList(recruitScrapThumbNailInfoDTOList)
.build();
}

public static RecruitScrapThumbNailInfoDTO toRecruitScrapThumbNailInfoDTO(RecruitScrap recruitScrap) {
return RecruitScrapThumbNailInfoDTO.builder()
.recruitId(recruitScrap.getRecruit().getId())
.companyName(recruitScrap.getRecruit().getCompanyName())
.title(recruitScrap.getRecruit().getTitle())
.deadLine(formatDeadLine(recruitScrap.getRecruit()))
.isScrapped(true)
.build();
}

public static RecruitScrapResponseDTO toEmptyRecruitScrapResponseDTO(Job job) {
return RecruitScrapResponseDTO.builder()
.jobName(job.getName())
.recruitScrapThumbNailInfoDTOList(List.of())
.build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
package UMC.career_mate.domain.recruitScrap.dto.response;

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

@Builder
public record RecruitScrapResponseDTO(
Long recruitId,
String companyName,
String title,
String deadLine,
boolean isScraped,
String companyInfoUrl,
String recruitUrl,
String jobName
String jobName,
List<RecruitScrapThumbNailInfoDTO> recruitScrapThumbNailInfoDTOList
) {

@Builder
public record RecruitScrapThumbNailInfoDTO(
Long recruitId,
String companyName,
String title,
String deadLine,
boolean isScrapped
){
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public interface RecruitScrapRepository extends JpaRepository<RecruitScrap, Long

Optional<RecruitScrap> findByMemberAndRecruitId(Member member, Long recruitId);

@Query("select rs from RecruitScrap rs join fetch rs.recruit where rs.member = :member")
List<RecruitScrap> findByMember(@Param("member") Member member);
@Query("select rs from RecruitScrap rs join fetch rs.recruit where rs.member = :member and rs.jobName = :jobName")
List<RecruitScrap> findByMemberAndJobName(@Param("member") Member member, @Param("jobName") String jobName);

@Query("select rs.recruit.id from RecruitScrap rs where rs.member = :member")
Set<Long> findRecruitIdsByMember(@Param("member") Member member);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package UMC.career_mate.domain.recruitScrap.service;

import UMC.career_mate.domain.job.Job;
import UMC.career_mate.domain.member.Member;
import UMC.career_mate.domain.recruitScrap.RecruitScrap;
import UMC.career_mate.domain.recruitScrap.converter.RecruitScrapConverter;
import UMC.career_mate.domain.recruitScrap.dto.response.RecruitScrapResponseDTO;
import UMC.career_mate.domain.recruitScrap.dto.response.RecruitScrapResponseDTO.RecruitScrapThumbNailInfoDTO;
import UMC.career_mate.domain.recruitScrap.repository.RecruitScrapRepository;
import java.util.List;
import lombok.RequiredArgsConstructor;
Expand All @@ -17,17 +19,20 @@ public class RecruitScrapQueryService {

private final RecruitScrapRepository recruitScrapRepository;

public List<RecruitScrapResponseDTO> findRecruitScrapList(Member member) {
List<RecruitScrap> recruitScrapList = recruitScrapRepository.findByMember(member);
public RecruitScrapResponseDTO findRecruitScrapList(Member member) {
Job job = member.getJob();
List<RecruitScrap> recruitScrapList = recruitScrapRepository.findByMemberAndJobName(member,
job.getName());

if (recruitScrapList.isEmpty()) {
return List.of();
return RecruitScrapConverter.toEmptyRecruitScrapResponseDTO(job);
}

return recruitScrapList.stream()
.map(RecruitScrap::getRecruit)
.map(recruit -> RecruitScrapConverter.toRecruitScrapResponseDTO(recruit,
member.getJob().getName()))
List<RecruitScrapThumbNailInfoDTO> recruitScrapThumbNailInfoDTOList = recruitScrapList.stream()
.map(RecruitScrapConverter::toRecruitScrapThumbNailInfoDTO)
.toList();

return RecruitScrapConverter.toRecruitScrapResponseDTO(job,
recruitScrapThumbNailInfoDTOList);
}
}