관련 내용은 저번 블로그 내용에 포함되어 있음
가장 까다로운 조건이었다. 전반적으로 service를 건드렸어야 하는 영역이었다. -> resolver는 그대로.
한참 고민했는데 결론은 이랬다. 일단 로직은
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;
// 어떤 값으로 받는지 잘 생각해보면, 위와 같이 할 수 있다. 타입스크립트의 특징 상 정답이 어느 정도 코드 내에 있다.
}