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

[refactor] 탐색 API ErrorStatus 설정 #95

Merged
merged 3 commits into from
Jan 2, 2025
Merged

[refactor] 탐색 API ErrorStatus 설정 #95

merged 3 commits into from
Jan 2, 2025

Conversation

oyatplum
Copy link
Member

@oyatplum oyatplum commented Dec 30, 2024

연관 이슈

#92


개요

탐색 API ErrorStatus 설정, 요즘 떠오르는 도시 개수 제한


✅ 작업 내용

  • 탐색 뷰 ErrorStatus 설정
    • 도시, 국가 검색
    • 요즘 떠오르는 도시
  • 요즘 떠오르는 도시 개수 - 8개로 제한

📝 논의사항

  1. ErrorStatus 처리 방법과 관련해서 궁금한 사항이 있는데요.. pr [refactor] 여행기 조각 정렬 및 프로필 수정 API 리팩토링 #86 참고했는데, 결국 handler를 사용하기로 된건가요? 우선 [refactor] 여행기 조각 정렬 및 프로필 수정 API 리팩토링 #86 처럼 적용하긴 했습니다! 또.. 저는 해당 pr 이후, 다음 작업은 데모데이 이전에 제가 작업했던 api 모두 Error 처리를 지금과 같이 통일해놓으려고 하는데, 아직 대부분의 controller를 보면 처리가 되어있지 않은 것 같아서요.. 이대로 계속 작업해도 될지 모르겠네요ㅜㅜ(추가적으로, Error처리 관련 로직을 controller에서 하면 좋을지, service에서 하면 좋을지도..)

  2. 이건 제가 해결하지 못 한 문제인데요. pr [feature] 탐색 화면 - 도시, 국가 검색 api 구현 #84 까지만 해도 검색 시, 입력이 "서울과 도쿄 여행기" 이런식으로 복잡한 입력이 주어져도 처리가 가능했었는데, 최신순/오래된순 기능 추가하면서 갑자기 저 로직이 돌아가지 않아서요 ㅜㅜ 이런 저런 로직으로 계속 수정해도 안 되어서 혹시 좋은 아이디어 있으면 공유 부탁드립니다..

@oyatplum oyatplum added the ♻️ refactor 코드 리팩토링 label Dec 30, 2024
@oyatplum oyatplum self-assigned this Dec 30, 2024
@yyypearl yyypearl self-requested a review January 2, 2025 00:34
@yyypearl
Copy link
Member

yyypearl commented Jan 2, 2025

  1. handler 관련해서 석우오빠랑 얘기했었는데 아직 어떻게 하자 결정했던 건 없었어요! 주변에 비슷하게 코드 작성하신 분께 조금 전에 이유를 여쭤봤는데 답해주시는 거 듣고 내용 공유할게요. 에러 처리는 저도 상태코드 세팅 이후 작업한 API에만 적용했는데, 다른 것들도 수정해야할 거 같아요! 지금처럼 해주시면 될 것 같습니다. 찾아보니 에러 처리를 controller에서 할지, service에서 할지는 역할에 따라서 분리해야한다고 해요.
  • controller: 요청 파라미터 검증(@Valid, @RequestParam 등 사용), 클라이언트와의 HTTP 응답 형식 제어, 전역 예외 처리(@ControllerAdvice, @ExceptionHandler 사용).
  • service: 비즈니스 로직과 관련된 오류 처리, 데이터 상태나 비즈니스 규칙 위반에 대한 예외 처리

Comment on lines 47 to 51
} else if (sort.equals("oldest")) {
travels = travelRepository.findByCityIdInAndTravelOpenTrueOrderByCreatedAtAsc(new ArrayList<>(cityIds));
} else {
throw new IllegalArgumentException("파라미터 값이 잘못 되었습니다.");
throw new BadRequestHandler(ErrorStatus.INVALID_TRAVEL_PARARM);
}
Copy link
Member

Choose a reason for hiding this comment

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

따라서 이러한 요청 파라미터 유효성 검사는 controller에서 처리하는 것이 더 적합할 것 같습니다!

Copy link
Member Author

Choose a reason for hiding this comment

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

넵! 수정해서 반영하겠습니다! 감사합니다 :)

@oyatplum oyatplum merged commit 58b35d2 into develop Jan 2, 2025
@yyypearl
Copy link
Member

yyypearl commented Jan 2, 2025

  1. 정렬 이전 코드로 실행해봤는데, 그렇게 해도 여러 단어가 섞인 검색어에 대해서는 결과가 안 나오네요😂
    여러 번 실행해보니 findByNameContainingIgnoreCase의 경우 검색어가 데이터베이스 값의 일부여야 동작하는 거 같아요! (아래 두 경우의 실행결과를 각각 적어두었습니다!)

즉,
findByNameContainingIgnoreCase: 검색어가 데이터베이스 값의 일부여야 동작.
@Query문: 검색어에 데이터베이스 값이 포함되면 동작.
(저는 city랑 country 둘다 아래와 같이 작성해서 실행했더니 잘 나왔어요!)

    @Query("SELECT c FROM City c WHERE :query LIKE CONCAT('%', c.name, '%')")
    List<City> findCitiesInSearch(@Param("query") String query);

++ 검색어 params 명을 현재처럼 query 보다는 keyword..? 이런 걸로 바꾸는 게 더 좋을 것 같아요!



[findByNameContainingIgnoreCase로 실행결과]
image

