-
Notifications
You must be signed in to change notification settings - Fork 1
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
feat: 주변상점 메뉴 키워드 검색 API 작성 #999
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다. 컨벤션과 관련된 부분들 수정해주시면 될 것 같습니다.
src/main/java/in/koreatech/koin/domain/shop/cache/ShopsCacheService.java
Show resolved
Hide resolved
src/main/java/in/koreatech/koin/domain/shop/cache/ShopRedisRepository.java
Show resolved
Hide resolved
src/main/java/in/koreatech/koin/domain/shop/cache/dto/EventArticleCache.java
Show resolved
Hide resolved
src/main/java/in/koreatech/koin/domain/shop/cache/dto/ShopCategoryCache.java
Show resolved
Hide resolved
src/main/java/in/koreatech/koin/domain/shop/cache/dto/ShopOpenCache.java
Show resolved
Hide resolved
src/main/java/in/koreatech/koin/domain/shop/cache/dto/ShopReviewReportCache.java
Show resolved
Hide resolved
@@ -200,4 +209,20 @@ public ResponseEntity<ShopReviewResponse> getReview( | |||
ShopReviewResponse shopReviewResponse = shopReviewService.getReviewByReviewId(shopId, reviewId); | |||
return ResponseEntity.ok(shopReviewResponse); | |||
} | |||
|
|||
@ApiResponses( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
컨트롤러인데 swagger 명세가 남아있네요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아이고.. 정신없네요
src/main/java/in/koreatech/koin/domain/shop/model/menu/MenuSearchKeyWord.java
Show resolved
Hide resolved
|
||
@Component | ||
@RequiredArgsConstructor | ||
public class CacheShopsScheduler { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
한줄 띄기
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
file change가 살벌하네요 ㅋㅋㅋ
고생하셨습니다 리뷰 확인해주세요
@@ -29,4 +29,7 @@ default Shop getByOwnerId(Integer ownerId) { | |||
} | |||
|
|||
List<Shop> findAll(); | |||
|
|||
@Query("SELECT DISTINCT s.name FROM Shop s WHERE s.name LIKE %:query%") | |||
List<String> findDistinctNameStartingWith(@Param("query") String query); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
R
이거는 StratWith 쿼리가 아니라 Contains에 대한 쿼리같은데.. 네이밍이 잘못되었거나 쿼리가 잘못되었거나 둘중 하나인거같네용
%LIKE%
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네이밍이 잘못된듯 싶습니다..! 처음에 기능 요구사항이 startwith이였다가 contians로 바뀌었는데 반영이 안됐네요 수정했습니다!
} | ||
) | ||
@Operation(summary = "주변상점 검색어에 따른 연관검색어 조회") | ||
@GetMapping("/search/related/{query}") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A
이거 기존 getShop의 ?query로 검색하는거랑 뭐가다른거죠?
클라이언트 입장에서 어떤 흐름으로 호출하게 되는건지 감이 잘 안와서요~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getShop에서 전처리를 해주면 안되는건가요? 검색 API가 두개가 생기는 느낌인데..
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
처음에는 getShop에서 문자열 패턴 이용해서 전처리를 해주려했는데 정확하지 않고, 고려해야할 부분이 많더라구요.(중복되는 메뉴명, 메뉴명 자체가 이상한경우)
또한 아래와 같은 고민점도 있었어서 API를 나누는 방향으로 결정했습니다.
- getShops에서 반환하고 있는 상점이 많다.
- getShops에서 반환하고 있는 상점이 많기 때문에 검색어를 입력할때 마다 API를 호출하는 비용이 많이 들것이라고 생각했습니다.
- getShops에서 반환하는 상점 목록과 연관검색어의 성격이 다르다.
- 클라이언트에서 getShops의 결과를 그대로 띄워주는것이 아닌 검색어와 연관된 메뉴/음식명을 띄워줘야 하기 때문에 결국에는 getShops에 연관검색어의 필드를 추가해야 합니다. 때문에 하나의 API로 처리하는것 보다는 분리하는것이 API의 호출비용, 관심사분리측면에서 좋다고 생각했습니다.
[추가 고민점]
기존 상점에서 존재하는 메뉴명을 그대로 띄워주는게 아니라 메뉴명을 적절히 전처리하고, 해당 메뉴에 대한 음식명도 추출해야해서(교촌 허니 콤보 → 치킨) AI를 도입하지 않는 이상 당장은 어려워보였습니다.
스프린트 기간이 얼마 남지 않기도 해서 일단 GPT돌려서 2000개 메뉴에 대해서 직접 수기로 전처리해서 DB에 저장해놓은 상태입니다. 추후에 GPT API를 이용해서 자동화하고, getShop API하나로 제공할 수 있는 방향성을 더 고민해보도록 하겠습니다😃
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
추후에는 작업을 조금 더 잘게 쪼개보면 좋겠네요 :)
2000줄 +는 버겁군요 ㅋㅋㅋㅋ
🔥 연관 이슈
🚀 작업 내용
💬 리뷰 중점사항
마감 기한에 후다닥 하느라 정신없이 코드를 짰네요.. 코드 퀄리티가 낮습니다..ㅠ
일주일쯤 뒤에 시간 내서 리팩토링 하도록 하겠습니다.