Tugas 6 PPL (Studi kasus 1 - Desain Sistem Restauran)

 Nama : M. Armand Giovani

NRP : 5025211054

Kelas : PPL A


Sistem Restauran

 

HIGH LEVEL DESIGN

  1. Functionally requirements

  1. Pencarian Restoran: Sistem harus memungkinkan pelanggan untuk mencari restoran berdasarkan lokasi, jenis masakan, atau nama restoran.

  2. Melihat Menu: Pelanggan harus dapat melihat menu restoran yang dipilih, dengan opsi untuk melihat deskripsi item, harga, dan foto.

  3. Pemesanan: Pelanggan harus dapat memesan makanan melalui platform, dengan opsi untuk menyesuaikan pesanan mereka (misalnya, menambah atau menghapus item).

  4. Manajemen Pesanan Restoran: Staf restoran harus dapat melihat pesanan yang ditempatkan, mengonfirmasi pesanan, dan memperbarui status pesanan (dalam proses, siap untuk pengiriman, selesai, dll.).

  5. Pembaruan Menu: Staf restoran harus dapat mengedit dan memperbarui menu mereka, termasuk menambahkan, menghapus, atau memperbarui item.

  6. Rating Restoran: Pelanggan harus dapat melihat dan memberi peringkat restoran berdasarkan pengalaman mereka.

  7. Pilihan Dine-In atau Pengiriman: Pelanggan harus dapat memilih apakah mereka ingin makan di tempat atau memesan pengiriman.

  8. Manajemen Pesanan Dapur: Staf dapur harus dapat melihat pesanan yang masuk, mempersiapkan makanan sesuai dengan pesanan, dan mengkonfirmasi ketika makanan sudah siap.

  9. Pengemudi Pengiriman: Pengemudi pengiriman harus dapat melihat pesanan pengiriman yang telah ditugaskan kepada mereka, serta navigasi menuju lokasi pengiriman.

  10. Pelacakan Pesanan: Pelanggan harus dapat melacak status pesanan mereka secara real-time, dari pemrosesan hingga pengiriman.

  11. Metode Pembayaran: Pelanggan harus dapat memilih dari berbagai metode pembayaran yang tersedia, seperti kartu kredit, transfer bank, atau pembayaran tunai saat pengiriman.

  12. Notifikasi Pesanan: Sistem harus mengirimkan notifikasi kepada pelanggan tentang konfirmasi pesanan, pembaruan status pesanan, dan estimasi waktu pengiriman.

  13. Manajemen Akun Pelanggan: Pelanggan harus dapat membuat dan mengelola akun mereka, termasuk informasi pribadi, alamat pengiriman, dan riwayat pesanan.

  14. Manajemen Akun Staf: Staf restoran harus memiliki akses terbatas ke sistem, dengan izin yang sesuai berdasarkan peran mereka (seperti manajer restoran, koki, pengemudi pengiriman).

  15. Laporan dan Analisis: Sistem harus dapat menghasilkan laporan tentang performa penjualan, popularitas item menu, dan kepuasan pelanggan untuk membantu restoran dalam pengambilan keputusan.


  1. Non-Functionally requirements

  1. Skalabilitas (Scalability) : Sistem harus mampu menangani peningkatan jumlah pengguna, pesanan, dan restoran tanpa penurunan kinerja yang signifikan. Ini harus dapat diskalakan secara horizontal dengan menambahkan lebih banyak server atau sumber daya saat permintaan tumbuh. Selain itu, arsitektur harus mendukung pengembangan modular, memungkinkan penambahan fitur dan fungsionalitas baru dengan lancar.

  2. Keandalan (Reliability) : Keandalan memastikan pemrosesan pesanan yang konsisten dan akurat, meminimalkan risiko kesalahan atau kegagalan sistem. Ini termasuk mekanisme penanganan kesalahan yang kuat, proses validasi data, dan strategi failover untuk mengurangi gangguan yang mungkin terjadi. Pemeliharaan dan pemantauan sistem secara teratur harus dilakukan untuk mengidentifikasi dan memecahkan masalah secara proaktif.

  3. Ketersediaan Tinggi (High Availability): Sistem harus berusaha untuk uptime yang hampir kontinu untuk memastikan akses tanpa gangguan bagi pelanggan dan staf restoran. Ini membutuhkan infrastruktur redundan, mekanisme penyeimbangan beban, dan rencana pemulihan bencana untuk mengurangi dampak kegagalan perangkat keras, gangguan jaringan, atau peristiwa yang tidak terduga lainnya. Perjanjian Tingkat Layanan (SLA) harus dibuat untuk menentukan downtime yang dapat diterima dan waktu tanggapan.

  4. Konsistensi Kuat (Strong Consistency): Setiap pembaruan atau perubahan yang dibuat pada sistem, seperti pembaruan menu, penyesuaian harga, atau perubahan lokasi, harus tersebar dengan cepat dan konsisten di semua komponen yang relevan. Ini memastikan bahwa pelanggan, staf restoran, dan pengemudi pengiriman memiliki akses ke informasi terbaru setiap saat. Penggunaan basis data terdistribusi, mekanisme caching, dan teknik sinkronisasi real-time dapat membantu mempertahankan konsistensi kuat di seluruh sistem.

  5. Keamanan (Security): Perlindungan data sensitif, seperti informasi pelanggan, rincian pembayaran, dan riwayat pesanan, sangat penting. Sistem harus menerapkan mekanisme otentikasi, otorisasi, dan enkripsi yang kuat untuk mencegah akses atau pelanggaran data yang tidak sah. Kepatuhan dengan standar industri dan regulasi, seperti PCI DSS untuk pemrosesan pembayaran, harus dipastikan.

  6. Kinerja (Performance): Sistem harus dioptimalkan untuk penggunaan sumber daya yang efisien dan interaksi pengguna yang responsif. Ini termasuk meminimalkan laten dalam pengambilan informasi restoran, pemrosesan pesanan, dan pelacakan pengiriman. Pengujian kinerja harus dilakukan secara teratur untuk mengidentifikasi bottleneck dan mengoptimalkan komponen sistem secara sesuai.

  7. Kemudahan Penggunaan (Usability): Antarmuka pengguna harus intuitif dan ramah pengguna, memenuhi kebutuhan baik pelanggan maupun staf restoran. Navigasi yang jelas, pesan umpan balik informatif, dan desain responsif sangat penting untuk pengalaman pengguna yang positif. Fitur aksesibilitas juga harus dipertimbangkan untuk mengakomodasi pengguna dengan kecacatan.


  1. Necessary Components : 


    1. Antarmuka Klien (Client Interface)

    Pelanggan berinteraksi dengan sistem melalui aplikasi seluler, antarmuka web, atau aplikasi desktop.


    1. Pembebanan Seimbang (Load Balancer)

    Dengan mendistribusikan lalu lintas masuk secara merata ke beberapa server, pembebanan seimbang meningkatkan ketersediaan tinggi dan mengoptimalkan kinerja keseluruhan.


    1. Layanan Otentikasi dan Registrasi (Authentication and Registration Services)

    Layanan ini menangani otentikasi dan registrasi pengguna. Semua pengguna, termasuk pelanggan, admin restoran, dan agen pengiriman, menjalani proses otentikasi dan registrasi.


    1. Basis Data (Database)

    Menyimpan data pengguna, detail restoran, menu, pesanan, dan metadata, basis data berfungsi sebagai repositori sentral untuk sistem.


    1. Layanan Pembayaran (Payment Services)

    Bertanggung jawab atas pengelolaan semua data dan layanan terkait pembayaran.


    1. Layanan Penempatan Pesanan (Order Placement Services)

    Layanan ini bertugas menempatkan pesanan di restoran dan mengelola semua proses terkait pesanan.


    1. Layanan Pengiriman (Delivery Services)

    Difokuskan pada operasi terkait pengiriman, layanan ini menemukan agen pengiriman dan memfasilitasi pelacakan paket real-time menggunakan Layanan Peta.


    1. Layanan Admin Restoran (Restaurant Admin Services)

    Memungkinkan restoran untuk melihat dan mengelola pesanan yang ditempatkan, layanan ini juga memungkinkan admin untuk memodifikasi menu, harga, dan gambar makanan.


    1. Layanan Peta (Map Services)

    Melacak lokasi pengguna dan agen pengiriman, Layanan Peta berkolaborasi dengan Layanan Pengiriman dan pelanggan untuk pelacakan lokasi real-time.

  2. Secara Global/umum

