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

이 부분에 대한 정보를 가져와야하는데 우선 어떤 저장소에서 정보를 가져와야할지 고민했다.

고민한 결과 컬렉션아이템이라는 테이블을 사용하는 것이 가장 좋을 것 같았다.

  /* 로직 설명
요즘 뜨는 맛집 리스트 ⇒ 
★ 마이리스트에 있는 게시물 좋아요 총합순. 좋아요총합 설정★
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

+ Recent posts