NestJS&GraphQL CRUD 해보기3

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

기업협업 인턴십

목록 보기
15/16

1. CRUD 중 Update에 대한 내용2

  • 알아낸 내용 : PickType으로 필요한 데이터만 update할 수 있다. 그래서 조건에 맞는 데이터만 가져와서 바꿀 수 있었다. 아래는 그 결과

    관련 내용은 저번 블로그 내용에 포함되어 있음

2. CRUD 중 Read인데 조건이 걸릴 경우

가장 까다로운 조건이었다. 전반적으로 service를 건드렸어야 하는 영역이었다. -> resolver는 그대로.

조건 1. input 값이 비었으면 (optional 이면) 전체 리스트 return

조건 2. 최신순 정렬

조건 3. input 값 중 '주소'로 검색 가능 (검색 키워드 포함 하는 결과 return한다.)

4. 주로 삽질한 사항

  • 일단 로직 이해를 못 했다.
  • 자꾸 인풋 값 안에 하드코딩을 하려고 했다.
  • . 을 활용하지 못 했다. 또한 getOrdersInput이라는 변수를 잘 활용하지 못 했다.

한참 고민했는데 결론은 이랬다. 일단 로직은

  1. 인풋 값이 비어 있으면 -> 주소가 입력되어 있는 상태다
  2. 그러므로 조건1과 조건3은 0,1 관계라고 봐도 무방하다
  3. 그러므로 조건 1, 3은 같이 묶어서 가야한다.

5. 조건 1~3 코드의 일부

    async getOrders(getOrdersInput : GetOrdersInput): Promise<GetOrdersOutput>{
        try{

            if(getOrdersInput.loadAddress1){
                const orders = await this.orders.find({loadAddress1 : getOrdersInput.loadAddress1});
                return {
                    ok: true,
                    loadAddress1 : getOrdersInput.loadAddress1,
                    orders
                }
            }
            const orders = await (await this.orders.find()).sort((a, b) => 1)
            // 조건 2에 대한 코드, sort를 쓸 때는 await가 한 번 더 일어난다.

            if(!orders){
                return{
                    ok: false,
                    error:"Orders don't exist"
                }
            }
            return {
                ok: true,
                orders
            }

여기서 getOrdersInput의 변수로 지정한 것이 바로 내가 입력하는 주요 주소지다. 주소지 입력값에 따라, 혹은 이게 있냐 없냐에 따라 나오는 값이 달라진다.

추가로 ok, error 처럼 검색 키워드도 또한 나와야하므로 dto를 이와 같이 통제해줘야 한다.

@ObjectType()
export class GetOrdersOutput extends CoreOutput{
    @Field(type => [Order], {nullable:true})
    orders?: Order[]
    
    @Field(type => String, {nullable:true})
    loadAddress1?: string;
  // 어떤 값으로 받는지 잘 생각해보면, 위와 같이 할 수 있다. 타입스크립트의 특징 상 정답이 어느 정도 코드 내에 있다.
}

6. 결과값

  • 값이 있으면 그 값만해서 원하는 것이 나온다.

  • 값이 없으면 다 나온다.
profile
커피 내리고 향 맡는거 좋아해요. 이것 저것 공부합니다.

0개의 댓글