Skip to content

2. Membuat Detail, Update Order dan Delete Order

1. Membuat Endpoint Detail order

Service detail order

order.service.ts
async findById(id: number): Promise<ResponseSuccess> {
    const result = await this.orderRepository.findOne({
      where: {
        id: id,
      },
      relations: [
        'created_by',
        'konsumen',
        'order_detail',
        'order_detail.produk',
      ],
      select: {
        id: true,
        nomor_order: true,
        status: true,
        total_bayar: true,
        tanggal_order: true,

        konsumen: {
          id: true,
          nama_konsumen: true,
        },
        created_by: {
          id: true,
          nama: true,
        },

        order_detail: {
          id: true,

          jumlah: true,
          produk: {
            id: true,
            nama_produk: true,
            harga: true,
          },
        },
      },
    });

    return this._success('OK', result);
  }

Controller detail order

service.controller.ts
 @Get('detail/:id')
  async detailOrder(@Param('id') id: string) {
    return this.orderService.findById(+id);
  }

Pengujian Pada Postman

Alt text

2. Membuat Endpoint update order

Service update order

order.service.ts
async updateOrder(
    id: number,
    payload: UpdateOrderDto,
  ): Promise<ResponseSuccess> {
    const check = await this.orderRepository.findOne({
      where: {
        id: id,
      },
    });

    if (!check) {
      throw new HttpException('Data tidak ditemukan', HttpStatus.NOT_FOUND);
    }

    payload.order_detail &&
      payload.order_detail.forEach((item) => {
        item.created_by = this.req.user.id;
      });

    const order = await this.orderRepository.save({ ...payload, id: id });

    return this._success('OK', order);
  }

Controller update order

order.controller.ts
@Put('update/:id')
  async updateOrder(
    @Param('id') id: number,
    @InjectUpdatedBy() payload: UpdateOrderDto,
  ) {
    return this.orderService.updateOrder(+id, payload);
  }

Pengujian Pada Postman

Alt text

payload
{
    "id": 29,
    "nomor_order": "INV1691115536547",
    "tanggal_order": "2023-09-01T00:00:00.000Z",
    "status": "bayar",
    "total_bayar": 200000,
    "created_by": {
        "id": 1,
        "nama": "ihsan santana w"
    },
    "konsumen": {
        "id": 1,
        "nama_konsumen": "Nafisa Amatullah"
    },
    "order_detail": [
        {
            "id": 18,
            "jumlah": 10,
            "produk": {
                "id": 1
            }
        },
        {
            "id": 19,
            "jumlah": 10,
            "produk": {
                "id": 3
            }
        },
        {
            "jumlah": 12,
            "produk": {
                "id": 4
            }
        }
    ]
}

Setelah success silahkan cek di tabel order dan tabel detail_order

tabel order

Alt text

tabel order_detail

Alt text

3. Membuat Endpoint Delete Order

Service delete order

order.service.ts
async deleteOrder(id: number): Promise<ResponseSuccess> {
    const check = await this.orderRepository.findOne({
      where: {
        id,
      },
    });

    if (!check)
      throw new NotFoundException(`Buku dengan id ${id} tidak ditemukan`);
    await this.orderRepository.delete(id);

    return this._success('Berhasil menghapus buku');
  }

Service update order

order.controller.ts
 @Delete('delete/:id')
  async deleteOrder(@Param('id') id: number) {
    return this.orderService.deleteOrder(+id);
  }

Pengujian Pada Postman

Alt text

tabel order

Alt text

tabel order_detail

Alt text

Karena kita sudah menerapkan CASCADE , ketika order di hapus maka semua data yang berelasi akan ikut terhapus