Tugas 07:

 Tugas 07:


Kode package.json berikut tidak boleh dirubah:

{

  "type": "module"

}


Berikut diberikan kode main.js:

import { orders, addOrder, updateOrderStatus, calculateTotalRevenue, deleteOrder } from './orders.js';


addOrder('Alice', [

  { name: 'Nasi Goreng', price: 20000 },

  { name: 'Teh Manis', price: 5000 }

]);


addOrder('Bob', [

  { name: 'Mie Goreng', price: 15000 },

  { name: 'Kopi', price: 10000 }

]);


console.log(orders);


/**

 * Output yang diharapkan:

 * [

 *   {

 *     id: '_someUniqueId1',

 *     customerName: 'Alice',

 *     items: [

 *       { name: 'Nasi Goreng', price: 20000 },

 *       { name: 'Teh Manis', price: 5000 }

 *     ],

 *     totalPrice: 25000,

 *     status: 'Menunggu'

 *   },

 *   {

 *     id: '_someUniqueId2',

 *     customerName: 'Bob',

 *     items: [

 *       { name: 'Mie Goreng', price: 15000 },

 *       { name: 'Kopi', price: 10000 }

 *     ],

 *     totalPrice: 25000,

 *     status: 'Menunggu'

 *   }

 * ]

 */


updateOrderStatus(orders[0].id, 'Diproses');

updateOrderStatus(orders[1].id, 'Selesai');


console.log(orders);


/**

 * Output yang diharapkan:

 * [

 *   {

 *     id: '_someUniqueId1',

 *     customerName: 'Alice',

 *     items: [

 *       { name: 'Nasi Goreng', price: 20000 },

 *       { name: 'Teh Manis', price: 5000 }

 *     ],

 *     totalPrice: 25000,

 *     status: 'Diproses'

 *   },

 *   {

 *     id: '_someUniqueId2',

 *     customerName: 'Bob',

 *     items: [

 *       { name: 'Mie Goreng', price: 15000 },

 *       { name: 'Kopi', price: 10000 }

 *     ],

 *     totalPrice: 25000,

 *     status: 'Selesai'

 *   }

 * ]

 */


console.log(calculateTotalRevenue());

/**

 * Output yang diharapkan:

 * 25000

 */



deleteOrder(orders[0].id);


console.log(orders);


/**

 * Output yang diharapkan:

 * [

 *   {

 *     id: '_someUniqueId2',

 *     customerName: 'Bob',

 *     items: [

 *       { name: 'Mie Goreng', price: 15000 },

 *       { name: 'Kopi', price: 10000 }

 *     ],

 *     totalPrice: 25000,

 *     status: 'Selesai'

 *   }

 * ]

 */


Dan juga kode orders.js berikut:

// Gunakan fungsi di bawah ini untuk menghasilkan id yang unik

function generateUniqueId() {

  return `_${Math.random().toString(36).slice(2, 9)}`;

}



// TODO: buatlah variabel yang menampung data orders

let orders;


// TODO: selesaikan fungsi addOrder

function addOrder(customerName, items) {}


// TODO: selesaikan fungsi updateOrderStatus

function updateOrderStatus(orderId, status) {}


// TODO: selesaikan fungsi calculateTotalRevenue dari order yang berstatus Selesai

function calculateTotalRevenue() {}


// TODO: selesaikan fungsi deleteOrder

function deleteOrder(id) {}


export { orders, addOrder, updateOrderStatus, calculateTotalRevenue, deleteOrder };


Selesaikan tugas yang diinstruksikan pada instruksi.md berikut ini:


# Asesmen Penggunaan JavaScript untuk Kasus Nyata: Sistem Pengelolaan Pesanan Restoran

Anda diminta untuk membuat sebuah sistem sederhana untuk mengelola pesanan di sebuah restoran.

Sistem ini akan menggunakan bahasa pemrograman JavaScript dan memanfaatkan berbagai konsep yang telah dipelajari.


## Fitur yang harus ada

### Struktur Data untuk Menyimpan Data Pesanan

- Gunakan Array dan Object untuk menyimpan data pesanan.

- Setiap pesanan harus memiliki informasi berikut:

  - ID Pesanan (unik) -> `id`

  - Nama Pelanggan -> `customerName`

  - Daftar Item yang Dipesan (Array dari objek item, setiap item memiliki nama dan harga) -> `items` -> `{ name: string, price: number }`

  - Total Harga Pesanan -> `totalPrice`

  - Status Pesanan (Menunggu, Diproses, Selesai) -> `status`


## Ketentuan

1. Kode harus dipecah ke dalam beberapa modul JavaScript. Mohon untuk manfaatkan berkas JavaScript yang sudah tersedia.

2. Instruksi lebih detail terdapat pada berkas JavaScript masing-masing.

3. Tidak mengubah kode di dalam berkas `package.json`.


Jawaban:


Berikut adalah penyelesaian untuk berkas orders.js. Kode ini mencakup pengelolaan array orders, pembuatan ID unik, penghitungan total harga otomatis, dan filter pendapatan hanya untuk pesanan yang sudah selesai.

javascript
// Gunakan fungsi di bawah ini untuk menghasilkan id yang unik
function generateUniqueId() {
  return `_${Math.random().toString(36).slice(2, 9)}`;
}

// TODO: buatlah variabel yang menampung data orders
let orders = [];

// TODO: selesaikan fungsi addOrder
function addOrder(customerName, items) {
  const totalPrice = items.reduce((sum, item) => sum + item.price, 0);
  const newOrder = {
    id: generateUniqueId(),
    customerName: customerName,
    items: items,
    totalPrice: totalPrice,
    status: 'Menunggu'
  };
  orders.push(newOrder);
}

