Proyek Akhir: API Pesanan Toko Online
Menggabungkan semuanya: validasi bersarang, transaksi database, stok, event, resource, dan proteksi Sanctum dalam satu controller.
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:
itemwajib array minimal 1; tiap barisproduk_idwajib ada di tabelproduks,jumlahinteger 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 dengandecrement; 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
PesananResourcedengan 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?
| Konsep | Bab |
|---|---|
Atribut #[Middleware] & Sanctum | 5, 21 |
Validasi array bersarang (item.*.jumlah) | 15 |
| Eloquent: create, relasi, decrement | 10–12 |
| Event & listener (email via queue) | 19, 20 |
| API Resource & status code | 21 |
| 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.