From 33f107374eb2df4362e069cb6fb8c4be677da927 Mon Sep 17 00:00:00 2001 From: MWorld Deployer Date: Mon, 28 Sep 2026 22:45:48 +0530 Subject: [PATCH] chore: initial database schema --- backend/wrangler.json | 1 + database/01_init.sql | 55 +++++++++++++++++++++---------------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/backend/wrangler.json b/backend/wrangler.json index c80bcfb..5ef82d2 100644 --- a/backend/wrangler.json +++ b/backend/wrangler.json @@ -20,6 +20,7 @@ }, "vars": { "S3_ENDPOINT": "", + "OSRM_URL": "https://router.project-osrm.org", "BUSINESS_ID": "bi-2883eb5b-ae73-4e4c-a530-f794b53dea68Sep2026", "SITE_ID": "uau39m" } diff --git a/database/01_init.sql b/database/01_init.sql index 3790d68..7b98435 100644 --- a/database/01_init.sql +++ b/database/01_init.sql @@ -5,7 +5,7 @@ CREATE TABLE IF NOT EXISTS users ( phone TEXT, citizen_id TEXT, mauth_token TEXT, - role TEXT DEFAULT 'visitor' CHECK(role IN ('visitor', 'customer', 'restaurant', 'delivery_agent')), + role TEXT DEFAULT 'visitor', is_banned INTEGER DEFAULT 0, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP @@ -19,7 +19,7 @@ CREATE TABLE IF NOT EXISTS restaurants ( latitude REAL NOT NULL, longitude REAL NOT NULL, image_url TEXT, - status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'closed')), + status TEXT DEFAULT 'active', created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (owner_email) REFERENCES users(email) ON DELETE CASCADE @@ -34,11 +34,20 @@ CREATE TABLE IF NOT EXISTS menu_items ( recipe TEXT, price REAL NOT NULL, image_url TEXT, - is_available INTEGER NOT NULL DEFAULT 1, + is_available INTEGER DEFAULT 1, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (restaurant_id) REFERENCES restaurants(id) ON DELETE CASCADE ); +CREATE TABLE IF NOT EXISTS delivery_agents ( + user_email TEXT PRIMARY KEY, + vehicle_type TEXT, + current_latitude REAL, + current_longitude REAL, + is_available INTEGER DEFAULT 1, + updated_at TEXT DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_email) REFERENCES users(email) ON DELETE CASCADE +); CREATE TABLE IF NOT EXISTS orders ( id TEXT PRIMARY KEY, customer_email TEXT NOT NULL, @@ -50,7 +59,7 @@ CREATE TABLE IF NOT EXISTS orders ( subtotal REAL NOT NULL, delivery_fee REAL NOT NULL, total_amount REAL NOT NULL, - status TEXT NOT NULL DEFAULT 'placed' CHECK(status IN ('placed', 'accepted', 'preparing', 'ready_for_pickup', 'assigned', 'picked_up', 'delivered', 'cancelled')), + status TEXT DEFAULT 'placed', created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (customer_email) REFERENCES users(email), @@ -68,21 +77,12 @@ CREATE TABLE IF NOT EXISTS order_items ( FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE, FOREIGN KEY (menu_item_id) REFERENCES menu_items(id) ); -CREATE TABLE IF NOT EXISTS delivery_agents ( - user_email TEXT PRIMARY KEY, - vehicle_type TEXT, - current_latitude REAL, - current_longitude REAL, - is_available INTEGER NOT NULL DEFAULT 1, - updated_at TEXT DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (user_email) REFERENCES users(email) ON DELETE CASCADE -); CREATE TABLE IF NOT EXISTS ratings ( id TEXT PRIMARY KEY, order_id TEXT NOT NULL, customer_email TEXT NOT NULL, - restaurant_rating INTEGER NOT NULL CHECK(restaurant_rating BETWEEN 1 AND 5), - driver_rating INTEGER CHECK(driver_rating BETWEEN 1 AND 5), + restaurant_rating INTEGER NOT NULL, + driver_rating INTEGER, comment TEXT, created_at TEXT DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (order_id) REFERENCES orders(id), @@ -91,27 +91,26 @@ CREATE TABLE IF NOT EXISTS ratings ( CREATE TABLE IF NOT EXISTS notifications ( id TEXT PRIMARY KEY, recipient_email TEXT NOT NULL, - type TEXT NOT NULL DEFAULT 'info' CHECK(type IN ('info', 'success', 'warning', 'mention', 'system')), + type TEXT DEFAULT 'info', title TEXT NOT NULL, body TEXT, link TEXT, actor_email TEXT, - is_read INTEGER NOT NULL DEFAULT 0, - created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (recipient_email) REFERENCES users(email) ON DELETE CASCADE, - FOREIGN KEY (actor_email) REFERENCES users(email) ON DELETE SET NULL + is_read INTEGER DEFAULT 0, + created_at TEXT DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (recipient_email) REFERENCES users(email) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS settings ( key TEXT PRIMARY KEY, value TEXT, updated_at TEXT DEFAULT CURRENT_TIMESTAMP ); -CREATE INDEX IF NOT EXISTS idx_restaurants_owner_email ON restaurants(owner_email); -CREATE INDEX IF NOT EXISTS idx_menu_items_restaurant_id ON menu_items(restaurant_id); -CREATE INDEX IF NOT EXISTS idx_orders_customer_email ON orders(customer_email); -CREATE INDEX IF NOT EXISTS idx_orders_restaurant_id ON orders(restaurant_id); -CREATE INDEX IF NOT EXISTS idx_orders_delivery_agent_email ON orders(delivery_agent_email); -CREATE INDEX IF NOT EXISTS idx_order_items_order_id ON order_items(order_id); -CREATE INDEX IF NOT EXISTS idx_ratings_order_id ON ratings(order_id); -CREATE INDEX IF NOT EXISTS idx_notifications_recipient ON notifications(recipient_email, is_read); +CREATE INDEX IF NOT EXISTS idx_restaurants_owner ON restaurants(owner_email); +CREATE INDEX IF NOT EXISTS idx_menu_items_restaurant ON menu_items(restaurant_id); +CREATE INDEX IF NOT EXISTS idx_orders_customer ON orders(customer_email); +CREATE INDEX IF NOT EXISTS idx_orders_restaurant ON orders(restaurant_id); +CREATE INDEX IF NOT EXISTS idx_orders_delivery_agent ON orders(delivery_agent_email); +CREATE INDEX IF NOT EXISTS idx_order_items_order ON order_items(order_id); +CREATE INDEX IF NOT EXISTS idx_ratings_order ON ratings(order_id); +CREATE INDEX IF NOT EXISTS idx_notifications_recipient ON notifications(recipient_email); CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users(email);