NestJS로 시군구 필터링 해보기

커피 내리는 그냥 사람·2021년 4월 28일
0

기업협업 인턴십

목록 보기
16/16

사실 자바스크립트 스킬이기는 하나 NestJS에서 필터링을 어떻게 해서
GraphQL 내에서 원하는 정보를 얻는지 확인하는 과정. 여기서 예시는 시도 / 구군 / 구를 필터링해보기로.

1. 원하는 데이터베이스만 중복없이 가져오기

조건 : 시/도를 프론트엔드에서 고정해준다고 가정했을 때, 구군, 동만 뽑아오기

0. 왜 하는지?

지역출력에 따른 셀렉트 박스를 만들기 위해서

1. 사용한 로직

파이썬과 달리 자바스크립트는 set가 없다. 그러므로 다른 방법을 이용하여 중복된 값을 없애고 새로운 배열을 만든다.

  • 일시적인 빈 오브젝트를 만든다.
  • forEach를 이용해서 중복값을 제거한다.
  • 이후 딕셔너리 형태로 만든 뒤 키의 값만 배열에 넣는다.

2. 코드 ; 위의 코드 해석 참조

const tempObj = {};
const nextSafeRate = [];
safeRate.forEach(({gunGu}) => {
 if (!tempObj[gunGu]) {
  tempObj[gunGu] = true;
  }
});
Object.keys(tempObj).forEach(key => {
nextSafeRate.push({"gunGu": key});
})

3. 결과

  • 시도를 강원도로 했을 때 시만 나오게 하기

  • 강릉시로 했을 때 동, 면이 나오게 하기

  • 프론트엔드와 송수신 결과

2. 순차적으로 지역 데이터 뽑아내기

조건 : 특정 조건을 걸고 -> 서울특별시 -> ~~구 -> ~~동 이런 식으로 순서대로 넣었을 때 화면에 넣은 값에 따라 조건이 나오게 하는 지역 데이터 만들어보기.

1. 시도한 것

  • Where 절을 이용한 순차적인 검색 시도 : 실패한 이유는 or로 할 경우 특정 조건, 특정 시가 들어간 모든 데이터가 나와버려서(서울만 고르고 싶은데 대구도 나온다.)

where 관련 참고 링크

2. 성공한 것 : if 절 이용

  • 거꾸로 로직을 짠 이유 : 전에 파이썬 문제 풀이에서 느꼈 듯 맨 위에 특정 값을 필터링해버리면 그 값에서 모든 것이 계산되어 내려오므로 작은 값부터 계산해서 내려오게 한다.

3. 코드

if(port && siDo && gunGu && dong){
                    const safeRate = await this.saferate.find({port, siDo, gunGu, dong});
                    return {
                        ok: true,
                        safeRate
                    }
                    }
                if(port && siDo && gunGu){
                    const safeRate = await this.saferate.find({port, siDo, gunGu});
                    return {
                        ok: true,
                        safeRate
                    }
                    }
                if(port && siDo){
                    const safeRate = await this.saferate.find({port, siDo});
                    return {
                        ok: true,
                        safeRate
                    }
                    }
                if(port){
                    const safeRate = await this.saferate.find({port});
                    return {
                        ok: true,
                        safeRate
                        } 
                    }

4. 결과

  • 여기서 동, 군구, 시도를 순서대로 빼면 역순으로 내가 검색한 양만큼만 검색이 된다.

profile
커피 내리고 향 맡는거 좋아해요. 이것 저것 공부합니다.

0개의 댓글