Initial commit
This commit is contained in:
73
db/migrations/0001_initial.sql
Normal file
73
db/migrations/0001_initial.sql
Normal file
@@ -0,0 +1,73 @@
|
||||
-- RemoteLink initial schema
|
||||
|
||||
CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
email TEXT UNIQUE NOT NULL,
|
||||
password_hash TEXT NOT NULL,
|
||||
full_name TEXT,
|
||||
company TEXT,
|
||||
role TEXT NOT NULL DEFAULT 'user',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS machines (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
hostname TEXT,
|
||||
os TEXT,
|
||||
os_version TEXT,
|
||||
agent_version TEXT,
|
||||
ip_address TEXT,
|
||||
access_key TEXT UNIQUE NOT NULL,
|
||||
is_online BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
last_seen TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS session_codes (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
code TEXT NOT NULL,
|
||||
machine_id UUID NOT NULL REFERENCES machines(id) ON DELETE CASCADE,
|
||||
created_by UUID REFERENCES users(id) ON DELETE SET NULL,
|
||||
expires_at TIMESTAMPTZ NOT NULL,
|
||||
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
used_at TIMESTAMPTZ,
|
||||
used_by UUID REFERENCES users(id) ON DELETE SET NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sessions (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
machine_id UUID REFERENCES machines(id) ON DELETE SET NULL,
|
||||
machine_name TEXT,
|
||||
viewer_user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
||||
connection_type TEXT,
|
||||
session_code TEXT,
|
||||
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
ended_at TIMESTAMPTZ,
|
||||
duration_seconds INTEGER,
|
||||
notes TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS invites (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
token UUID UNIQUE NOT NULL DEFAULT gen_random_uuid(),
|
||||
email TEXT NOT NULL,
|
||||
created_by UUID REFERENCES users(id) ON DELETE SET NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
expires_at TIMESTAMPTZ NOT NULL DEFAULT (NOW() + INTERVAL '7 days'),
|
||||
used_at TIMESTAMPTZ,
|
||||
used_by UUID REFERENCES users(id) ON DELETE SET NULL
|
||||
);
|
||||
|
||||
-- Indexes
|
||||
CREATE INDEX IF NOT EXISTS machines_user_id_idx ON machines(user_id);
|
||||
CREATE INDEX IF NOT EXISTS machines_access_key_idx ON machines(access_key);
|
||||
CREATE INDEX IF NOT EXISTS session_codes_code_idx ON session_codes(code);
|
||||
CREATE INDEX IF NOT EXISTS session_codes_machine_id_idx ON session_codes(machine_id);
|
||||
CREATE INDEX IF NOT EXISTS sessions_viewer_user_id_idx ON sessions(viewer_user_id);
|
||||
CREATE INDEX IF NOT EXISTS invites_token_idx ON invites(token);
|
||||
Reference in New Issue
Block a user