Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

반경 내 주차장 조회 기능 구현 #13

Merged
merged 44 commits into from
Apr 3, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
f44658b
feat: jsonProperty 설정
youngh0 Feb 3, 2024
43ca5c9
feat: hibernate 공간 데이터 의존성 추가
youngh0 Feb 3, 2024
85f7423
feat: Location 의 필드를 공간데이터 타입 Point 로 수정
youngh0 Feb 3, 2024
7674fc9
feat: querydsl 의존성 추가
youngh0 Feb 5, 2024
c1fa2c3
feat: querydsl 의존성 제거
youngh0 Feb 6, 2024
ba3c449
feat: 주차장 목록 조회 쿼리 파라미터 전용 argument resolver 구현
youngh0 Feb 6, 2024
97ce588
feat: 반경 내 주차장 조회 쿼리 작성
youngh0 Feb 6, 2024
c4fad88
feat: argument resolver 등록
youngh0 Feb 6, 2024
0372e0d
feat: 반경 내 주차장 조회 controller, service(정렬, 필터링) 구현
youngh0 Feb 6, 2024
d399ab5
feat: builder 추가
youngh0 Feb 6, 2024
3469889
feat: 필터 기능하는 ParkingDomainService 추가
youngh0 Feb 6, 2024
7f49f6d
feat: 사용하지 않는 코드 제거
youngh0 Feb 6, 2024
6288499
feat: conflict 해결
youngh0 Mar 12, 2024
35a5747
Merge remote-tracking branch 'origin/main' into feat/10-find-parkingLots
youngh0 Mar 13, 2024
2d059a8
feat: 사용하지 않는 repository 삭제
youngh0 Mar 13, 2024
592b1c7
feat: 요금 계산 bean 추가
youngh0 Mar 13, 2024
f8b4dbd
feat: 주차장 목록 조회 시 사용자 조회 조건 필터링 구현
youngh0 Mar 13, 2024
d33ee40
feat: 메서드 분리
youngh0 Mar 13, 2024
44ae717
feat: 주차장 도보 예상 시간 로직 테스트 작성
youngh0 Mar 13, 2024
28ce548
refactor: 주석 제거
youngh0 Mar 13, 2024
6b7459f
feat: 주차장 목록 조회 시 조회 조건 엔티티로 대체 가능한 query param 제거
youngh0 Mar 13, 2024
d5ca66d
feat: 주차장 검색 조건 request 생성
youngh0 Mar 21, 2024
4c780fc
feat: 검색 조건 변환 기능 구현
youngh0 Mar 21, 2024
5f608cc
feat: 반경조회 비회원 조회 구현
youngh0 Mar 22, 2024
d008f2e
feat: memberId 아규먼트 리졸버 구현
youngh0 Mar 22, 2024
0035310
feat: feeType 타입 변경
youngh0 Mar 22, 2024
227cf26
feat: enum 의 value list 변환 로직 SearchConditionAvailable 로 이동
youngh0 Mar 27, 2024
a4dc6a1
feat: String 과 일치하는 enum List 변환 로직 SearchConditionAvailable 로 이동
youngh0 Mar 27, 2024
84b1100
feat: find 메서드 구현
youngh0 Mar 27, 2024
2973615
feat: 무료인지 확인하는 메서드 구현
youngh0 Mar 27, 2024
9d03477
feat: 검색조건 유.무료에 맞는 필터링 기능 구현
youngh0 Mar 27, 2024
1f31077
refactor: ParkingDomainService -> ParkingApplicationService 네이밍 변경
youngh0 Mar 27, 2024
6c04212
test: 유.무료 필터링 테스트
youngh0 Mar 27, 2024
b35c425
refactor: 네이밍 수정
youngh0 Mar 27, 2024
f1fa25b
feat: 비회원 기능 회원 인증 시 sessionId null 반환하도록 수정
youngh0 Mar 28, 2024
3b9d046
feat: 불필요한 메서드 제거
youngh0 Mar 28, 2024
9d5693e
Merge remote-tracking branch 'origin/main' into feat/10-find-parkingLots
youngh0 Mar 29, 2024
dfac844
feat: 충돌 해결
youngh0 Mar 29, 2024
4528710
feat: swagger 추가
youngh0 Mar 29, 2024
5362f5d
refactor: 서비스 계층에서 String <-> SearchConditionAvailable Enum 변환 로직 개선
This2sho Apr 1, 2024
03dcdd3
fix: 잘못 사용되고 있는 값 객체 제거
This2sho Apr 1, 2024
fc15e7e
feat: 응답 dto 변환 로직 이동
youngh0 Apr 1, 2024
7b48ca1
refactor: 네이밍 수정
youngh0 Apr 1, 2024
4fe6e61
feat: 현재 시간 변수 생성 위치 수정
youngh0 Apr 3, 2024
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 @@ -25,6 +25,25 @@ public static List<String> getAllValues() {
.toList();
}

public static List<OperationType> collectMatch(List<String> descriptions) {
return descriptions.stream()
.filter(OperationType::contains)
.map(OperationType::find)
.toList();
}

private static boolean contains(String description) {
return Arrays.stream(values())
.anyMatch(e -> description.startsWith(e.getDescription()));
}

public static OperationType find(String description) {
return Arrays.stream(values())
.filter(e -> description.startsWith(e.getDescription()))
.findAny()
.orElse(NO_INFO);
}

