> For the complete documentation index, see [llms.txt](https://learn.devlabss.my.id/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.devlabss.my.id/laravel/bab-11-logika-transaksi-peminjaman/11.1-alur-bisnis-peminjaman-buku.md).

# 11.1 Alur Bisnis Peminjaman Buku

## Alur bisnis peminjaman buku

Yuk mulai BAB 11.

Di bab ini, aplikasi E-Library mulai punya aturan bisnis yang lebih nyata.

Sebelumnya Anda fokus pada CRUD, login, dan relasi database.

Sekarang Anda mulai mengatur proses **peminjaman buku**.

### Target belajar BAB 11

Setelah menyelesaikan BAB 11, Anda diharapkan bisa:

* menjelaskan alur bisnis peminjaman
* mengecek stok sebelum transaksi
* menyimpan data peminjaman
* mengurangi stok buku dengan urutan yang benar
* menyesuaikan tampilan saat stok habis

### Kenapa bab ini penting

Di dunia nyata, meminjam buku bukan sekadar menekan tombol lalu menyimpan data.

Sistem harus memastikan beberapa hal:

* buku yang dipilih memang ada
* stok buku masih tersedia
* data peminjaman tercatat
* stok buku langsung berkurang

Kalau salah satu bagian ini diabaikan, data aplikasi bisa kacau.

### Gambaran besar alurnya

Pada proyek E-Library, alur sederhananya seperti ini:

```
user memilih buku -> sistem mengecek stok -> data peminjaman disimpan -> stok buku dikurangi -> hasil ditampilkan ke user
```

Ini adalah inti dari logika transaksi peminjaman.

Satu aksi dari pengguna bisa memicu lebih dari satu perubahan data.

### Data apa saja yang terlibat

Supaya tidak bingung, pisahkan dulu data yang bermain di bab ini:

* tabel `buku` untuk data buku dan stok
* tabel `peminjaman` untuk riwayat transaksi pinjam
* tabel `users` untuk pengguna yang sedang login

Artinya, saat seseorang meminjam buku, aplikasi tidak hanya menyentuh satu tabel.

Aplikasi minimal akan membaca tabel `buku`, lalu menulis ke tabel `peminjaman`.

### Analogi sederhana

Bayangkan perpustakaan punya satu buku Laravel dengan stok `3`.

Saat satu siswa meminjam buku itu:

* petugas mencatat siapa peminjamnya
* petugas mencatat buku apa yang dipinjam
* jumlah stok di rak berkurang menjadi `2`

Kalau stok sudah `0`, petugas tidak boleh tetap melayani peminjaman.

Sistem Laravel kita harus berpikir dengan pola yang sama.

### Urutan logika yang benar

Jangan menulis proses secara acak.

Urutannya harus jelas.

{% stepper %}
{% step %}

### Ambil buku yang dipilih

Sistem harus tahu buku mana yang ingin dipinjam.

Biasanya identitas buku dikirim dari tombol atau form.
{% endstep %}

{% step %}

### Cek stok buku

Sebelum menyimpan transaksi, pastikan `stok > 0`.

Kalau stok habis, proses harus dihentikan.
{% endstep %}

{% step %}

### Simpan data peminjaman

Kalau stok masih ada, simpan data ke tabel `peminjaman`.

Minimal simpan `user_id`, `buku_id`, dan tanggal pinjam.
{% endstep %}

{% step %}

### Kurangi stok buku

Setelah transaksi berhasil dicatat, stok pada tabel `buku` harus dikurangi.

Misalnya dari `3` menjadi `2`.
{% endstep %}

{% step %}

### Tampilkan hasil ke pengguna

Pengguna perlu mendapat respons yang jelas.

Misalnya pesan bahwa peminjaman berhasil dilakukan.
{% endstep %}
{% endstepper %}

### Kenapa tidak cukup hanya menyimpan data peminjaman

Kalau Anda hanya menyimpan data ke tabel `peminjaman`, stok buku di tabel `buku` tidak berubah.

Akibatnya, sistem akan terus mengira buku itu masih tersedia penuh.

Ini berbahaya.

Karena pengguna lain bisa terus meminjam buku yang sebenarnya sudah habis.

### Persiapan sebelum praktik

Sebelum masuk ke subbab berikutnya, pastikan kondisi proyek Anda sudah siap:

* fitur login sudah berjalan
* data buku sudah tersedia
* tabel `buku` bisa diakses dari model
* server lokal sedang aktif

{% hint style="info" %}
Sebelum mengetes tombol atau form di browser, jalankan dulu server lokal Anda. Kalau belum aktif, halaman aksi pinjam biasanya tidak bisa diuji dengan benar.
{% endhint %}

### Kesalahan logika yang paling sering

Masalah yang paling sering terjadi di awal BAB 11:

* stok tidak dicek sebelum transaksi
* data peminjaman tersimpan, tetapi stok tidak berkurang
* tombol pinjam tetap aktif walau stok sudah habis
* validasi hanya ditaruh di tampilan, bukan di controller

{% hint style="warning" %}
Tampilan boleh membantu pengguna, tetapi keputusan akhir tetap harus dijaga di controller. Jangan mengandalkan tombol nonaktif saja.
{% endhint %}

### Output yang harus terlihat

Setelah menyelesaikan BAB 11, hasil minimal yang seharusnya sudah ada:

* tabel `peminjaman` berhasil dipakai
* stok buku berkurang setelah transaksi berhasil
* buku dengan stok `0` tidak bisa dipinjam lagi
* tombol pinjam menyesuaikan kondisi stok

### Poin evaluasi bab 11.1

Pastikan Anda sudah memahami poin berikut:

* Saya paham alur bisnis peminjaman buku.
* Saya paham kenapa stok harus dicek sebelum transaksi.
* Saya paham kenapa satu aksi peminjaman memengaruhi lebih dari satu tabel.
* Saya paham kenapa data peminjaman dan stok harus selalu sinkron.

Jika semuanya sudah jelas, lanjut ke [11.2 Membuat Logika Pengurangan Stok](/laravel/bab-11-logika-transaksi-peminjaman/11.2-membuat-logika-pengurangan-stok.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://learn.devlabss.my.id/laravel/bab-11-logika-transaksi-peminjaman/11.1-alur-bisnis-peminjaman-buku.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
