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..712ab9d
--- /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..4efc77f
--- /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..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/database.sql b/database.sql
index 2169346..0ca07ca 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
@@ -30,6 +33,12 @@
--
-- CREATE TABLE ...
+CREATE TABLE users (
+ id SERIAL PRIMARY KEY,
+ username VARCHAR(50) NOT NULL UNIQUE,
+ password VARCHAR(255) NOT NULL,
+ email VARCHAR(100)
+);
-- =======================================================
@@ -52,7 +61,13 @@
--
-- CREATE TABLE ...
-
+CREATE TABLE menu_items (
+ id SERIAL PRIMARY KEY,
+ name VARCHAR(100) NOT NULL,
+ description TEXT,
+ price DECIMAL(10, 2) NOT NULL CHECK (price > 0),
+ category VARCHAR(50)
+);
-- =======================================================
-- ORDER TABLE
@@ -77,7 +92,13 @@
--
-- CREATE TABLE ...
-
+CREATE TABLE orders (
+ id SERIAL PRIMARY KEY,
+ user_id INT NOT NULL,
+ order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ total_amount DECIMAL(10, 2) NOT NULL DEFAULT 0.00 CHECK (total_amount >= 0),
+ CONSTRAINT fk_order_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
+ );
-- =======================================================
-- ORDER DETAIL TABLE
@@ -100,7 +121,15 @@
--
-- CREATE TABLE ...
-
+CREATE TABLE order_details (
+ id SERIAL PRIMARY KEY,
+ order_id INT NOT NULL,
+ menu_item_id INT NOT NULL,
+ quantity INT NOT NULL CHECK (quantity > 0),
+ price_at_purchase DECIMAL(10, 2) NOT NULL CHECK (price_at_purchase > 0),
+ CONSTRAINT fk_detail_order FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
+ CONSTRAINT fk_detail_menu FOREIGN KEY (menu_item_id) REFERENCES menu_items(id) ON DELETE RESTRICT
+);
-- =======================================================
-- INITIAL MENU DATA
@@ -116,7 +145,11 @@
--
-- INSERT INTO ...
-
+INSERT INTO menu_items (name, description, price, category) VALUES
+('Pizza', 'Delicious cheese and pepperoni pizza', 10.00, 'Pizza'),
+('Burger', 'Juicy grilled beef burger with fries', 8.00, 'Burger'),
+('Pasta', 'Creamy Alfredo pasta with chicken', 12.00, 'Pasta'),
+('Coca Cola', 'Chilled soft drink', 2.50, 'Drink');
-- =======================================================
-- OPTIONAL TEST DATA
@@ -127,7 +160,14 @@
--
-- INSERT INTO ...
+INSERT INTO users (username, password, email) VALUES
+('fatemeh_demo', '$2a$10$EixZaYVK1upmZ7zpKgH97O5F', 'fatemeh@example.com');
+INSERT INTO orders (user_id, total_amount) VALUES
+(1, 20.00);
+
+INSERT INTO order_details (order_id, menu_item_id, quantity, price_at_purchase) VALUES
+(1, 1, 2, 10.00);
-- =======================================================
-- VERIFICATION QUERIES
@@ -135,7 +175,7 @@
--
-- 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 orders;
+SELECT * FROM orders;
\ No newline at end of file
diff --git a/src/main/java/dev/dao/MenuItemDao.java b/src/main/java/dev/dao/MenuItemDao.java
index 3bbebe9..50b5cc3 100644
--- a/src/main/java/dev/dao/MenuItemDao.java
+++ b/src/main/java/dev/dao/MenuItemDao.java
@@ -3,6 +3,10 @@ package dev.dao;
import dev.model.MenuItem;
import java.util.List;
+import dev.database.DatabaseConnection;
+import java.lang.reflect.Field;
+import java.sql.*;
+import java.util.ArrayList;
public class MenuItemDao {
@@ -10,16 +14,61 @@ public class MenuItemDao {
// TODO:
// Retrieve all menu items
-
- return null;
+ List