@Override
public OperationType getDefault() {
return NO_INFO;
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/com/example/parking/domain/parking/ParkingType.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,18 @@ public static List<String> getAllValues() {
.toList();
}

public static List<ParkingType> collectMatch(List<String> descriptions) {
return descriptions.stream()
.filter(ParkingType::contains)
.map(ParkingType::find)
.toList();
}

private static boolean contains(String description) {
return Arrays.stream(values())
.anyMatch(e -> description.startsWith(e.getDescription()));
}

@Override
public ParkingType getDefault() {
return NO_INFO;
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/com/example/parking/domain/parking/PayType.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,25 @@ public static List<String> getAllValues() {
.toList();
}

public static List<PayType> collectMatch(List<String> descriptions) {
Copy link
Contributor

Choose a reason for hiding this comment

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

이것도 SearchConditionAvailable 모으는게 나을거 같아여

static <E extends SearchConditionAvailable> List<E> collectMatch(List<String> descriptions, E... values) {
        return descriptions.stream()
                .map(d -> (E) find(d))
                .toList();
    }

Copy link
Contributor

Choose a reason for hiding this comment

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

이게 싫으면 SearchConditionAvailable 인터페이스에는 필요한 메서드만 두고 SearchConditionMapper에 Enum <-> String 간 변환 로직 둬도 괜찮을 거 같아여.
아래는 생각해본 예시임다,

public interface SearchConditionAvailable {

    String getDescription();

    <E extends SearchConditionAvailable> E getDefault();

    <E extends SearchConditionAvailable> E[] values();
}
public class SearchConditionMapper {

    public static  <E extends SearchConditionAvailable> List<E> toEnums(E sc, List<String> descriptions) {
        return descriptions.stream()
                .map(description -> toEnum(sc, description))
                .toList();
    }

    public static <E extends SearchConditionAvailable> E toEnum(E sc, String description) {
        return (E) Arrays.stream(sc.values())
                .filter(e -> description.startsWith(sc.getDescription()))
                .findAny()
                .orElse(sc.getDefault());
    }

    public static <E extends SearchConditionAvailable> List<String> toStrings(E sc) {
        return Arrays.stream(sc.values())
                .filter(e -> e != sc.getDefault())
                .map(e -> ((SearchConditionAvailable) e).getDescription())
                .toList();
    }
}

Copy link
Contributor Author

Choose a reason for hiding this comment

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

이것도 어떤식으로 코드를 짜야될지 몰라서.. 감사합니다 ㅎ

Copy link
Contributor Author

Choose a reason for hiding this comment

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

모던 자바의 신이시네여; 코드 그대로 썼습니다.. 감사해요..

Copy link
Contributor Author

Choose a reason for hiding this comment

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

적용했습니다~

return descriptions.stream()
.filter(PayType::contains)
.map(PayType::find)
.toList();
}

private static boolean contains(String description) {
return Arrays.stream(values())
.anyMatch(e -> description.startsWith(e.getDescription()));
}

public static PayType find(String description) {
return Arrays.stream(values())
.filter(e -> description.startsWith(e.getDescription()))
.findAny()
.orElse(NO_INFO);
}

@Override
public PayType getDefault() {
return NO_INFO;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.example.parking.domain.parking;

import static org.junit.jupiter.api.Assertions.assertAll;

import java.util.List;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

class OperationTypeTest {

@Test
void description에_맞는_OperationType_리스트를_반환() {
List<String> descriptions = List.of("공영");

List<OperationType> operationTypes = OperationType.collectMatch(descriptions);
assertAll(
() -> Assertions.assertThat(operationTypes).hasSize(1),
() -> Assertions.assertThat(operationTypes.get(0)).isEqualTo(OperationType.PUBLIC)
);
}

@Test
void description에_맞는_OperationType이_없으변_빈_리스트를_반환() {
List<String> descriptions = List.of("공");

List<OperationType> operationTypes = OperationType.collectMatch(descriptions);
Assertions.assertThat(operationTypes).hasSize(0);
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,41 @@
package com.example.parking.domain.parking;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.DisplayNameGenerator.ReplaceUnderscores;
import static org.junit.jupiter.params.provider.Arguments.arguments;

import java.util.List;
import java.util.stream.Stream;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

@DisplayNameGeneration(ReplaceUnderscores.class)
class ParkingTypeTest {

@Test
void description에_맞는_ParkingType_리스트를_반환() {
List<String> descriptions = List.of("노상");

List<ParkingType> parkingTypes = ParkingType.collectMatch(descriptions);
assertAll(
() -> Assertions.assertThat(parkingTypes).hasSize(1),
() -> Assertions.assertThat(parkingTypes.get(0)).isEqualTo(ParkingType.ON_STREET)
);
}

@Test
void description에_맞는_ParkingType이_없으변_빈_리스트를_반환() {
List<String> descriptions = List.of("야외");

List<ParkingType> parkingTypes = ParkingType.collectMatch(descriptions);
Assertions.assertThat(parkingTypes).hasSize(0);
}

@ParameterizedTest(name = "찾으려는 주차장 정보: {0} | 예상 결과: {1}")
@MethodSource("parametersProvider")
void 주차장_유형_설명으로_조회(String description, ParkingType expected) {
Expand Down