들어가기
Delivery가 order를 take하는
mutation
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 {}
@Role(['Delivery'])
takeOrder(
@AuthUser() driver: User,
@Args('input') takeOrderInput: TakeOrderInput,
): Promise<TakeOrderOutput> {
return this.ordersService.takeOrder(driver, takeOrderInput);
}
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',
};
}
}