chat-dev / server /postgresSchema.js
incognitolm
step 4
3c52eb9
export const APP_SCHEMA_NAME = process.env.POSTGRES_APP_SCHEMA || 'inferenceport_backend';
export const POSTGRES_SCHEMA_SQL = `
CREATE TABLE IF NOT EXISTS app_versions (
public_url_lookup text PRIMARY KEY,
updated_at timestamptz NOT NULL,
payload jsonb NOT NULL
);
CREATE TABLE IF NOT EXISTS guest_state (
owner_lookup text PRIMARY KEY,
expires_at timestamptz,
updated_at timestamptz NOT NULL,
payload jsonb NOT NULL
);
CREATE TABLE IF NOT EXISTS chat_sessions (
id text PRIMARY KEY,
scope_type text NOT NULL,
owner_lookup text NOT NULL,
created_at timestamptz NOT NULL,
updated_at timestamptz NOT NULL,
expires_at timestamptz,
payload jsonb NOT NULL
);
CREATE INDEX IF NOT EXISTS chat_sessions_owner_idx
ON chat_sessions (owner_lookup, updated_at DESC);
CREATE INDEX IF NOT EXISTS chat_sessions_expires_idx
ON chat_sessions (expires_at)
WHERE expires_at IS NOT NULL;
CREATE TABLE IF NOT EXISTS session_shares (
id text PRIMARY KEY,
token_lookup text NOT NULL UNIQUE,
owner_lookup text NOT NULL,
created_at timestamptz NOT NULL,
payload jsonb NOT NULL
);
CREATE INDEX IF NOT EXISTS session_shares_owner_idx
ON session_shares (owner_lookup, created_at DESC);
CREATE TABLE IF NOT EXISTS deleted_chats (
id text PRIMARY KEY,
owner_lookup text NOT NULL,
purge_at timestamptz,
deleted_at timestamptz NOT NULL,
payload jsonb NOT NULL
);
CREATE INDEX IF NOT EXISTS deleted_chats_owner_idx
ON deleted_chats (owner_lookup, deleted_at DESC);
CREATE INDEX IF NOT EXISTS deleted_chats_purge_idx
ON deleted_chats (purge_at)
WHERE purge_at IS NOT NULL;
CREATE TABLE IF NOT EXISTS memories (
id text PRIMARY KEY,
owner_lookup text NOT NULL,
created_at timestamptz NOT NULL,
updated_at timestamptz NOT NULL,
payload jsonb NOT NULL
);
CREATE INDEX IF NOT EXISTS memories_owner_idx
ON memories (owner_lookup, updated_at DESC);
CREATE TABLE IF NOT EXISTS media_entries (
id text PRIMARY KEY,
owner_lookup text NOT NULL,
parent_id text,
entry_type text NOT NULL,
updated_at timestamptz NOT NULL,
created_at timestamptz NOT NULL,
trashed_at timestamptz,
purge_at timestamptz,
expires_at timestamptz,
size_bytes bigint NOT NULL DEFAULT 0,
payload jsonb NOT NULL
);
CREATE INDEX IF NOT EXISTS media_entries_owner_idx
ON media_entries (owner_lookup, updated_at DESC);
CREATE INDEX IF NOT EXISTS media_entries_parent_idx
ON media_entries (owner_lookup, parent_id);
CREATE INDEX IF NOT EXISTS media_entries_purge_idx
ON media_entries (purge_at)
WHERE purge_at IS NOT NULL;
CREATE INDEX IF NOT EXISTS media_entries_expires_idx
ON media_entries (expires_at)
WHERE expires_at IS NOT NULL;
CREATE TABLE IF NOT EXISTS media_blobs (
entry_id text PRIMARY KEY REFERENCES media_entries(id) ON DELETE CASCADE,
updated_at timestamptz NOT NULL,
payload bytea NOT NULL
);
CREATE TABLE IF NOT EXISTS system_prompts (
owner_lookup text PRIMARY KEY,
updated_at timestamptz NOT NULL,
payload jsonb NOT NULL
);
CREATE TABLE IF NOT EXISTS feedback_tickets (
id text PRIMARY KEY,
status text NOT NULL,
submitted_at timestamptz NOT NULL,
payload jsonb NOT NULL
);
CREATE INDEX IF NOT EXISTS feedback_tickets_status_idx
ON feedback_tickets (status, submitted_at DESC);
CREATE TABLE IF NOT EXISTS guest_request_counters (
key_lookup text PRIMARY KEY,
expires_at timestamptz NOT NULL,
updated_at timestamptz NOT NULL,
payload jsonb NOT NULL
);
CREATE INDEX IF NOT EXISTS guest_request_counters_expires_idx
ON guest_request_counters (expires_at);
CREATE TABLE IF NOT EXISTS web_search_usage (
key_lookup text NOT NULL,
day_key text NOT NULL,
updated_at timestamptz NOT NULL,
payload jsonb NOT NULL,
PRIMARY KEY (key_lookup, day_key)
);
CREATE TABLE IF NOT EXISTS user_settings (
owner_lookup text PRIMARY KEY,
updated_at timestamptz NOT NULL,
payload jsonb NOT NULL
);
CREATE TABLE IF NOT EXISTS user_profiles (
owner_lookup text PRIMARY KEY,
username_lookup text UNIQUE,
updated_at timestamptz NOT NULL,
payload jsonb NOT NULL
);
CREATE TABLE IF NOT EXISTS device_sessions (
token_lookup text PRIMARY KEY,
user_lookup text NOT NULL,
active boolean NOT NULL,
created_at timestamptz NOT NULL,
last_seen_at timestamptz NOT NULL,
payload jsonb NOT NULL
);
CREATE INDEX IF NOT EXISTS device_sessions_user_idx
ON device_sessions (user_lookup, active, last_seen_at DESC);
`;