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