Skip to content

M08 · Bab 9± 60 menitDraf AI

Proyek Mini: REST API Pesanan dengan PostgreSQL

Tujuan belajar

  • Menyusun skema pesanan (products, orders, order_items) sebagai migrasi Flyway dengan constraint dan index yang tepat
  • Memetakan entity & relasi Order–OrderItem–Product dengan aturan bisnis di dalam entity
  • Menulis service transaksional yang membuat dan membatalkan pesanan sambil menjaga stok dengan optimistic locking @Version
  • Menyajikan daftar pesanan dengan paginasi tanpa N+1, dan memetakan error domain ke ProblemDetail
  • Membuktikan perilaku API lewat test integrasi Testcontainers PostgreSQL

Prasyarat: Test Integrasi dengan Testcontainers

Kuis

5 soal · lulus bila minimal 70% benar

1.Pesanan berisi dua item. Item pertama berhasil mengurangi stok KOPI-250, lalu item kedua melempar InsufficientStockException (turunan RuntimeException) di dalam method @Transactional placeOrder. Apa yang terjadi pada stok KOPI-250 di database?
2.Dua pelanggan memesan KOPI-250 (stok 1, versi 7) pada saat yang sama. Keduanya membaca stok 1 dan menurunkannya menjadi 0. Entity Product punya field @Version. Apa hasilnya?
3.Endpoint GET /api/orders?customerId=c-1 memuat 20 pesanan per halaman, lalu DTO-nya memanggil order.getItems().size() untuk setiap pesanan. Log SQL menunjukkan 21 query. Perbaikan yang paling tepat?
4.Saat aplikasi start, muncul error Schema-validation: missing column [version] in table [orders]. Konfigurasi memakai spring.jpa.hibernate.ddl-auto=validate. Apa langkah yang benar?
5.Test integrasi OrderApiIT diberi @Transactional di level class. Test pembatalan pesanan lulus, tetapi di production pembatalan kadang gagal dengan 409. Kenapa test tidak menangkapnya?

Jawab semua soal dulu (0/5)