{
  "isSuccess": true,
  "code": "200",
  "message": "요청에 성공했습니다.",
  "result": [
    {
      "id": 6,
      "title": "나의 인생 여행지, 여름 스위스 여행기",
      "thumbnail": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/thumbnails/856029f4-fb23-4488-9085-745b816689e2",
      "startDate": "2023/09/08",
      "endDate": "2023/09/11",
      "cityName": "취리히",
      "countryName": "스위스",
      "status": "COMPLETED",
      "countryImage": "🇨🇭",
      "userId": 19,
      "profileImg": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/trippieces/15d61963-cbdc-42a0-aacf-9cdeb6c5ea54",
      "nickname": "김혜린"
    },
    {
      "id": 13,
      "title": "나의 인생 여행지, 여름 스위스 여행기",
      "thumbnail": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/thumbnails/856029f4-fb23-4488-9085-745b816689e2",
      "startDate": "2023/09/08",
      "endDate": "2023/09/11",
      "cityName": "취리히",
      "countryName": "스위스",
      "status": "COMPLETED",
      "countryImage": "🇨🇭",
      "userId": 20,
      "profileImg": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/trippieces/7b48f3c5-4a2a-4690-996d-eb7267c24e3a",
      "nickname": "이채"
    },
    {
      "id": 52,
      "title": "스위스에 스키타러감!",
      "thumbnail": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/thumbnails/42248a68-035a-4c63-9f42-0f4e19d3b57d",
      "startDate": "2024/08/15",
      "endDate": "2024/08/31",
      "cityName": "취리히",
      "countryName": "스위스",
      "status": "COMPLETED",
      "countryImage": "🇨🇭",
      "userId": 20,
      "profileImg": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/trippieces/7b48f3c5-4a2a-4690-996d-eb7267c24e3a",
      "nickname": "이채"
    }
  ]
}



[@Query문으로 실행결과]
-> findByNameContainingIgnoreCase와 달리, 검색어가 "취리"일 경우 결과없음.
image

{
  "isSuccess": true,
  "code": "200",
  "message": "요청에 성공했습니다.",
  "result": [
    {
      "id": 6,
      "title": "나의 인생 여행지, 여름 스위스 여행기",
      "thumbnail": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/thumbnails/856029f4-fb23-4488-9085-745b816689e2",
      "startDate": "2023/09/08",
      "endDate": "2023/09/11",
      "cityName": "취리히",
      "countryName": "스위스",
      "status": "COMPLETED",
      "countryImage": "🇨🇭",
      "userId": 19,
      "profileImg": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/trippieces/15d61963-cbdc-42a0-aacf-9cdeb6c5ea54",
      "nickname": "김혜린"
    },
    {
      "id": 13,
      "title": "나의 인생 여행지, 여름 스위스 여행기",
      "thumbnail": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/thumbnails/856029f4-fb23-4488-9085-745b816689e2",
      "startDate": "2023/09/08",
      "endDate": "2023/09/11",
      "cityName": "취리히",
      "countryName": "스위스",
      "status": "COMPLETED",
      "countryImage": "🇨🇭",
      "userId": 20,
      "profileImg": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/trippieces/7b48f3c5-4a2a-4690-996d-eb7267c24e3a",
      "nickname": "이채"
    },
    {
      "id": 52,
      "title": "스위스에 스키타러감!",
      "thumbnail": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/thumbnails/42248a68-035a-4c63-9f42-0f4e19d3b57d",
      "startDate": "2024/08/15",
      "endDate": "2024/08/31",
      "cityName": "취리히",
      "countryName": "스위스",
      "status": "COMPLETED",
      "countryImage": "🇨🇭",
      "userId": 20,
      "profileImg": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/trippieces/7b48f3c5-4a2a-4690-996d-eb7267c24e3a",
      "nickname": "이채"
    },
    {
      "id": 54,
      "title": "string",
      "thumbnail": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/thumbnails/6ef4495f-4785-4db2-b604-617a1b89cb92",
      "startDate": "2024/12/20",
      "endDate": "2024/12/25",
      "cityName": "오사카",
      "countryName": "일본",
      "status": "ONGOING",
      "countryImage": "🇯🇵",
      "userId": 1,
      "profileImg": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/trippieces/14b29111-25d8-4dc9-a805-dd303d0af860",
      "nickname": "newNick"
    },
    {
      "id": 55,
      "title": "테스트",
      "thumbnail": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/thumbnails/9c7324d7-10b6-496b-bb44-b65f4c1ad3c7",
      "startDate": "2024/12/20",
      "endDate": "2024/12/29",
      "cityName": "도쿄",
      "countryName": "일본",
      "status": "ONGOING",
      "countryImage": "🇯🇵",
      "userId": 20,
      "profileImg": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/trippieces/7b48f3c5-4a2a-4690-996d-eb7267c24e3a",
      "nickname": "이채"
    },
    {
      "id": 56,
      "title": "안녕 서울",
      "thumbnail": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/thumbnails/f041e189-ff05-427c-851c-8702558defea",
      "startDate": "2025/01/02",
      "endDate": "2025/01/02",
      "cityName": "도쿄",
      "countryName": "일본",
      "status": "COMPLETED",
      "countryImage": "🇯🇵",
      "userId": 33,
      "profileImg": "https://trippiece-bucket.s3.ap-northeast-2.amazonaws.com/trippieces/8f5e76e1-74b0-4447-a632-576f12b45b17",
      "nickname": "진주"
    }
  ]
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
♻️ refactor 코드 리팩토링
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants