해결된 질문
작성
·
65
0
private composeFindOptions<T extends BaseModel>(
dto: BasePaginationDto,
): FindManyOptions<T> {
/**
* where, order, take, skip 반환
* skip-> page based pagination에서만
*/
/**
* DTO의 현재 생긴 구조는 아래와 같다.
*
* {
* where__id__more_than: 1,
* order__createdAt: 'ASC,
* }
*
* 현재는 where__id__more_than / where__id__less_than에 해당하는 where 필터만 사용중이지만
* 나중에 추가적인 where 필터를 넣고싶어졌을 때 모든 where 필터를 자동으로 파싱할 수 있을만한 기능이
* 필요하다..
*
* 1) where로 시작한다면 필터 로직을 적용
* 2) order로 시작한다면 정렬 로직을 정용한다.
* 3) 필터 로직을 적용한다면 '__' 기준으로 split 했을 때 3개의 값으로 나뉘는지 2개인지 확인한다.
* 3-1) 3개의 값으로 나뉜다면 FILTER_MAPPER에서 해당되는 operator 함수를 찾아서 적용한다.
* ex) ['where', 'id', 'more_than'] -> more_than을 실제 typeorm-operator로 적용
* 3-2) 2개의 값으로 나뉜다면 정확한 값을 필터하는 것이기 때문에 operator 없이 적용한다.
* ex) ['order', 'createdAt'] -> operator 필요 X
* 4) order의 경우 3-2와 같이 적용한다.
*/
let where: FindOptionsWhere<T> = {};
let order: FindOptionsOrder<T> = {};
for (const [key, value] of Object.entries(dto)) {
if (key.startsWith('where__')) {
where = {
...where,
...this.parseWhereFilter(key, value),
};
} else if (key.startsWith('order__')) {
order = {
...order,
...this.parseWhereFilter(key, value),
};
}
}
return {
where,
order,
take: dto.take,
skip: dto.page ? dto.take * (dto.page - 1) : null,
};
}
여기서 함수가 실행되면 where, order은 빈 객체로 초기화 되는데 왜 for 문 안에선 ...where, ...order을 해주는건가요?
답변 1
0
안녕하세요!
좋은 practise라고 생각하시면 될 것 같습니다.
지금은 빈 객체지만 나중에 그렇지 않을수도 있고 어쨋든 목적은 where와 order를 모두 그대로 옮겨주는 것이기 때문에 그렇습니다.
감사합니다!