modulersYJ/ganoverflow-front

TODO [Feature] : 검색 기능 구현

hongregii opened this issue · 4 comments

게시물 검색!

  • 크게 세부분으로 나눠서 구현해야 할 듯 하네요 : 게시판, 마이페이지, chat 페이지 (사이드바)

chat 페이지 (사이드바)

  • 여기는 쉬운게, 제목 (chatPostName) 중에서만 검색을 짜면 될 듯 합니다. 아마 프런트단에서 filter 걸어줘도 충분할듯?

마이페이지, 게시판

  • 여기가 골때려지는게, 저희 엔티티 구조가 chatPairs랑 chatPost가 연결돼있잖아요?
  • ** 제목 + 내용 ** 으로 검색했을 때 쿼리를 어떻게 짜야할지 생각해봐야 해요
  • 우선, ** 제목 **만 검색했을 경우는 조금 단순하죠. chatPosts 엔티티의 chatPostName에만 WHERE 절을 걸어버리면 될 것 같아요
  • ** 내용 ** 만 검색했을 때는 chatPairs 엔티티에서 찾아야 해요. chatPairchatPost의 FK를 가지고 있어서, WHERE 에서 걸린 chatPair의 chatPost FK 값을 가지고 chatPosts를 찾아와야 할 것 같은데, 흠 ㅋㅋㅋ queryBuilder 수준에서 짜기 쉬울까 싶네요 서브쿼리라서!

아래는 지피티한테 비슷한 경우를 물어본 결과입니다.

return this.createQueryBuilder('chatPost')
      .leftJoinAndSelect('chatPost.chatPairs', 'chatPair')
      .where('chatPost.id = :chatPostId', { chatPostId }) // <- service 의 함수가 받는 인자
      .andWhere('chatPair.answer LIKE :keyword', { keyword: `%${keyword}%` }) // <- keyword 도 인자로 받아야 함
      .getMany();

@ABizCho 한번 읽어보시고 의견 주셔요!
내용 검색은 user가 가지고 있는 JSON에 하는게 좋을까요 아님 chatPair를 찾는게 좋을까요?

@hongregii 내용검색의 경우엔 JSON에서는 사실 찾을 데이터가 없을거에요!

user.folders에 저장되는 JSON에는 folder 에 대한 메타정보(아이디 타이틀), 그리고 폴더의 자식인 chatposts에 대한 각각의 메타정보(타이틀,아이디 등)를 구조적으로 가지고 있을 뿐이라 chatPair를 뒤져보는게 유일한 방법일 것 같슴다잉

(제가 질문을 잘 이해한게 맞을까요?)

@hongregii 말씀해주신대로 chat페이지에서 검색기능은 sideBar에서 찾을 수 있는 내용에 한정해서 프론트에서 filter를 걸어주는 식으로 구현 들어가볼게요!

#119 해당 mvp완성을 위한 크런치기간 중 posts 페이지엔 제목기반검색 적용되었습니다.