53 lines
1.8 KiB
SQL
53 lines
1.8 KiB
SQL
CREATE TABLE users (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
preferred_chat TEXT NOT NULL DEFAULT 'telegram',
|
|
language TEXT NOT NULL DEFAULT 'en',
|
|
timezone TEXT NOT NULL DEFAULT 'UTC'
|
|
);
|
|
|
|
CREATE TABLE chats (
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
platform TEXT NOT NULL,
|
|
identifier TEXT NOT NULL,
|
|
PRIMARY KEY (user_id, platform)
|
|
);
|
|
|
|
CREATE TABLE metadata (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
value TEXT NOT NULL
|
|
);
|
|
|
|
CREATE INDEX idx_metadata_user_id ON metadata(user_id);
|
|
CREATE INDEX idx_metadata_created_at ON metadata(created_at);
|
|
|
|
CREATE TABLE contacts (
|
|
owner_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
target_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
name TEXT NOT NULL,
|
|
PRIMARY KEY (owner_id, target_id)
|
|
);
|
|
|
|
CREATE INDEX idx_contacts_owner_id ON contacts(owner_id);
|
|
|
|
CREATE TABLE notifications (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
scheduled_at TIMESTAMPTZ NOT NULL,
|
|
content TEXT NOT NULL
|
|
);
|
|
|
|
CREATE INDEX idx_notifications_scheduled_at ON notifications(scheduled_at);
|
|
CREATE INDEX idx_notifications_user_id ON notifications(user_id);
|
|
|
|
CREATE TABLE actions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
type TEXT NOT NULL CHECK (type IN ('user_msg', 'jules_msg', 'call', 'ping_contact')),
|
|
content TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_actions_user_id ON actions(user_id);
|
|
CREATE INDEX idx_actions_created_at ON actions(created_at); |