Skip to content

Commit

Permalink
fix-be: 프로세스 목록 조회 API 정렬 적용 방식 변경 (#834)
Browse files Browse the repository at this point in the history
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: cutehumanS2 <[email protected]>
  • Loading branch information
github-actions[bot] and cutehumanS2 authored Oct 18, 2024
1 parent d854fbc commit 2039370
Show file tree
Hide file tree
Showing 9 changed files with 47 additions and 50 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.cruru.applicant.domain;

import com.cruru.applicant.domain.dto.ApplicantCard;
import com.cruru.applicant.exception.badrequest.ApplicantSortException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Optional;

public enum ApplicantSortOption {

Expand All @@ -16,19 +16,26 @@ public enum ApplicantSortOption {
this.comparator = comparator;
}

public static Comparator<ApplicantCard> getCombinedComparator(String sortByCreatedAt, String sortByScore) {
ApplicantSortOption createdAtOption = convertToSortOption(sortByCreatedAt);
ApplicantSortOption scoreOption = convertToSortOption(sortByScore);

return createdAtOption.getCreatedAtComparator()
.thenComparing(scoreOption.getScoreComparator());
public static Comparator<ApplicantCard> getComparator(String sortByCreatedAt, String sortByScore) {
Optional<ApplicantSortOption> createdAtOption = convertToSortOption(sortByCreatedAt);
Optional<ApplicantSortOption> scoreOption = convertToSortOption(sortByScore);

if (createdAtOption.isPresent()) {
return createdAtOption.get().getCreatedAtComparator();
}
if (scoreOption.isPresent()) {
return scoreOption.get().getScoreComparator();
}
return Comparator.comparing(ApplicantCard::createdAt, DESC.comparator);
}

private static ApplicantSortOption convertToSortOption(String sortOption) {
private static Optional<ApplicantSortOption> convertToSortOption(String sortOption) {
if (sortOption == null || sortOption.isEmpty()) {
return Optional.empty();
}
return Arrays.stream(ApplicantSortOption.values())
.filter(option -> option.name().equalsIgnoreCase(sortOption))
.findAny()
.orElseThrow(ApplicantSortException::new);
.findAny();
}

private Comparator<ApplicantCard> getCreatedAtComparator() {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public List<ApplicantCard> findApplicantCards(
return applicantCards.stream()
.filter(card -> filterByScore(card, minScore, maxScore))
.filter(card -> EvaluationStatus.matches(card, evaluationStatus))
.sorted(ApplicantSortOption.getCombinedComparator(sortByCreatedAt, sortByScore))
.sorted(ApplicantSortOption.getComparator(sortByCreatedAt, sortByScore))
.toList();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ public ResponseEntity<ProcessResponses> read(
@RequestParam(name = "minScore", required = false, defaultValue = "0.00") Double minScore,
@RequestParam(name = "maxScore", required = false, defaultValue = "5.00") Double maxScore,
@RequestParam(name = "evaluationStatus", required = false, defaultValue = "ALL") String evaluationStatus,
@RequestParam(name = "sortByCreatedAt", required = false, defaultValue = "DESC") String sortByCreatedAt,
@RequestParam(name = "sortByScore", required = false, defaultValue = "DESC") String sortByScore,
@RequestParam(name = "sortByCreatedAt", required = false) String sortByCreatedAt,
@RequestParam(name = "sortByScore", required = false) String sortByScore,
LoginProfile loginProfile
) {
ProcessResponses processes = processFacade.readAllByDashboardId(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

import com.cruru.applicant.domain.dto.ApplicantCard;
import com.cruru.util.fixture.ApplicantCardFixture;
import com.cruru.util.fixture.DefaultFilterAndOrderFixture;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
Expand Down Expand Up @@ -33,9 +32,9 @@ void getCreatedAtComparator_asc(String sortByCreatedAt) {
List<ApplicantCard> applicantCards = Arrays.asList(applicantCard2, applicantCard1);

// when
applicantCards.sort(ApplicantSortOption.getCombinedComparator(
applicantCards.sort(ApplicantSortOption.getComparator(
sortByCreatedAt,
DefaultFilterAndOrderFixture.DEFAULT_SORT_BY_SCORE
null
));

// then
Expand All @@ -54,10 +53,9 @@ void getCreatedAtComparator_desc(String sortByCreatedAt) {
List<ApplicantCard> applicantCards = Arrays.asList(applicantCard1, applicantCard2);

// when
applicantCards.sort(ApplicantSortOption.getCombinedComparator(
applicantCards.sort(ApplicantSortOption.getComparator(
sortByCreatedAt,
DefaultFilterAndOrderFixture.DEFAULT_SORT_BY_SCORE

null
));

// then
Expand All @@ -72,17 +70,17 @@ class getScoreComparatorTest {
@DisplayName("지원자의 평균 점수 기준으로 오름차순으로 정렬한다.")
@ParameterizedTest
@ValueSource(strings = {"ASC", "asc"})
void getScoreComparator_asc(String sortByCreatedAt) {
void getScoreComparator_asc(String sortByScore) {
// given
LocalDateTime createdAt = LocalDateTime.of(2024, 10, 2, 20, 0);
ApplicantCard applicantCard1 = ApplicantCardFixture.evaluatedApplicantCard(createdAt);
ApplicantCard applicantCard2 = ApplicantCardFixture.evaluatedApplicantCard(createdAt);
List<ApplicantCard> applicantCards = Arrays.asList(applicantCard1, applicantCard2);

// when
applicantCards.sort(ApplicantSortOption.getCombinedComparator(
DefaultFilterAndOrderFixture.DEFAULT_SORT_BY_CREATED_AT,
sortByCreatedAt
applicantCards.sort(ApplicantSortOption.getComparator(
null,
sortByScore
));

// then
Expand All @@ -92,17 +90,17 @@ void getScoreComparator_asc(String sortByCreatedAt) {
@DisplayName("지원자의 평균 점수 기준으로 내림차순으로 정렬한다.")
@ParameterizedTest
@ValueSource(strings = {"DESC", "desc"})
void getScoreComparator_desc(String sortByCreatedAt) {
void getScoreComparator_desc(String sortByScore) {
// given
LocalDateTime createdAt = LocalDateTime.of(2024, 10, 2, 20, 0);
ApplicantCard applicantCard1 = ApplicantCardFixture.evaluatedApplicantCard(createdAt);
ApplicantCard applicantCard2 = ApplicantCardFixture.evaluatedApplicantCard(createdAt);
List<ApplicantCard> applicantCards = Arrays.asList(applicantCard2, applicantCard1);

// when
applicantCards.sort(ApplicantSortOption.getCombinedComparator(
DefaultFilterAndOrderFixture.DEFAULT_SORT_BY_CREATED_AT,
sortByCreatedAt
applicantCards.sort(ApplicantSortOption.getComparator(
null,
sortByScore
));

// then
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,15 +106,17 @@ void findAllByProcess_filterAndOrder() {
evaluationRepository.save(EvaluationFixture.fourPoints(process1, applicant2));

String evaluationStatus = "EVALUATED";
String sortByCreatedAt = "DESC";
String sortByScore = null;

// when
List<ApplicantCard> applicantCards = applicantService.findApplicantCards(
processes,
DefaultFilterAndOrderFixture.DEFAULT_MIN_SCORE,
DefaultFilterAndOrderFixture.DEFAULT_MAX_SCORE,
evaluationStatus,
DefaultFilterAndOrderFixture.DEFAULT_SORT_BY_CREATED_AT,
DefaultFilterAndOrderFixture.DEFAULT_SORT_BY_SCORE
sortByCreatedAt,
sortByScore
);

// then
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,14 +121,16 @@ void read_filterAndOrder() {
ProcessFixture.applyType(dashboard)
));
applicantRepository.save(ApplicantFixture.pendingDobby(processes.get(0)));
String sortByCreatedAt = "DESC";
String sortByScore = null;
String url = String.format("/v1/processes?dashboardId=%d&minScore=%.2f&maxScore=%.2f"
+ "&evaluationStatus=%s&sortByCreatedAt=%s&sortByScore=%s",
dashboard.getId(),
DefaultFilterAndOrderFixture.DEFAULT_MIN_SCORE,
DefaultFilterAndOrderFixture.DEFAULT_MAX_SCORE,
DefaultFilterAndOrderFixture.DEFAULT_EVALUATION_STATUS,
DefaultFilterAndOrderFixture.DEFAULT_SORT_BY_CREATED_AT,
DefaultFilterAndOrderFixture.DEFAULT_SORT_BY_SCORE
sortByCreatedAt,
sortByScore
);

// when&then
Expand All @@ -142,9 +144,9 @@ void read_filterAndOrder() {
parameterWithName("minScore").description("지원자 최소 평균 점수: 0.00(default) ~ 5.00, required=false").optional(),
parameterWithName("maxScore").description("지원자 최대 평균 점수: 0.00 ~ 5.00(default), required=false").optional(),
parameterWithName("evaluationStatus").description(
"지원자 평가 유무: ALL(default), NOT_EVALUATION, EVALUATED, required=false").optional(),
parameterWithName("sortByCreatedAt").description("지원자 지원 날짜 정렬 조건: DESC(default), ASC, required=false").optional(),
parameterWithName("sortByScore").description("지원자 평균 점수 정렬 조건: DESC(default), ASC, required=false").optional()
"지원자 평가 유무: ALL(default), NOT_EVALUATED, EVALUATED, required=false").optional(),
parameterWithName("sortByCreatedAt").description("지원자 지원 날짜 정렬 조건: DESC, ASC, required=false").optional(),
parameterWithName("sortByScore").description("지원자 평균 점수 정렬 조건: DESC, ASC, required=false").optional()
),
responseFields(
fieldWithPath("applyFormId").description("지원폼의 id"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,15 +93,17 @@ void readAllByDashboardId() {
EvaluationFixture.fourPoints(process2, applicant2)
);
evaluationRepository.saveAll(evaluations2);
String sortByCreatedAt = "DESC";
String sortByScore = null;

// when
ProcessResponses processResponses = processFacade.readAllByDashboardId(
defaultDashboard.getId(),
DefaultFilterAndOrderFixture.DEFAULT_MIN_SCORE,
DefaultFilterAndOrderFixture.DEFAULT_MAX_SCORE,
DefaultFilterAndOrderFixture.DEFAULT_EVALUATION_STATUS,
DefaultFilterAndOrderFixture.DEFAULT_SORT_BY_CREATED_AT,
DefaultFilterAndOrderFixture.DEFAULT_SORT_BY_SCORE
sortByCreatedAt,
sortByScore
);

// then
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,4 @@ private DefaultFilterAndOrderFixture() {
public static final Double DEFAULT_MIN_SCORE = 0.00;
public static final Double DEFAULT_MAX_SCORE = 5.00;
public static final String DEFAULT_EVALUATION_STATUS = "ALL";
public static final String DEFAULT_SORT_BY_CREATED_AT = "DESC";
public static final String DEFAULT_SORT_BY_SCORE = "DESC";
}

0 comments on commit 2039370

Please sign in to comment.