// TODO: selesaikan fungsi updateOrderStatus
function updateOrderStatus(orderId, status) {
  const order = orders.find((o) => o.id === orderId);
  if (order) {
    order.status = status;
  }
}

// TODO: selesaikan fungsi calculateTotalRevenue dari order yang berstatus Selesai
function calculateTotalRevenue() {
  return orders
    .filter((order) => order.status === 'Selesai')
    .reduce((total, order) => total + order.totalPrice, 0);
}

// TODO: selesaikan fungsi deleteOrder
function deleteOrder(id) {
  orders = orders.filter((order) => order.id !== id);
}

export { orders, addOrder, updateOrderStatus, calculateTotalRevenue, deleteOrder };
Use code with caution.
Penjelasan Logika:
  1. addOrder: Menggunakan .reduce() untuk menjumlahkan semua harga item sebelum memasukkannya ke dalam objek pesanan baru dengan status default "Menunggu".
  2. updateOrderStatus: Menggunakan .find() untuk mencari objek pesanan berdasarkan ID, lalu memperbarui properti status-nya.
  3. calculateTotalRevenue: Melakukan filter terlebih dahulu untuk mengambil pesanan dengan status 'Selesai', kemudian menjumlahkan totalPrice dari pesanan-pesanan tersebut.
  4. deleteOrder: Menggunakan .filter() untuk menghapus pesanan. Perlu diingat bahwa karena kita menimpa variabel orders, pastikan variabel tersebut dideklarasikan dengan letbukan const.
Apakah Anda ingin saya membantu membuatkan file pengujian untuk memastikan semua fungsi ini berjalan dengan benar?


Untuk kode main.js, Anda hanya perlu menggunakan kode yang sudah Anda berikan sebelumnya. Kode tersebut sudah berfungsi sebagai penguji (test script) untuk memvalidasi apakah logika di orders.js berjalan sesuai dengan Output yang diharapkan.
Berikut adalah kode main.js lengkapnya (pastikan file ini satu folder dengan orders.js):
javascript
import { orders, addOrder, updateOrderStatus, calculateTotalRevenue, deleteOrder } from './orders.js';

// 1. Menambah pesanan Alice
addOrder('Alice', [
  { name: 'Nasi Goreng', price: 20000 },
  { name: 'Teh Manis', price: 5000 }
]);

// 2. Menambah pesanan Bob
addOrder('Bob', [
  { name: 'Mie Goreng', price: 15000 },
  { name: 'Kopi', price: 10000 }
]);

console.log('Initial Orders:');
console.log(JSON.stringify(orders, null, 2));

// 3. Memperbarui status pesanan
// Menggunakan ID dari array orders yang baru saja dibuat
updateOrderStatus(orders[0].id, 'Diproses');
updateOrderStatus(orders[1].id, 'Selesai');

console.log('\nAfter Status Update:');
console.log(JSON.stringify(orders, null, 2));

// 4. Menghitung total pendapatan (hanya yang statusnya 'Selesai')
console.log('\nTotal Revenue (Selesai):');
console.log(calculateTotalRevenue()); // Harus keluar: 25000

// 5. Menghapus pesanan pertama (Alice)
deleteOrder(orders[0].id);

console.log('\nAfter Deleting Alice\'s Order:');
console.log(JSON.stringify(orders, null, 2));
Use code with caution.
Beberapa hal penting agar output rapi:
  1. JSON.stringify(orders, null, 2): Saya menambahkan ini agar saat di-console.log, struktur objek dan array-nya terlihat rapi di terminal (bertingkat), sama seperti format yang diminta di instruksi.
  2. Variabel orders: Karena di orders.js kita menggunakan export { orders, ... }, maka saat deleteOrder dijalankan (yang mengubah isi array), main.js akan mendapatkan data terbaru secara otomatis.
Cara Menjalankan:
Buka terminal (atau terminal di StackBlitz/Acode) dan jalankan:
bash
node main.js
Use code with caution.
Apakah ada bagian dari logika calculateTotalRevenue atau penghapusan data yang ingin Anda tanyakan lebih detail?


Jalankan kode js di Termux:

Untuk menjalankan kode JavaScript Anda di Termux, ikuti langkah-langkah praktis berikut:
1. Instal Node.js
Buka aplikasi Termux dan instal paket Node.js terlebih dahulu.
bash
pkg update && pkg upgrade
pkg install nodejs
Use code with caution.
2. Siapkan File Kode
Anda bisa membuat file langsung di Termux menggunakan editor nano. Contoh untuk file orders.js:
bash
nano orders.js
Use code with caution.
Salin kode orders.js yang sudah kita buat tadi, lalu tekan CTRL + O, Enter (untuk simpan), dan CTRL + X (untuk keluar).
Lakukan hal yang sama untuk file main.js dan package.json.
3. Pastikan File package.json Ada
Karena kita menggunakan sistem modul (import/export), file package.json wajib ada di folder yang sama agar tidak error.
bash
nano package.json
Use code with caution.
Isi dengan:
json
{
  "type": "module"
}
Use code with caution.
4. Jalankan Kode
Setelah semua file siap dalam satu folder, ketik perintah berikut:
bash
node main.js
Use code with caution.
Tips Tambahan:
  • Melihat daftar file: Ketik ls untuk memastikan file main.js, orders.js, dan package.json sudah ada di sana.
  • Pindah Folder: Jika Anda menyimpan file di memori internal HP, Anda perlu memberikan izin akses penyimpanan dulu dengan perintah termux-setup-storage.
Apakah muncul pesan error saat Anda mencoba menjalankan perintah node main.js tersebut?



Comments