Payment
Now for the payment logic. In the controller, let's add a route to pay an order.
@Post(':id')
payOrder(@Param() { id }: IdDto) {
  return this.paymentsService.payOrder(id);
}Register the order inside the TypeOrmModule in the PaymentsModule, as we'll use a repository for it in the next step. Now, in the service, we'll create the method that makes a payment.
First, an order will be searched for, and brought with its payment. If the order is not found, or a payment is already present, an exception is thrown. Then, a payment will be created. After that, the order will have the payment associated with it, and change its status to  AWAITING_SHIPMENT. Finally, the order will be saved together with the payment.
async payOrder(id: number) {
  const order = await this.ordersRepository.findOne({
    where: { id },
    relations: {
      payment: true,
    },
  });
  if (!order) {
    throw new NotFoundException('Order not found');
  }
  if (order.payment) {
    throw new ConflictException('Order already paid');
  }
  const payment = this.paymentsRepository.create();
  order.payment = payment;
  order.status = OrderStatus.AWAITING_SHIPMENT;
  return this.ordersRepository.save(order);
}Commit - Implementing payment logic
Last updated