kakasoo

쿼리빌더 최대한 없애기 / deletedAt을 잘 이용하기 본문

프로그래밍/TypeORM

쿼리빌더 최대한 없애기 / deletedAt을 잘 이용하기

카카수(kakasoo) 2022. 6. 7. 23:45
반응형

이미 QueryBuilder로 짜여진 부분은 남겨둬도 된다고 생각했지만, 오늘 다시 생각해보니 고치는 게 이득이다.

QueryBuilder로 짜여진 것도, 결국 ON절을 WHERE 절로 고치면 해결할 수 있다.

조금 코드의 형태가 달라지긴 하겠지만, 해결할 수 없는 것은 아니다.

// NOTE : 코드 1번
const departments = await this.departmentRepository
  .createQueryBuilder('department')
  .leftJoinAndSelect(
      'department.userList',
      'user',
      'user.accountStatus = :available OR user.accountStatus = :rest',
      {
          available: UserStatus.Available,
          rest: UserStatus.Rest,
      },
  )
  .whereInIds(departmentIds)
  .andWhere('department.status = :status', { status: Status.ACTIVATE })
  .getMany();

 

다만 이런 형태처럼 user가 존재하지 않는 부서들도 부서는 부서이므로 가져오게끔 하는 코드가 있다고 할 때,

이런 코드는 Repository 형태로 고치는 것이 불가능하다.

where 절로 넣어버릴 경우, user가 없는 부서들이 모두 걸러지기 때문이다.

저런 문제를 해결하고 싶다면, deletedAt을 잘 이용해서, join 조건에서 알아서 걸려지게 만들어보자.

반응형