chore: initial database schema

This commit is contained in:
MWorld Deployer 2026-09-28 22:45:48 +05:30
parent 406d23ee8d
commit 33f107374e
2 changed files with 28 additions and 28 deletions

View File

@ -20,6 +20,7 @@
}, },
"vars": { "vars": {
"S3_ENDPOINT": "", "S3_ENDPOINT": "",
"OSRM_URL": "https://router.project-osrm.org",
"BUSINESS_ID": "bi-2883eb5b-ae73-4e4c-a530-f794b53dea68Sep2026", "BUSINESS_ID": "bi-2883eb5b-ae73-4e4c-a530-f794b53dea68Sep2026",
"SITE_ID": "uau39m" "SITE_ID": "uau39m"
} }

View File

@ -5,7 +5,7 @@ CREATE TABLE IF NOT EXISTS users (
phone TEXT, phone TEXT,
citizen_id TEXT, citizen_id TEXT,
mauth_token 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, is_banned INTEGER DEFAULT 0,
created_at TEXT DEFAULT CURRENT_TIMESTAMP, created_at TEXT DEFAULT CURRENT_TIMESTAMP,
updated_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, latitude REAL NOT NULL,
longitude REAL NOT NULL, longitude REAL NOT NULL,
image_url TEXT, image_url TEXT,
status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'closed')), status TEXT DEFAULT 'active',
created_at TEXT DEFAULT CURRENT_TIMESTAMP, created_at TEXT DEFAULT CURRENT_TIMESTAMP,
updated_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (owner_email) REFERENCES users(email) ON DELETE CASCADE FOREIGN KEY (owner_email) REFERENCES users(email) ON DELETE CASCADE
@ -34,11 +34,20 @@ CREATE TABLE IF NOT EXISTS menu_items (
recipe TEXT, recipe TEXT,
price REAL NOT NULL, price REAL NOT NULL,
image_url TEXT, image_url TEXT,
is_available INTEGER NOT NULL DEFAULT 1, is_available INTEGER DEFAULT 1,
created_at TEXT DEFAULT CURRENT_TIMESTAMP, created_at TEXT DEFAULT CURRENT_TIMESTAMP,
updated_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (restaurant_id) REFERENCES restaurants(id) ON DELETE CASCADE 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 ( CREATE TABLE IF NOT EXISTS orders (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
customer_email TEXT NOT NULL, customer_email TEXT NOT NULL,
@ -50,7 +59,7 @@ CREATE TABLE IF NOT EXISTS orders (
subtotal REAL NOT NULL, subtotal REAL NOT NULL,
delivery_fee REAL NOT NULL, delivery_fee REAL NOT NULL,
total_amount 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, created_at TEXT DEFAULT CURRENT_TIMESTAMP,
updated_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (customer_email) REFERENCES users(email), 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 (order_id) REFERENCES orders(id) ON DELETE CASCADE,
FOREIGN KEY (menu_item_id) REFERENCES menu_items(id) 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 ( CREATE TABLE IF NOT EXISTS ratings (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
order_id TEXT NOT NULL, order_id TEXT NOT NULL,
customer_email TEXT NOT NULL, customer_email TEXT NOT NULL,
restaurant_rating INTEGER NOT NULL CHECK(restaurant_rating BETWEEN 1 AND 5), restaurant_rating INTEGER NOT NULL,
driver_rating INTEGER CHECK(driver_rating BETWEEN 1 AND 5), driver_rating INTEGER,
comment TEXT, comment TEXT,
created_at TEXT DEFAULT CURRENT_TIMESTAMP, created_at TEXT DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (order_id) REFERENCES orders(id), FOREIGN KEY (order_id) REFERENCES orders(id),
@ -91,27 +91,26 @@ CREATE TABLE IF NOT EXISTS ratings (
CREATE TABLE IF NOT EXISTS notifications ( CREATE TABLE IF NOT EXISTS notifications (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
recipient_email TEXT NOT NULL, 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, title TEXT NOT NULL,
body TEXT, body TEXT,
link TEXT, link TEXT,
actor_email TEXT, actor_email TEXT,
is_read INTEGER NOT NULL DEFAULT 0, is_read INTEGER DEFAULT 0,
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at TEXT DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (recipient_email) REFERENCES users(email) ON DELETE CASCADE, FOREIGN KEY (recipient_email) REFERENCES users(email) ON DELETE CASCADE
FOREIGN KEY (actor_email) REFERENCES users(email) ON DELETE SET NULL
); );
CREATE TABLE IF NOT EXISTS settings ( CREATE TABLE IF NOT EXISTS settings (
key TEXT PRIMARY KEY, key TEXT PRIMARY KEY,
value TEXT, value TEXT,
updated_at TEXT DEFAULT CURRENT_TIMESTAMP 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_restaurants_owner 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_menu_items_restaurant 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_customer ON orders(customer_email);
CREATE INDEX IF NOT EXISTS idx_orders_restaurant_id ON orders(restaurant_id); CREATE INDEX IF NOT EXISTS idx_orders_restaurant 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_orders_delivery_agent 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_order_items_order ON order_items(order_id);
CREATE INDEX IF NOT EXISTS idx_ratings_order_id ON ratings(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, is_read); CREATE INDEX IF NOT EXISTS idx_notifications_recipient ON notifications(recipient_email);
CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users(email); CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users(email);