Latihan 1 dari materi Arsitektur & Best Practices di Laravel — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Latihan ini memakai pola yang sama dengan BorrowBook, tapi untuk toko: logika pesanan tinggal di service class, dan route-nya cuma memanggilnya. Kode awal sudah punya class OrderService dengan method place(array $items): array dan route Route::post('/orders', ...) yang menerima OrderService $service. Biarkan nama-nama itu.
Di place(), hitung total harga: untuk tiap item, kalikan price dengan quantity, lalu jumlahkan.
Masih di place(), kembalikan array ["total" => $total, "item_count" => count($items), "status" => "placed"].
Di route POST /orders, panggil $service->place($request->input("items", [])), lalu jawab dengan response()->json($result, 201). Logikanya tetap di service, bukan di route.
Simulator menjalankan route-mu dengan request kosong, jadi total dan item_count di transkrip bernilai 0. Itu wajar. Transkripnya harus memuat dua hal ini persis:
POST /orders → 201
"status":"placed"
Yang dinilai: angka 201 ada di kodemu, ada class untuk service-nya, route-nya Route::post(, dan dua baris transkrip di atas.
Hint
Service menghitung dan memutuskan, route cuma menerima request, memanggil service, lalu menjawab. Hasil service itulah body respons-nya, dengan status 201 karena pesanan baru dibuat.
Di place(): mulai $total = 0, foreach item tambahkan $item["price"] * $item["quantity"], lalu return array berisi total, item_count, dan status "placed". Di route: $result = $service->place(...); lalu return response()->json($result, 201);