LOW LEVEL DESIGN
A. Database
    MYSQL


CREATE TABLE customer (

    customer_id INT AUTO_INCREMENT PRIMARY KEY,

    customer_name VARCHAR(255),

    email VARCHAR(255),

    phone_number VARCHAR(20),

    address TEXT

);


CREATE TABLE restaurant (

    restaurant_id INT AUTO_INCREMENT PRIMARY KEY,

    rating INT

);


CREATE TABLE delivery_agent (

    agent_id INT AUTO_INCREMENT PRIMARY KEY,

    payment_details_id INT,

    phone_no VARCHAR(20),

    email VARCHAR(255),

    vehicle_number VARCHAR(20),

    address TEXT

);


CREATE TABLE orders (

    order_id INT AUTO_INCREMENT PRIMARY KEY,

    customer_id INT,

    restaurant_id INT,

    agent_id INT,

    time_stamp TIMESTAMP,

    is_delivery INT,

    delivery_location TEXT,

    items_id INT,

    delivery_price DECIMAL(10,2),

    items_price DECIMAL(10,2),

    transaction_id INT,

    order_status INT,

    FOREIGN KEY (customer_id) REFERENCES customer(customer_id),

    FOREIGN KEY (restaurant_id) REFERENCES restaurant(restaurant_id),

    FOREIGN KEY (agent_id) REFERENCES delivery_agent(agent_id)

);


