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);
|
||||
10
src/env.ts
Normal file
10
src/env.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
export interface FetcherLike {
|
||||
fetch(request: Request): Promise<Response>;
|
||||
}
|
||||
|
||||
export interface Env {
|
||||
AUTH: FetcherLike;
|
||||
DB: D1Database;
|
||||
ATTACHMENTS: R2Bucket;
|
||||
MAX_UPLOAD_BYTES?: string;
|
||||
}
|
||||
40
wrangler.jsonc
Normal file
40
wrangler.jsonc
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"$schema": "node_modules/wrangler/config-schema.json",
|
||||
"name": "cfw-attachment",
|
||||
"main": "src/index.ts",
|
||||
"account_id": "67720b647ff2b55cf37ba3ef9e677083",
|
||||
"compatibility_date": "2026-06-10",
|
||||
"compatibility_flags": ["nodejs_compat"],
|
||||
"routes": [
|
||||
{
|
||||
"pattern": "cfw-attachment.bowong.cc",
|
||||
"custom_domain": true
|
||||
}
|
||||
],
|
||||
"observability": {
|
||||
"enabled": true,
|
||||
"head_sampling_rate": 0.1
|
||||
},
|
||||
"services": [
|
||||
{
|
||||
"binding": "AUTH",
|
||||
"service": "cfw-auth"
|
||||
}
|
||||
],
|
||||
"d1_databases": [
|
||||
{
|
||||
"binding": "DB",
|
||||
"database_name": "cfw-attachment",
|
||||
"database_id": "f8516e33-2902-423c-9a2d-df9974154cda"
|
||||
}
|
||||
],
|
||||
"r2_buckets": [
|
||||
{
|
||||
"binding": "ATTACHMENTS",
|
||||
"bucket_name": "cfw-attachment"
|
||||
}
|
||||
],
|
||||
"vars": {
|
||||
"MAX_UPLOAD_BYTES": "52428800"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user