chore: initial database schema
This commit is contained in:
commit
2059c9d81c
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
node_modules
|
||||
dist
|
||||
.wrangler
|
||||
.env
|
||||
.next
|
||||
133
database/01_init.sql
Normal file
133
database/01_init.sql
Normal file
@ -0,0 +1,133 @@
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id TEXT PRIMARY KEY,
|
||||
email TEXT NOT NULL UNIQUE,
|
||||
full_name TEXT,
|
||||
role TEXT NOT NULL DEFAULT 'passenger',
|
||||
username TEXT UNIQUE,
|
||||
mauth_token TEXT,
|
||||
phone TEXT,
|
||||
citizen_id TEXT,
|
||||
is_banned INTEGER DEFAULT 0,
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS companion_safety_profiles (
|
||||
user_email TEXT PRIMARY KEY,
|
||||
persona_label TEXT NOT NULL,
|
||||
safety_consent INTEGER NOT NULL DEFAULT 0,
|
||||
background_check_status TEXT NOT NULL DEFAULT 'not_started',
|
||||
reviewed_at TEXT,
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_email) REFERENCES users(email)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS companion_circles (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
cadence TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'forming',
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS companion_circle_members (
|
||||
circle_id TEXT NOT NULL,
|
||||
user_email TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'invited',
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (circle_id, user_email),
|
||||
FOREIGN KEY (circle_id) REFERENCES companion_circles(id),
|
||||
FOREIGN KEY (user_email) REFERENCES users(email)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS companion_activities (
|
||||
id TEXT PRIMARY KEY,
|
||||
circle_id TEXT NOT NULL,
|
||||
created_by_email TEXT NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
description TEXT,
|
||||
location_label TEXT NOT NULL,
|
||||
starts_at TEXT NOT NULL,
|
||||
max_attendees INTEGER,
|
||||
status TEXT NOT NULL DEFAULT 'planned',
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (circle_id) REFERENCES companion_circles(id),
|
||||
FOREIGN KEY (created_by_email) REFERENCES users(email)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS companion_activity_rsvps (
|
||||
activity_id TEXT NOT NULL,
|
||||
user_email TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'going',
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (activity_id, user_email),
|
||||
FOREIGN KEY (activity_id) REFERENCES companion_activities(id),
|
||||
FOREIGN KEY (user_email) REFERENCES users(email)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS driver_profiles (
|
||||
id TEXT PRIMARY KEY,
|
||||
user_email TEXT NOT NULL UNIQUE,
|
||||
vehicle_make TEXT NOT NULL,
|
||||
vehicle_model TEXT NOT NULL,
|
||||
license_plate TEXT NOT NULL,
|
||||
vehicle_color TEXT NOT NULL,
|
||||
is_available INTEGER NOT NULL DEFAULT 0,
|
||||
current_lat REAL,
|
||||
current_lng REAL,
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_email) REFERENCES users(email)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS rides (
|
||||
id TEXT PRIMARY KEY,
|
||||
passenger_email TEXT NOT NULL,
|
||||
driver_email TEXT,
|
||||
pickup_location TEXT NOT NULL,
|
||||
pickup_lat REAL NOT NULL,
|
||||
pickup_lng REAL NOT NULL,
|
||||
destination_location TEXT NOT NULL,
|
||||
destination_lat REAL NOT NULL,
|
||||
destination_lng REAL NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'requested',
|
||||
driver_lat REAL,
|
||||
driver_lng REAL,
|
||||
rating INTEGER,
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (passenger_email) REFERENCES users(email),
|
||||
FOREIGN KEY (driver_email) REFERENCES users(email)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS orders (
|
||||
order_id TEXT PRIMARY KEY,
|
||||
user_email TEXT NOT NULL,
|
||||
amount REAL NOT NULL,
|
||||
currency TEXT NOT NULL DEFAULT 'INR',
|
||||
status TEXT NOT NULL DEFAULT 'PENDING',
|
||||
payment_session_id TEXT NOT NULL,
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_email) REFERENCES users(email)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS notifications (
|
||||
id TEXT PRIMARY KEY,
|
||||
recipient_email TEXT NOT NULL,
|
||||
type TEXT NOT NULL DEFAULT 'info',
|
||||
title TEXT NOT NULL,
|
||||
body TEXT,
|
||||
link TEXT,
|
||||
actor_email TEXT,
|
||||
is_read INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (recipient_email) REFERENCES users(email),
|
||||
FOREIGN KEY (actor_email) REFERENCES users(email)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
|
||||
CREATE INDEX IF NOT EXISTS idx_companion_circle_members_user ON companion_circle_members(user_email);
|
||||
CREATE INDEX IF NOT EXISTS idx_companion_activities_circle ON companion_activities(circle_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_companion_activity_rsvps_user ON companion_activity_rsvps(user_email);
|
||||
CREATE INDEX IF NOT EXISTS idx_driver_profiles_user ON driver_profiles(user_email);
|
||||
CREATE INDEX IF NOT EXISTS idx_rides_passenger ON rides(passenger_email);
|
||||
CREATE INDEX IF NOT EXISTS idx_rides_driver ON rides(driver_email);
|
||||
CREATE INDEX IF NOT EXISTS idx_orders_user ON orders(user_email);
|
||||
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);
|
||||
Loading…
Reference in New Issue
Block a user