feat: add attachment storage bindings and schema
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
81
migrations/0001_initial.sql
Normal file
81
migrations/0001_initial.sql
Normal 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);
|
||||
Reference in New Issue
Block a user