134 lines
4.8 KiB
SQL
134 lines
4.8 KiB
SQL
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);
|