CREATE TABLE restaurant_rating (

    restaurant_id INT PRIMARY KEY,

    rating INT,

    FOREIGN KEY (restaurant_id) REFERENCES restaurant(restaurant_id)

);


CREATE TABLE agent_rating (

    agent_id INT PRIMARY KEY,

    rating INT,

    FOREIGN KEY (agent_id) REFERENCES delivery_agent(agent_id)

);


Communicating with the server

    Dalam sistem ini menggunakan API RESTful untuk Sistem Manajemen Restoran memiliki banyak keuntungan karena kesederhanaan, antarmuka yang seragam, dan keadaan tanpa keadaan. Desain REST yang langsung ke depan, menggunakan metode HTTP standar, memudahkan penggunaan dan pengembangan, mempromosikan interoperabilitas di berbagai platform dan bahasa pemrograman.


    Pendekatan berbasis sumber daya (resource-centric) sangat cocok dengan entitas dalam sistem, dan keadaan tanpa keadaan memungkinkan skalabilitas horizontal, yang penting untuk menangani lalu lintas tinggi yang diantisipasi dalam sistem manajemen restoran. Selain itu, API RESTful mendukung fleksibilitas dalam format data, penanganan kesalahan yang terstandarisasi melalui kode status HTTP, dan mekanisme penyimpanan sementara, yang berkontribusi pada komunikasi yang efisien, identifikasi kesalahan, dan peningkatan kinerja.


1. User Registration


Endpoint:

POST /api/users/register


Request:

{

“username”: “salik”,

“password”: “secure_password”,

“email”: “”xyz@gmail.com”,

“address”: “123 Main St, City”,

“phone”: “+1234567890”

}


Response:

{


“message”: “User registered successfully”,

“userId”: “12345”,

“token”: “authentication_token”


}


2. User Authentication


Endpoint:

POST /api/users/login


Request:


{


“username”: “salik”,

“password”: “secure_password”


}


Response:

{


“message”: “Login successful”,

“userId”: “12345”,

“token”: “authentication_token”


}


3. Restaurant Search and Order Placement


a. Search Nearby Restaurants


Endpoint:

GET /api/restaurants/search?location=City&cuisine=Italian&rating=4


Response:

