오늘 해야할 일은 메인에 관한 정보이다.

이 부분에 대한 정보를 가져와야하는데 우선 어떤 저장소에서 정보를 가져와야할지 고민했다.
고민한 결과 컬렉션아이템이라는 테이블을 사용하는 것이 가장 좋을 것 같았다.
/* 로직 설명
요즘 뜨는 맛집 리스트 ⇒
★ 마이리스트에 있는 게시물 좋아요 총합순. 좋아요총합 설정★
1) 모든 마이리스트를 조회한다.
2) 모든 마이리스트의 게시물의 좋아요 수를 더한다
3) 좋아요 총합이 가장 좋은 마이리스트순으로
마이리스트 이름과 닉네임과 포스트 이미지를 반환한다.
4) 현재(최신)유행하는 날짜 둘다 받는거로 한다. 날짜설정★
*/
다음은 어떤 방식으로 결과값을 가져와야할지 고민했다.
초기에는 위처럼 작성하면서 쿼리문을 작성해봤다.
const myListSumLikes = await this.collectionItemRepository.find({
relations: {
post: {
postLikes: true,
user: true,
images: true,
},
collection: {
user: true,
},
},
where: {
// 컬렉션 타입이 myList 이면서 삭제되지 않은 것을 가져온다
collection: {
type: 'myList',
deletedAt: null,
},
post: {
// 좋아요가 삭제되지 않았고, 1달 이내에 좋아요 업데이트된 게시물만 가져온다
postLikes: {
deleted_at: null,
updated_at: MoreThan(oneMonthAgo),
},
},
},
select: {
id: true,
post: {
id: true,
images: { id: true, file_url: true },
postLikes: {
id: true,
},
user: {
id: true,
nickname: true,
},
},
collection: {
id: true,
name: true,
},
},
});
예전 같았으면 하루종일 매달려도 완성하지 못했을 코드다.
그런데 테이블간의 관계도 익숙해지고, 쿼리문도 익숙해지다보니 몇십분만에 뚝딱 만들었다.
이후 찾은 값을 어떠한 조건속에서 값을 반환해야하는지 많은 고민을 하고 기능을 구현했다.
728x90
'일기 > TIL' 카테고리의 다른 글
TIL: Today I Learned 88일차 [ 최종프로젝트 18일차 ] (0) | 2023.03.23 |
---|---|
TIL: Today I Learned 87일차 [ 최종프로젝트 17일차 ] (0) | 2023.03.23 |
TIL: Today I Learned 85일차 [ 최종프로젝트 15일차 ] (0) | 2023.03.20 |
TIL: Today I Learned 84일차 [ 최종프로젝트 14일차 ] (0) | 2023.03.20 |
TIL: Today I Learned 83일차 [ 최종프로젝트 13일차 쿼리 ] (0) | 2023.03.15 |