feat: add attachment storage bindings and schema

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Claude
2026-07-02 07:33:38 -07:00
parent faaa66490b
commit fb7afb69f3
3 changed files with 131 additions and 0 deletions

View File

@@ -0,0 +1,81 @@
-- cfw-attachment 初始 schema附件、分类、标签、业务关联、审计
CREATE TABLE attachments (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
status TEXT NOT NULL,
filename TEXT NOT NULL,
content_type TEXT NOT NULL,
byte_size INTEGER,
checksum_sha256 TEXT,
visibility TEXT NOT NULL DEFAULT 'private',
category_id TEXT,
description TEXT,
object_key TEXT,
etag TEXT,
created_by_user_id TEXT NOT NULL,
updated_by_user_id TEXT NOT NULL,
deleted_by_user_id TEXT,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
deleted_at TEXT
);
CREATE TABLE attachment_categories (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
name TEXT NOT NULL,
slug TEXT NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
UNIQUE(user_id, slug)
);
CREATE TABLE attachment_tags (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
name TEXT NOT NULL,
slug TEXT NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
UNIQUE(user_id, slug)
);
CREATE TABLE attachment_tag_links (
attachment_id TEXT NOT NULL,
tag_id TEXT NOT NULL,
user_id TEXT NOT NULL,
created_at TEXT NOT NULL,
PRIMARY KEY (attachment_id, tag_id),
FOREIGN KEY (attachment_id) REFERENCES attachments(id),
FOREIGN KEY (tag_id) REFERENCES attachment_tags(id)
);
CREATE TABLE attachment_links (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
attachment_id TEXT NOT NULL,
owner_type TEXT NOT NULL,
owner_id TEXT NOT NULL,
purpose TEXT NOT NULL,
sort_order INTEGER NOT NULL DEFAULT 0,
created_by_user_id TEXT NOT NULL,
created_at TEXT NOT NULL,
UNIQUE(user_id, owner_type, owner_id, purpose, attachment_id)
);
CREATE TABLE attachment_audit_events (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
attachment_id TEXT,
actor_user_id TEXT NOT NULL,
action TEXT NOT NULL,
detail_json TEXT NOT NULL,
created_at TEXT NOT NULL
);
CREATE INDEX idx_attachments_user_status ON attachments(user_id, status, created_at);
CREATE INDEX idx_attachments_user_category ON attachments(user_id, category_id, created_at);
CREATE INDEX idx_attachment_tags_user_slug ON attachment_tags(user_id, slug);
CREATE INDEX idx_attachment_tag_links_tag ON attachment_tag_links(user_id, tag_id);
CREATE INDEX idx_attachment_links_owner ON attachment_links(user_id, owner_type, owner_id, purpose);
CREATE INDEX idx_attachment_audit_user_attachment ON attachment_audit_events(user_id, attachment_id, created_at);