From 0d1e887029eca69d1b5c23b8f30f6f7f976ada88 Mon Sep 17 00:00:00 2001 From: mohammadreza Date: Sat, 27 Jun 2026 01:33:58 +0330 Subject: [PATCH] Complete restaurant database schema and seed data --- database.sql | 153 ++++++++------------------ src/main/java/dev/model/CartItem.java | 4 + 2 files changed, 51 insertions(+), 106 deletions(-) create mode 100644 src/main/java/dev/model/CartItem.java diff --git a/database.sql b/database.sql index 2169346..4cb6ab9 100644 --- a/database.sql +++ b/database.sql @@ -1,141 +1,82 @@ --- Restaurant Database Management System --- --- Instructions: --- 1. Create all required tables. --- 2. Design appropriate PRIMARY KEY and FOREIGN KEY relationships. --- 3. Add suitable constraints based on the requirements. --- 4. Insert initial mock data. --- 5. Insert at least 3 menu items. --- 6. The script should be executable from start to finish without errors. - - - -- ======================================================= -- USER TABLE -- ======================================================= --- --- Represents customers using the system. --- --- Required information: --- - Unique identifier --- - Username --- - Password --- - Email (optional) --- --- Requirements: --- - Each user must have a unique identifier. --- - Usernames must be unique. --- - Username and password are required. --- - Passwords should not be stored in plain text. --- --- CREATE TABLE ... +CREATE TABLE users( + id SERIAL PRIMARY KEY, + username VARCHAR(50) UNIQUE NOT NULL, + password_hash TEXT NOT NULL, + email VARCHAR(250) +); -- ======================================================= -- MENU ITEM TABLE -- ======================================================= --- --- Represents available food and drink items. --- --- Required information: --- - Unique identifier --- - Name --- - Description (optional) --- - Price --- - Category (optional) --- --- Requirements: --- - Each menu item must have a unique identifier. --- - Name is required. --- - Price must always be positive. --- --- CREATE TABLE ... +CREATE TABLE menu_items( + id SERIAL PRIMARY KEY, + name VARCHAR(250) NOT NULL, + description TEXT, + price NUMERIC NOT NULL CHECK (price > 0), + category VARCHAR(50) +); -- ======================================================= -- ORDER TABLE -- ======================================================= --- --- Represents orders placed by customers. --- --- Required information: --- - Unique identifier --- - Reference to customer --- - Creation date and time --- - Total price --- --- Requirements: --- - Each order must belong to exactly one user. --- - A user can have multiple orders. --- - The relationship between User and Order must be implemented. --- --- Note: --- Avoid using reserved SQL keywords as table names. --- Consider using a name such as "orders" or "customer_orders". --- --- CREATE TABLE ... +CREATE TABLE user_orders ( + id SERIAL PRIMARY KEY, + user_id INT NOT NULL, + created_at TIMESTAMP NOT NULL, + total_price NUMERIC NOT NULL, + + FOREIGN KEY (user_id) REFERENCES users(id) +); -- ======================================================= -- ORDER DETAIL TABLE -- ======================================================= --- --- Represents items inside an order. --- --- Required information: --- - Unique identifier --- - Reference to an order --- - Reference to a menu item --- - Quantity --- - Item price at purchase time --- --- Requirements: --- - Each detail record must belong to one order. --- - Each detail record must reference one menu item. --- - Quantity must always be greater than zero. --- - Store the item's price at the moment of purchase. --- --- CREATE TABLE ... +CREATE TABLE order_details( + id SERIAL PRIMARY KEY, + order_id INT NOT NULL, + menu_id INT NOT NULL, + quantity NUMERIC NOT NULL CHECK (quantity > 0), + item_price NUMERIC NOT NULL CHECK (item_price > 0), + + FOREIGN KEY (order_id) REFERENCES user_orders(id), + FOREIGN KEY (menu_id) REFERENCES menu_items(id) +); -- ======================================================= -- INITIAL MENU DATA -- ======================================================= --- --- Insert at least 3 food or drink items. --- --- Example categories: --- - Pizza --- - Burger --- - Pasta --- - Drink --- --- INSERT INTO ... - --- ======================================================= --- OPTIONAL TEST DATA --- ======================================================= --- --- You may insert sample users and orders for testing. --- This section is optional. --- --- INSERT INTO ... +INSERT INTO menu_items (name, description, price, category) VALUES +('Margherita Pizza', 'Classic pizza with tomato sauce, mozzarella, and basil.', 12.99, 'Pizza'), +('Pepperoni Pizza', NULL, 14.49, 'Pizza'), +('Cheeseburger', 'Beef patty with cheddar cheese, lettuce, and tomato.', 10.99, 'Burger'), +('Chicken Burger', NULL, 11.49, 'Burger'), +('Caesar Salad', 'Romaine lettuce, croutons, parmesan, and Caesar dressing.', 8.99, 'Salad'), +('Greek Salad', NULL, 9.49, 'Salad'), +('French Fries', 'Crispy golden potato fries.', 4.99, 'Side'), +('Onion Rings', NULL, 5.49, 'Side'), +('Espresso', NULL, 2.99, 'Drink'), +('Cappuccino', 'Espresso with steamed milk and milk foam.', 4.49, 'Drink'); -- ======================================================= -- VERIFICATION QUERIES -- ======================================================= --- --- Uncomment these queries to verify your database. --- --- SELECT * FROM ...; --- SELECT * FROM ...; --- SELECT * FROM ...; --- SELECT * FROM ...; \ No newline at end of file + +SELECT * FROM users; +SELECT * FROM menu_items; +SELECT * FROM user_orders; +SELECT * FROM order_details; \ No newline at end of file diff --git a/src/main/java/dev/model/CartItem.java b/src/main/java/dev/model/CartItem.java new file mode 100644 index 0000000..d3af263 --- /dev/null +++ b/src/main/java/dev/model/CartItem.java @@ -0,0 +1,4 @@ +package dev.model; + +public class CartItem { +}