feat: add sharing endpoints — share, link, revoke, public access
This commit is contained in:
49
crates/adapters/postgres/migrations/006_sharing.sql
Normal file
49
crates/adapters/postgres/migrations/006_sharing.sql
Normal file
@@ -0,0 +1,49 @@
|
||||
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 '{}'
|
||||
);
|
||||
Reference in New Issue
Block a user