feat: add document versioning and list API
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
BEGIN;
|
||||
|
||||
ALTER TABLE leaudit_documents
|
||||
ADD COLUMN IF NOT EXISTS version_group_key VARCHAR(64),
|
||||
ADD COLUMN IF NOT EXISTS version_no INTEGER NOT NULL DEFAULT 1,
|
||||
ADD COLUMN IF NOT EXISTS previous_version_id BIGINT,
|
||||
ADD COLUMN IF NOT EXISTS root_version_id BIGINT,
|
||||
ADD COLUMN IF NOT EXISTS is_latest_version BOOLEAN NOT NULL DEFAULT true,
|
||||
ADD COLUMN IF NOT EXISTS normalized_name VARCHAR(512);
|
||||
|
||||
COMMENT ON COLUMN leaudit_documents.biz_document_id IS '平台内部追踪号(兼容旧字段名)';
|
||||
COMMENT ON COLUMN leaudit_documents.version_group_key IS '文档版本归档组键,同一名称版本链共用';
|
||||
COMMENT ON COLUMN leaudit_documents.version_no IS '同一文档系列中的版本号,从 1 开始';
|
||||
COMMENT ON COLUMN leaudit_documents.previous_version_id IS '上一版本文档ID';
|
||||
COMMENT ON COLUMN leaudit_documents.root_version_id IS '首版本文档ID';
|
||||
COMMENT ON COLUMN leaudit_documents.is_latest_version IS '是否当前最新版本';
|
||||
COMMENT ON COLUMN leaudit_documents.normalized_name IS '归一化文件名(不含扩展名),用于版本匹配';
|
||||
|
||||
UPDATE leaudit_documents d
|
||||
SET
|
||||
version_group_key = COALESCE(d.version_group_key, 'legacy-' || d.id::text),
|
||||
version_no = COALESCE(d.version_no, 1),
|
||||
root_version_id = COALESCE(d.root_version_id, d.id),
|
||||
is_latest_version = COALESCE(d.is_latest_version, true),
|
||||
normalized_name = COALESCE(
|
||||
d.normalized_name,
|
||||
NULLIF(
|
||||
trim(
|
||||
regexp_replace(
|
||||
lower(
|
||||
regexp_replace(
|
||||
regexp_replace(
|
||||
COALESCE(
|
||||
(
|
||||
SELECT f.file_name
|
||||
FROM leaudit_document_files f
|
||||
WHERE f.document_id = d.id
|
||||
ORDER BY f.is_active DESC, f.id DESC
|
||||
LIMIT 1
|
||||
),
|
||||
''
|
||||
),
|
||||
'\.[^.]+$',
|
||||
'',
|
||||
''
|
||||
),
|
||||
'[[:space:]_-]+',
|
||||
' ',
|
||||
'g'
|
||||
)
|
||||
),
|
||||
'(?:\(|()\d+(?:\)|))$|(?:[-_\s]*副本|[-_\s]*copy)$',
|
||||
'',
|
||||
'g'
|
||||
)
|
||||
),
|
||||
''
|
||||
)
|
||||
)
|
||||
WHERE d.version_group_key IS NULL
|
||||
OR d.root_version_id IS NULL
|
||||
OR d.normalized_name IS NULL;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_leaudit_documents_version_group
|
||||
ON leaudit_documents(version_group_key);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_leaudit_documents_name_match
|
||||
ON leaudit_documents(type_id, region, normalized_name, is_latest_version)
|
||||
WHERE deleted_at IS NULL;
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_leaudit_documents_latest_version_group
|
||||
ON leaudit_documents(version_group_key)
|
||||
WHERE is_latest_version = true AND deleted_at IS NULL;
|
||||
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user