[


{


“restaurantId”: “abc123”,


“name”: “Italian Delight”,


“location”: “456 Main St, City”,


“cuisine”: “Italian”,


“rating”: 4.5


},


{


“restaurantId”: “def456”,


“name”: “Pizza Palace”,


“location”: “789 Main St, City”,


“cuisine”: “Italian”,


“rating”: 4.2


}


]



b.  Place an Order


Endpoint:


POST /api/orders/place


Request:


{


“userId”: “12345”,


“restaurantId”: “abc123”,


“items”: [


{


“itemId”: “item1”,


“quantity”: 2


},


{


“itemId”: “item2”,


“quantity”: 1


}


],


“deliveryPreference”: “delivery”,


“paymentMethod”: “credit_card”


}


Response:


{


“orderId”: “order123”,

“message”: “Order placed successfully”,

“totalAmount”: 25.99


}




Restaurant Management:

View Orders for a Restaurant


Endpoint:


GET /api/restaurants/orders?restaurantId=abc123


Response:


[


{


“orderId”: “order123”,


“userId”: “user456”,


“items”: [


{


“itemId”: “item1”,


“quantity”: 2


},


{


“itemId”: “item2”,


“quantity”: 1


}


],


“totalAmount”: 25.99,


“status”: “pending”


},


// Additional orders…


]



Delivery and Real-time Tracking:

Track Delivery Order


Endpoint:


GET /api/delivery/track?orderId=order123


Response:


{


“orderId”: “order123”,


“status”: “in_transit”,


“location”: {


“latitude”: 37.7749,


“longitude”: -122.4194


}


}


B. Teknologi

Microservices 

Salah satu teknologi yang digunakan dalam sistem restoran ini, yaitu teknologi microservise, sebagai berikut : 



  1. Klien (Client)

Pelanggan memulai permintaan ke pembebanan seimbang untuk berbagai layanan, seperti registrasi pengguna, pencarian restoran, dan penempatan pesanan. Selain itu, agen pengiriman dan admin restoran menggunakan pembebanan seimbang untuk mengirim permintaan registrasi atau otentikasi.


  1. Pembebanan Seimbang (Load Balancer)

Komponen penting ini memantau kesehatan server, mengalihkan lalu lintas dalam kejadian kegagalan untuk memastikan downtime minimal. Tidak hanya meningkatkan keamanan dengan mengurangi serangan DDoS, tetapi juga memainkan peran penting dalam penskalaan aplikasi. Tersedia dalam bentuk perangkat keras, perangkat lunak, dan berbasis awan, pembebanan seimbang berfungsi sebagai pengelola lalu lintas, mengarahkan aliran dalam infrastruktur TI modern.


  1. Layanan API (API Services)

Melayani dua fungsi utama, layanan API menangani otentikasi pengguna, memastikan hanya pengguna yang diotorisasi yang mengakses sistem. Setelah diotentikasi, layanan ini bertindak sebagai perantara untuk komunikasi dengan berbagai mikro layanan seperti penempatan pesanan, pembayaran, dan pencarian. Misalnya, mengimplementasikan Kafka untuk antrian pesan memastikan komunikasi yang dapat diandalkan antara mikro layanan.


  1. Layanan Otentikasi (Authentication Services)

Menawarkan fungsionalitas otentikasi pengguna yang kuat dan pendaftaran pengguna, layanan ini sangat penting untuk keamanan dan memasukkan pengguna baru. Proses registrasi memberikan ID pengguna unik dan menyimpan informasi pengguna yang penting, termasuk nama, alamat, dan rincian pembayaran, secara aman dalam basis data sistem.


  1. Layanan Pembayaran (Payment Services)

Menawarkan berbagai pilihan pembayaran, Layanan Pembayaran memastikan fleksibilitas dan kenyamanan dalam menyelesaikan tagihan. Mereka memvalidasi pembayaran, mengonfirmasi ketepatan transaksi dan ketersediaan dana. Proses ini mencegah kesalahan, penipuan, atau pembayaran yang gagal, memastikan pengalaman pembayaran yang lancar dan terpercaya. Misalnya, mengintegrasikan dengan gateway pembayaran seperti Stripe atau PayPal meningkatkan keamanan transaksi.


  1. CDN

