chore: initial database schema

This commit is contained in:
MWorld Deployer 2026-09-28 22:36:31 +05:30
parent 8e84f1b11a
commit 406d23ee8d
6 changed files with 1662 additions and 23 deletions

4
backend/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
node_modules
.wrangler
dist
.env

1577
backend/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

15
backend/package.json Normal file
View File

@ -0,0 +1,15 @@
{
"name": "app-uau39m",
"type": "module",
"scripts": {
"dev": "wrangler dev"
},
"dependencies": {
"hono": "latest"
},
"devDependencies": {
"wrangler": "^4.129.0",
"typescript": "^5.0.0",
"@cloudflare/workers-types": "^4.0.0"
}
}

15
backend/tsconfig.json Normal file
View File

@ -0,0 +1,15 @@
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"lib": [
"ESNext"
],
"types": [
"@cloudflare/workers-types"
],
"strict": true,
"skipLibCheck": true
}
}

26
backend/wrangler.json Normal file
View File

@ -0,0 +1,26 @@
{
"name": "app-uau39m",
"main": "src/index.ts",
"compatibility_date": "2024-04-01",
"d1_databases": [
{
"binding": "DB",
"database_name": "db-uau39m",
"database_id": "84863008-59e2-498a-a485-f1478e1a3942"
}
],
"r2_buckets": [
{
"binding": "R2",
"bucket_name": "bucket-uau39m"
}
],
"ai": {
"binding": "AI"
},
"vars": {
"S3_ENDPOINT": "",
"BUSINESS_ID": "bi-2883eb5b-ae73-4e4c-a530-f794b53dea68Sep2026",
"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 ('customer', 'restaurant', 'delivery_agent', 'visitor')), role TEXT DEFAULT 'visitor' CHECK(role IN ('visitor', 'customer', 'restaurant', 'delivery_agent')),
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
@ -24,15 +24,6 @@ CREATE TABLE IF NOT EXISTS restaurants (
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
); );
CREATE TABLE IF NOT EXISTS delivery_agents (
user_email TEXT PRIMARY KEY,
vehicle_type TEXT,
is_available INTEGER NOT NULL DEFAULT 1,
current_latitude REAL,
current_longitude REAL,
updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_email) REFERENCES users(email) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS menu_items ( CREATE TABLE IF NOT EXISTS menu_items (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
restaurant_id TEXT NOT NULL, restaurant_id TEXT NOT NULL,
@ -77,6 +68,15 @@ 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,
@ -97,19 +97,21 @@ CREATE TABLE IF NOT EXISTS notifications (
link TEXT, link TEXT,
actor_email TEXT, actor_email TEXT,
is_read INTEGER NOT NULL DEFAULT 0, is_read INTEGER NOT NULL DEFAULT 0,
created_at TEXT DEFAULT CURRENT_TIMESTAMP, created_at TEXT NOT NULL 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) FOREIGN KEY (actor_email) REFERENCES users(email) ON DELETE SET NULL
); );
CREATE INDEX IF NOT EXISTS idx_users_username ON users(username); CREATE TABLE IF NOT EXISTS settings (
CREATE INDEX IF NOT EXISTS idx_restaurants_owner ON restaurants(owner_email); key TEXT PRIMARY KEY,
CREATE INDEX IF NOT EXISTS idx_menu_items_restaurant ON menu_items(restaurant_id); value TEXT,
CREATE INDEX IF NOT EXISTS idx_orders_customer ON orders(customer_email); updated_at TEXT DEFAULT CURRENT_TIMESTAMP
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_restaurants_owner_email ON restaurants(owner_email);
CREATE INDEX IF NOT EXISTS idx_order_items_order ON order_items(order_id); CREATE INDEX IF NOT EXISTS idx_menu_items_restaurant_id ON menu_items(restaurant_id);
CREATE INDEX IF NOT EXISTS idx_order_items_menu_item ON order_items(menu_item_id); CREATE INDEX IF NOT EXISTS idx_orders_customer_email ON orders(customer_email);
CREATE INDEX IF NOT EXISTS idx_ratings_order ON ratings(order_id); CREATE INDEX IF NOT EXISTS idx_orders_restaurant_id ON orders(restaurant_id);
CREATE INDEX IF NOT EXISTS idx_ratings_customer ON ratings(customer_email); CREATE INDEX IF NOT EXISTS idx_orders_delivery_agent_email ON orders(delivery_agent_email);
CREATE INDEX IF NOT EXISTS idx_notifications_recipient ON notifications(recipient_email, is_read, created_at); 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 UNIQUE INDEX IF NOT EXISTS idx_users_email ON users(email); CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users(email);