diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..bf2c501 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..5cb71ef --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..f4fe6ed --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..652d615 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..8306744 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/database.sql b/database.sql index 2169346..4dd8c73 100644 --- a/database.sql +++ b/database.sql @@ -8,7 +8,10 @@ -- 5. Insert at least 3 menu items. -- 6. The script should be executable from start to finish without errors. - +DROP TABLE IF EXISTS order_details CASCADE; +DROP TABLE IF EXISTS orders CASCADE; +DROP TABLE IF EXISTS menu_items CASCADE; +DROP TABLE IF EXISTS users CASCADE; -- ======================================================= -- USER TABLE @@ -28,9 +31,12 @@ -- - 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 VARCHAR(250) NOT NULL, + email VARCHAR(100) +); -- ======================================================= -- MENU ITEM TABLE @@ -50,9 +56,12 @@ -- - Name is required. -- - Price must always be positive. -- --- CREATE TABLE ... - - +CREATE TABLE menu_items ( + id SERIAL PRIMARY KEY, + name VARCHAR(100), + price DECIMAL(10,2) NOT NULL CHECK (price > 0), + category VARCHAR(50) +); -- ======================================================= -- ORDER TABLE @@ -75,9 +84,15 @@ -- Avoid using reserved SQL keywords as table names. -- Consider using a name such as "orders" or "customer_orders". -- --- CREATE TABLE ... - +CREATE TABLE orders ( + id SERIAL PRIMARY KEY, + user_id INTEGER NOT NULL, + orderDate TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, + total_price DECIMAL(10,2) NOT NULL, + CONSTRAINT fk_orders + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE +); -- ======================================================= -- ORDER DETAIL TABLE @@ -98,7 +113,21 @@ -- - 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 INTEGER NOT NULL, + menu_items_id INTEGER NOT NULL, + quantity INTEGER NOT NULL CHECK (quantity>0), + price_at_purchase DECIMAL(10,2) NOT NULL, + + CONSTRAINT fk_order_detail_order + FOREIGN KEY (order_id) REFERENCES orders(id) + ON DELETE CASCADE, + + CONSTRAINT fk_menu_items_id + FOREIGN KEY (menu_items_id) REFERENCES menu_items(id) + ON DELETE RESTRICT +); @@ -114,7 +143,11 @@ -- - Pasta -- - Drink -- --- INSERT INTO ... +INSERT INTO menu_items (name, price, category) VALUES + ('Margherita', 9.99, 'Pizza'), + ('Cheeseburger', 8.50, 'Burger'), + ('Alfredo pasta', 12.00, 'Pasta'), + ('Coca Cola', 2.50, 'Drink'); @@ -125,9 +158,16 @@ -- You may insert sample users and orders for testing. -- This section is optional. -- --- INSERT INTO ... +INSERT INTO users (username, password, email) VALUES + ('aga armin', MD5('123456'), 'ar@example.com'), + ('mewsoume', MD5('mypass'), 'm@example.com'); +INSERT INTO orders (user_id, total_price) VALUES + (1, 22.49); +INSERT INTO order_details (order_id, menu_items_id, quantity, price_at_purchase) VALUES + (1, 1, 2, 9.99), + (1, 3, 1, 12.00); -- ======================================================= -- VERIFICATION QUERIES