Khusus dalam menyimpan aset statis seperti gambar hidangan dan menu, CDN mengurangi beban pada server utama, meningkatkan aksesibilitas konten. Ditempatkan secara strategis, CDN memastikan pengambilan data yang cepat, meminimalkan laten, dan mempercepat pengiriman konten. Misalnya, menggunakan Akamai atau Amazon CloudFront untuk layanan CDN mengoptimalkan waktu pengisian halaman menu, meningkatkan pengalaman pengguna secara keseluruhan.


  1. Layanan Pencarian Restoran (Restaurant Search Services)

Memungkinkan pengguna untuk mencari restoran berdasarkan kriteria seperti rating dan masakan, layanan ini memanfaatkan ElasticSearch untuk pengambilan data yang cepat dalam basis data terdistribusi. Misalnya, pengguna dapat dengan mudah menemukan restoran Italia terbaik di sekitar mereka dengan memanfaatkan kemampuan pencarian yang kuat dari ElasticSearch.


  1. Layanan Penempatan Pesanan (Order Placement Services)

Mengelola seluruh siklus hidup pesanan, layanan ini memberikan informasi kepada restoran dan memperbarui pelanggan tentang status pesanan. Antrian Pesanan memfasilitasi komunikasi dengan Layanan Restoran, sementara permintaan pengiriman termasuk interaksi dengan Layanan Pengiriman. Mengimplementasikan Apache Kafka sebagai pialang pesan memastikan pemrosesan pesanan yang efisien dan komunikasi antara layanan.


  1. Layanan Pengiriman (Delivery Services)

Memfasilitasi pengambilan pesanan, layanan ini membentuk komunikasi yang lancar antara agen dan pelanggan, memungkinkan pelacakan pesanan secara real-time. Mereka sangat penting dalam memastikan pengiriman yang berhasil dan mengumpulkan umpan balik pelanggan. Misalnya, Layanan Pengiriman dengan efisien mengkoordinasikan pengiriman makanan dari restoran ke pelanggan menggunakan alat pelacakan real-time seperti Google Maps.


  1. Layanan Peta (Map Services)

Mencari agen terdekat dan melacak pesanan, Layanan Peta memberikan pembaruan lokasi real-time kepada pelanggan. Menggunakan teknologi seperti Google Maps, ini menghubungkan pengguna ke layanan untuk pelacakan pesanan melalui long polling, meminimalkan lalu lintas sambil memberikan pembaruan tepat waktu.


  1. Antrian Pemberitahuan (Notification Queue)

Layanan yang ingin mengirim pemberitahuan kepada pengguna mendorong pesan ke Antrian Pemberitahuan, dengan Layanan Pemberitahuan mengonsumsi permintaan tersebut, kemudian mengirimkan pemberitahuan kepada pengguna. Misalnya, Kafka dapat digunakan untuk mengimplementasikan antrian pemberitahuan yang kuat dan dapat diskalakan.


  1. Cache

Menyimpan permintaan yang sedang berlangsung untuk pengambilan cepat, cache memberikan akses yang cepat kepada pelanggan dan layanan mikro lainnya. Cache Redis, misalnya, secara efisien menyimpan dan mengambil data yang sering diakses, meningkatkan kinerja sistem secara keseluruhan.


  1. Basis Data (Database)

Menyimpan data pengguna, informasi restoran, dan menu, basis data dibagi dan direplikasi di berbagai server. Sharding horizontal, yang diwakili oleh MySQL untuk konsistensi tinggi dalam data pengguna dan transaksi, dilengkapi oleh NoSQL untuk metadata non-kritis seperti rating restoran dan detail agen pengiriman. Misalnya, MongoDB dapat digunakan karena fleksibilitasnya dalam menangani data yang tidak terstruktur seperti rating dan informasi agen.


C. Interaksi User-Interface
  • Pembayaran

  • Home

  • Menu


  • Side Menu

  • Tracking


Komentar