Proyek Akhir: API Pesanan Toko Online

Menggabungkan semuanya: validasi bersarang, transaksi database, stok, event, resource, dan proteksi Sanctum dalam satu controller.

Part 26 dari 26 ± 60 menit Gratis

Proyek: membuat pesanan dengan aman

Fitur paling kritis di toko online: membuat pesanan. Banyak hal harus benar sekaligus — input tervalidasi, stok tidak boleh minus walau dua pembeli memesan bersamaan, semua perubahan berhasil atau tidak sama sekali, dan sistem lain diberi tahu. Kamu akan menulis controller yang merangkum semua pelajaran kursus ini.

Spesifikasi endpoint

POST /api/pesanan — hanya pengguna ber-token Sanctum. Body:

{
  "item": [
    { "produk_id": 3, "jumlah": 2 },
    { "produk_id": 7, "jumlah": 1 }
  ]
}
  • Validasi: item wajib array minimal 1; tiap baris produk_id wajib ada di tabel produks, jumlah integer minimal 1.
  • Semua operasi dalam satu transaksi database (DB::transaction).
  • Untuk tiap item: kunci baris produk (lockForUpdate()) agar dua pesanan serentak tidak melampaui stok; jika stok kurang → ValidationException (respons 422); kurangi stok dengan decrement; simpan baris item beserta harga saat itu (harga produk bisa berubah nanti).
  • Hitung total, simpan di pesanan.
  • Setelah transaksi sukses, pancarkan event PesananDibuat (listener mengirim email lewat antrian).
  • Kembalikan PesananResource dengan status 201.

Mengapa transaksi & lockForUpdate?

DB::transaction(function () {
    // semua query di sini: jika ada exception → ROLLBACK semuanya
});

Tanpa transaksi, kegagalan di tengah (mis. stok produk kedua kurang) meninggalkan pesanan setengah jadi dan stok yang sudah terlanjur berkurang. lockForUpdate() menahan baris produk sampai transaksi selesai, mencegah race condition (dua pembeli sama-sama melihat stok 1).

Peta kerangka

#[Middleware('auth:sanctum')]
class PesananController extends Controller
{
    public function store(Request $request): JsonResponse
    {
        $data = $request->validate([...]);
        $pesanan = DB::transaction(function () use ($data, $request) { ... });
        PesananDibuat::dispatch($pesanan);
        return ...;
    }
}

Apa yang dilatih di sini?

KonsepBab
Atribut #[Middleware] & Sanctum5, 21
Validasi array bersarang (item.*.jumlah)15
Eloquent: create, relasi, decrement10–12
Event & listener (email via queue)19, 20
API Resource & status code21
Keamanan data & konsistensi (transaksi, lock)25

Setelah ini

Kamu sudah memegang fondasi Laravel modern. Langkah lanjut yang bagus: bangun proyek nyata (toko, blog, SaaS kecil), pelajari Livewire/Inertia untuk UI interaktif, Horizon untuk antrian, Pest untuk tes yang lebih ringkas, Octane untuk performa tinggi, dan jelajahi Laravel AI SDK untuk fitur cerdas. Pasang Laravel di komputermu dan jalankan kode dari kursus ini sungguhan.

Selamat! Lulus bab ini dan quiz akhir memberimu sertifikat Laravel 13 dari Nol dari KelasIT.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X