50 lines
1.7 KiB
SQL
50 lines
1.7 KiB
SQL
CREATE TABLE share_scopes (
|
|
scope_id UUID PRIMARY KEY,
|
|
scope_type TEXT NOT NULL,
|
|
shareable_type TEXT NOT NULL,
|
|
shareable_id UUID NOT NULL,
|
|
created_by_user_id UUID NOT NULL REFERENCES users(id),
|
|
expires_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_share_scopes_shareable ON share_scopes(shareable_id);
|
|
|
|
CREATE TABLE share_targets (
|
|
scope_id UUID NOT NULL REFERENCES share_scopes(scope_id) ON DELETE CASCADE,
|
|
target_type TEXT NOT NULL,
|
|
target_id UUID NOT NULL,
|
|
role_id UUID NOT NULL,
|
|
PRIMARY KEY (scope_id, target_id)
|
|
);
|
|
|
|
CREATE TABLE share_links (
|
|
scope_id UUID NOT NULL REFERENCES share_scopes(scope_id) ON DELETE CASCADE,
|
|
token TEXT UNIQUE NOT NULL,
|
|
expires_at TIMESTAMPTZ,
|
|
access_level TEXT NOT NULL DEFAULT 'view_only',
|
|
is_active BOOLEAN NOT NULL DEFAULT true,
|
|
max_uses INTEGER,
|
|
use_count INTEGER NOT NULL DEFAULT 0,
|
|
PRIMARY KEY (scope_id)
|
|
);
|
|
|
|
CREATE INDEX idx_share_links_token ON share_links(token);
|
|
|
|
CREATE TABLE invite_codes (
|
|
code_id UUID PRIMARY KEY,
|
|
scope_id UUID NOT NULL REFERENCES share_scopes(scope_id) ON DELETE CASCADE,
|
|
created_by_user_id UUID NOT NULL REFERENCES users(id),
|
|
expires_at TIMESTAMPTZ,
|
|
max_uses INTEGER,
|
|
use_count INTEGER NOT NULL DEFAULT 0,
|
|
assigned_role_id UUID NOT NULL
|
|
);
|
|
|
|
CREATE TABLE visibility_filters (
|
|
filter_id UUID PRIMARY KEY,
|
|
scope_id UUID NOT NULL REFERENCES share_scopes(scope_id) ON DELETE CASCADE,
|
|
role_id UUID NOT NULL,
|
|
hidden_fields TEXT[] NOT NULL DEFAULT '{}'
|
|
);
|