
DROP TABLE IF EXISTS order_details CASCADE;
DROP TABLE IF EXISTS orders CASCADE;
DROP TABLE IF EXISTS menu_item CASCADE;
DROP TABLE IF EXISTS users CASCADE;


CREATE TABLE users (
                       uid SERIAL PRIMARY KEY,
                       username VARCHAR(50) UNIQUE NOT NULL,
                       password VARCHAR(255) NOT NULL,
                       email VARCHAR(100)
);


CREATE TABLE menu_item (
                           uid SERIAL PRIMARY KEY,
                           name VARCHAR(50) NOT NULL,
                           price DECIMAL(10, 2) NOT NULL CHECK (price > 0),
                           category VARCHAR(50)
);


CREATE TABLE orders (
                        uid SERIAL PRIMARY KEY,
                        user_id INTEGER NOT NULL,
                        order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                        total_price DECIMAL(10, 2) NOT NULL CHECK (total_price >= 0),

                        CONSTRAINT fk_orders_user
                            FOREIGN KEY (user_id)
                                REFERENCES users(uid)
                                ON DELETE CASCADE
);


CREATE TABLE order_details (
                               uid SERIAL PRIMARY KEY,
                               order_id INTEGER NOT NULL,
                               item_id INTEGER NOT NULL,
                               quantity INTEGER NOT NULL CHECK (quantity > 0),
                               item_price DECIMAL(10, 2) NOT NULL CHECK (item_price >= 0),

                               CONSTRAINT fk_order_details_order
                                   FOREIGN KEY (order_id)
                                       REFERENCES orders(uid)
                                       ON DELETE CASCADE,

                               CONSTRAINT fk_order_details_menu_item
                                   FOREIGN KEY (item_id)
                                       REFERENCES menu_item(uid)
                                       ON DELETE RESTRICT
);


INSERT INTO menu_item (name, price, category) VALUES
                                                  ('French Fries', 1.00, 'Appetizer'),
                                                  ('Chicken Burger', 4.05, 'Burger'),
                                                  ('Pepperoni Pizza', 8.39, 'Pizza'),
                                                  ('Milkshake', 2.20, 'Drink'),
                                                  ('Ravioli', 9.00, 'Pasta');


INSERT INTO users (username, password, email) VALUES
                                                  ('saraz', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 'sarrr@gmail.com'),
                                                  ('kave02', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 'kaviii02@gmail.com'),
                                                  ('titami_t', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 'titaza@gmil.com');


INSERT INTO orders (user_id, order_date, total_price) VALUES
                                                          (1, CURRENT_TIMESTAMP, 9.39),
                                                          (2, CURRENT_TIMESTAMP, 13.05),
                                                          (1, CURRENT_TIMESTAMP, 2.20),
                                                          (3, CURRENT_TIMESTAMP, 8.39);


INSERT INTO order_details (order_id, item_id, quantity, item_price) VALUES
                                                                        (1, 1, 1, 1.00),
                                                                        (1, 3, 1, 8.39),
                                                                        (2, 2, 1, 4.05),
                                                                        (2, 5, 1, 9.00),
                                                                        (3, 4, 1, 2.20),
                                                                        (4, 3, 1, 8.39);