Files
jules/db/postgres/migrations/0001_init.up.sql
T

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);