take-order

김종민·2022년 9월 22일
0

Nuber-Server

목록 보기
34/34

들어가기
Delivery가 order를 take하는
mutation


1. take-order.dto.ts

import { InputType, ObjectType, PickType } from '@nestjs/graphql';
import { MutationOutput } from 'src/common/dtos/output.dto';
import { Order } from '../entities/order.entity';

@InputType()
export class TakeOrderInput extends PickType(Order, ['id']) {}

@ObjectType()
export class TakeOrderOutput extends MutationOutput {}

2. orders.resolver.ts

  @Role(['Delivery'])
  takeOrder(
    @AuthUser() driver: User,
    @Args('input') takeOrderInput: TakeOrderInput,
  ): Promise<TakeOrderOutput> {
    return this.ordersService.takeOrder(driver, takeOrderInput);
  }

3. orders.service.ts

async takeOrder(
    driver: User,
    { id: orderId }: TakeOrderInput,
  ): Promise<TakeOrderOutput> {
    try {
      const order = await this.orders.findOne({
        where: {
          id: orderId,
        },
      });
      ///order찾기!!!
      
      if (!order) {
        return {
          ok: false,
          error: 'Order not found',
        };
      }
      ///order없으면, return false
      
      if (order.driver) {
        return {
          ok: false,
          error: 'This order already has a driver',
        };
      }
      ///order.driver가 있으면, 이미 driver지정됬다고 
      ///return false 날림.
      
      await this.orders.save({
        id: orderId,
        driver,
      });
      await this.pubSub.publish(NEW_ORDER_UPDATE, {
        orderUpdates: { ...order, driver },
      });
      ///order에 driver를 넣어서 order를 update(save)함.
      ///그리고 NEW_ORDER_UPDATE로 trigger날려줌.
      ///driver가 지정 되었다고 push날려줌
      
      return {
        ok: true,
      };
    } catch {
      return {
        ok: false,
        error: 'Could not update order',
      };
    }
  }
profile
코딩하는초딩쌤

0개의 댓글