TODO [Feature] : 검색 기능 구현
hongregii opened this issue · 4 comments
hongregii commented
게시물 검색!
- 크게 세부분으로 나눠서 구현해야 할 듯 하네요 : 게시판, 마이페이지, chat 페이지 (사이드바)
chat 페이지 (사이드바)
- 여기는 쉬운게, 제목 (
chatPostName
) 중에서만 검색을 짜면 될 듯 합니다. 아마 프런트단에서 filter 걸어줘도 충분할듯?
마이페이지, 게시판
- 여기가 골때려지는게, 저희 엔티티 구조가 chatPairs랑 chatPost가 연결돼있잖아요?
- ** 제목 + 내용 ** 으로 검색했을 때 쿼리를 어떻게 짜야할지 생각해봐야 해요
- 우선, ** 제목 **만 검색했을 경우는 조금 단순하죠. chatPosts 엔티티의 chatPostName에만 WHERE 절을 걸어버리면 될 것 같아요
- ** 내용 ** 만 검색했을 때는 chatPairs 엔티티에서 찾아야 해요.
chatPair
가chatPost
의 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();
hongregii commented
@ABizCho 한번 읽어보시고 의견 주셔요!
내용 검색은 user가 가지고 있는 JSON에 하는게 좋을까요 아님 chatPair를 찾는게 좋을까요?
ABizCho commented
@hongregii 내용검색의 경우엔 JSON
에서는 사실 찾을 데이터가 없을거에요!
user.folders에 저장되는 JSON에는 folder 에 대한 메타정보(아이디 타이틀), 그리고 폴더의 자식인 chatposts에 대한 각각의 메타정보(타이틀,아이디 등)를 구조적으로 가지고 있을 뿐이라 chatPair
를 뒤져보는게 유일한 방법일 것 같슴다잉
(제가 질문을 잘 이해한게 맞을까요?)
ABizCho commented
@hongregii 말씀해주신대로 chat
페이지에서 검색기능은 sideBar
에서 찾을 수 있는 내용에 한정해서 프론트에서 filter
를 걸어주는 식으로 구현 들어가볼게요!