chore: initial database schema
This commit is contained in:
parent
8e84f1b11a
commit
406d23ee8d
4
backend/.gitignore
vendored
Normal file
4
backend/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
node_modules
|
||||||
|
.wrangler
|
||||||
|
dist
|
||||||
|
.env
|
||||||
1577
backend/package-lock.json
generated
Normal file
1577
backend/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
15
backend/package.json
Normal file
15
backend/package.json
Normal 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
15
backend/tsconfig.json
Normal 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
26
backend/wrangler.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user