docs: complete documentation system (250+ files)

- System architecture and design documentation
- Business module docs (ASL/AIA/PKB/RVW/DC/SSA/ST)
- ASL module complete design (quality assurance, tech selection)
- Platform layer and common capabilities docs
- Development standards and API specifications
- Deployment and operations guides
- Project management and milestone tracking
- Architecture implementation reports
- Documentation templates and guides
This commit is contained in:
2025-11-16 15:43:55 +08:00
parent 0fe6821a89
commit e52020409c
173 changed files with 46227 additions and 11964 deletions

View File

@@ -0,0 +1,544 @@
-- ========================================
-- 005-validate-all.sql
-- ========================================
-- 目的全局验证10个Schema和数据迁移的完整性
-- 预计时间10分钟
-- 作者AI助手
-- 日期2025-11-09
-- ========================================
-- 前置条件:
-- 1. 已执行 001-create-all-10-schemas.sql
-- 2. 已执行 002-migrate-platform.sql
-- 3. 已执行 003-migrate-aia.sql
-- 4. 已执行 004-migrate-pkb.sql
-- ========================================
-- 第一部分Schema完整性验证
-- ========================================
\echo '========================================';
\echo '第一部分Schema完整性验证';
\echo '========================================';
SELECT
'Schema检查' AS check_type,
nspname AS schema_name,
CASE
WHEN nspname IN ('platform_schema', 'aia_schema', 'pkb_schema',
'asl_schema', 'common_schema', 'dc_schema',
'rvw_schema', 'admin_schema', 'ssa_schema', 'st_schema')
THEN '✅ 存在'
ELSE '❌ 不存在'
END AS status,
pg_catalog.obj_description(oid, 'pg_namespace') AS description
FROM pg_namespace
WHERE nspname IN (
'platform_schema', 'aia_schema', 'pkb_schema',
'asl_schema', 'common_schema', 'dc_schema',
'rvw_schema', 'admin_schema', 'ssa_schema', 'st_schema'
)
ORDER BY nspname;
-- 统计Schema数量
DO $$
DECLARE
schema_count INTEGER;
BEGIN
SELECT COUNT(*) INTO schema_count
FROM pg_namespace
WHERE nspname IN (
'platform_schema', 'aia_schema', 'pkb_schema',
'asl_schema', 'common_schema', 'dc_schema',
'rvw_schema', 'admin_schema', 'ssa_schema', 'st_schema'
);
RAISE NOTICE '========================================';
IF schema_count = 10 THEN
RAISE NOTICE '✅ Schema完整性检查通过10个Schema全部创建成功';
ELSE
RAISE WARNING '❌ Schema完整性检查失败预期10个实际%个', schema_count;
END IF;
RAISE NOTICE '========================================';
END $$;
-- ========================================
-- 第二部分:表结构验证
-- ========================================
\echo '';
\echo '========================================';
\echo '第二部分:表结构验证';
\echo '========================================';
SELECT
'platform_schema' AS schema_name,
tablename AS table_name,
'' AS status
FROM pg_tables
WHERE schemaname = 'platform_schema'
UNION ALL
SELECT
'aia_schema',
tablename,
''
FROM pg_tables
WHERE schemaname = 'aia_schema'
UNION ALL
SELECT
'pkb_schema',
tablename,
''
FROM pg_tables
WHERE schemaname = 'pkb_schema'
ORDER BY schema_name, table_name;
-- 统计各Schema的表数量
DO $$
DECLARE
platform_tables INTEGER;
aia_tables INTEGER;
pkb_tables INTEGER;
all_ok BOOLEAN := true;
BEGIN
SELECT COUNT(*) INTO platform_tables FROM pg_tables WHERE schemaname = 'platform_schema';
SELECT COUNT(*) INTO aia_tables FROM pg_tables WHERE schemaname = 'aia_schema';
SELECT COUNT(*) INTO pkb_tables FROM pg_tables WHERE schemaname = 'pkb_schema';
RAISE NOTICE '========================================';
RAISE NOTICE 'platform_schema: % 个表 (预期1个)', platform_tables;
RAISE NOTICE 'aia_schema: % 个表 (预期5个)', aia_tables;
RAISE NOTICE 'pkb_schema: % 个表 (预期5个)', pkb_tables;
RAISE NOTICE '========================================';
IF platform_tables != 1 THEN
RAISE WARNING '❌ platform_schema表数量异常';
all_ok := false;
END IF;
IF aia_tables != 5 THEN
RAISE WARNING '❌ aia_schema表数量异常';
all_ok := false;
END IF;
IF pkb_tables != 5 THEN
RAISE WARNING '❌ pkb_schema表数量异常';
all_ok := false;
END IF;
IF all_ok THEN
RAISE NOTICE '✅ 表结构验证通过:所有表创建成功';
END IF;
RAISE NOTICE '========================================';
END $$;
-- ========================================
-- 第三部分:数据量对比验证
-- ========================================
\echo '';
\echo '========================================';
\echo '第三部分:数据量对比验证';
\echo '========================================';
-- 3.1 Platform Schema
SELECT
'users' AS table_name,
(SELECT COUNT(*) FROM public.users) AS public_count,
(SELECT COUNT(*) FROM platform_schema.users) AS migrated_count,
CASE
WHEN (SELECT COUNT(*) FROM public.users) = (SELECT COUNT(*) FROM platform_schema.users)
THEN '✅ 一致'
ELSE '❌ 不一致'
END AS status
WHERE EXISTS (SELECT 1 FROM public.users LIMIT 1);
-- 3.2 AIA Schema
SELECT
'projects' AS table_name,
(SELECT COUNT(*) FROM public.projects) AS public_count,
(SELECT COUNT(*) FROM aia_schema.projects) AS migrated_count,
CASE
WHEN (SELECT COUNT(*) FROM public.projects) = (SELECT COUNT(*) FROM aia_schema.projects)
THEN '✅ 一致'
ELSE '❌ 不一致'
END AS status
UNION ALL
SELECT
'conversations',
(SELECT COUNT(*) FROM public.conversations),
(SELECT COUNT(*) FROM aia_schema.conversations),
CASE
WHEN (SELECT COUNT(*) FROM public.conversations) = (SELECT COUNT(*) FROM aia_schema.conversations)
THEN '✅ 一致'
ELSE '❌ 不一致'
END
UNION ALL
SELECT
'messages',
(SELECT COUNT(*) FROM public.messages),
(SELECT COUNT(*) FROM aia_schema.messages),
CASE
WHEN (SELECT COUNT(*) FROM public.messages) = (SELECT COUNT(*) FROM aia_schema.messages)
THEN '✅ 一致'
ELSE '❌ 不一致'
END
UNION ALL
SELECT
'general_conversations',
(SELECT COUNT(*) FROM public.general_conversations),
(SELECT COUNT(*) FROM aia_schema.general_conversations),
CASE
WHEN (SELECT COUNT(*) FROM public.general_conversations) = (SELECT COUNT(*) FROM aia_schema.general_conversations)
THEN '✅ 一致'
ELSE '❌ 不一致'
END
UNION ALL
SELECT
'general_messages',
(SELECT COUNT(*) FROM public.general_messages),
(SELECT COUNT(*) FROM aia_schema.general_messages),
CASE
WHEN (SELECT COUNT(*) FROM public.general_messages) = (SELECT COUNT(*) FROM aia_schema.general_messages)
THEN '✅ 一致'
ELSE '❌ 不一致'
END;
-- 3.3 PKB Schema
SELECT
'knowledge_bases' AS table_name,
(SELECT COUNT(*) FROM public.knowledge_bases) AS public_count,
(SELECT COUNT(*) FROM pkb_schema.knowledge_bases) AS migrated_count,
CASE
WHEN (SELECT COUNT(*) FROM public.knowledge_bases) = (SELECT COUNT(*) FROM pkb_schema.knowledge_bases)
THEN '✅ 一致'
ELSE '❌ 不一致'
END AS status
UNION ALL
SELECT
'documents',
(SELECT COUNT(*) FROM public.documents),
(SELECT COUNT(*) FROM pkb_schema.documents),
CASE
WHEN (SELECT COUNT(*) FROM public.documents) = (SELECT COUNT(*) FROM pkb_schema.documents)
THEN '✅ 一致'
ELSE '❌ 不一致'
END
UNION ALL
SELECT
'batch_tasks',
(SELECT COUNT(*) FROM public.batch_tasks),
(SELECT COUNT(*) FROM pkb_schema.batch_tasks),
CASE
WHEN (SELECT COUNT(*) FROM public.batch_tasks) = (SELECT COUNT(*) FROM pkb_schema.batch_tasks)
THEN '✅ 一致'
ELSE '❌ 不一致'
END
UNION ALL
SELECT
'batch_results',
(SELECT COUNT(*) FROM public.batch_results),
(SELECT COUNT(*) FROM pkb_schema.batch_results),
CASE
WHEN (SELECT COUNT(*) FROM public.batch_results) = (SELECT COUNT(*) FROM pkb_schema.batch_results)
THEN '✅ 一致'
ELSE '❌ 不一致'
END
UNION ALL
SELECT
'task_templates',
(SELECT COUNT(*) FROM public.task_templates),
(SELECT COUNT(*) FROM pkb_schema.task_templates),
CASE
WHEN (SELECT COUNT(*) FROM public.task_templates) = (SELECT COUNT(*) FROM pkb_schema.task_templates)
THEN '✅ 一致'
ELSE '❌ 不一致'
END;
-- ========================================
-- 第四部分:外键约束验证
-- ========================================
\echo '';
\echo '========================================';
\echo '第四部分:外键约束验证';
\echo '========================================';
SELECT
tc.table_schema AS schema_name,
tc.table_name,
tc.constraint_name,
kcu.column_name,
ccu.table_schema AS foreign_schema,
ccu.table_name AS foreign_table,
ccu.column_name AS foreign_column,
'' AS status
FROM information_schema.table_constraints tc
JOIN information_schema.key_column_usage kcu
ON tc.constraint_name = kcu.constraint_name
AND tc.table_schema = kcu.table_schema
JOIN information_schema.constraint_column_usage ccu
ON ccu.constraint_name = tc.constraint_name
AND ccu.table_schema = tc.table_schema
WHERE tc.constraint_type = 'FOREIGN KEY'
AND tc.table_schema IN ('platform_schema', 'aia_schema', 'pkb_schema')
ORDER BY tc.table_schema, tc.table_name, tc.constraint_name;
-- 统计外键数量
DO $$
DECLARE
fk_count INTEGER;
BEGIN
SELECT COUNT(*) INTO fk_count
FROM information_schema.table_constraints
WHERE constraint_type = 'FOREIGN KEY'
AND table_schema IN ('platform_schema', 'aia_schema', 'pkb_schema');
RAISE NOTICE '========================================';
RAISE NOTICE '✅ 外键约束总数:%', fk_count;
RAISE NOTICE '========================================';
END $$;
-- ========================================
-- 第五部分跨Schema引用验证
-- ========================================
\echo '';
\echo '========================================';
\echo '第五部分跨Schema引用验证';
\echo '========================================';
-- 验证所有引用platform_schema.users的外键是否有效
DO $$
DECLARE
invalid_aia_projects INTEGER;
invalid_aia_conversations INTEGER;
invalid_aia_general_conversations INTEGER;
invalid_pkb_knowledge_bases INTEGER;
invalid_pkb_documents INTEGER;
all_valid BOOLEAN := true;
BEGIN
-- 验证aia_schema.projects
SELECT COUNT(*) INTO invalid_aia_projects
FROM aia_schema.projects p
LEFT JOIN platform_schema.users u ON p.user_id = u.id
WHERE u.id IS NULL;
-- 验证aia_schema.conversations
SELECT COUNT(*) INTO invalid_aia_conversations
FROM aia_schema.conversations c
LEFT JOIN platform_schema.users u ON c.user_id = u.id
WHERE u.id IS NULL;
-- 验证aia_schema.general_conversations
SELECT COUNT(*) INTO invalid_aia_general_conversations
FROM aia_schema.general_conversations gc
LEFT JOIN platform_schema.users u ON gc.user_id = u.id
WHERE u.id IS NULL;
-- 验证pkb_schema.knowledge_bases
SELECT COUNT(*) INTO invalid_pkb_knowledge_bases
FROM pkb_schema.knowledge_bases kb
LEFT JOIN platform_schema.users u ON kb.user_id = u.id
WHERE u.id IS NULL;
-- 验证pkb_schema.documents
SELECT COUNT(*) INTO invalid_pkb_documents
FROM pkb_schema.documents d
LEFT JOIN platform_schema.users u ON d.user_id = u.id
WHERE u.id IS NULL;
RAISE NOTICE '========================================';
RAISE NOTICE '跨Schema引用验证结果';
RAISE NOTICE '----------------------------------------';
IF invalid_aia_projects > 0 THEN
RAISE WARNING '❌ aia_schema.projects有%条无效user_id', invalid_aia_projects;
all_valid := false;
ELSE
RAISE NOTICE '✅ aia_schema.projects外键全部有效';
END IF;
IF invalid_aia_conversations > 0 THEN
RAISE WARNING '❌ aia_schema.conversations有%条无效user_id', invalid_aia_conversations;
all_valid := false;
ELSE
RAISE NOTICE '✅ aia_schema.conversations外键全部有效';
END IF;
IF invalid_aia_general_conversations > 0 THEN
RAISE WARNING '❌ aia_schema.general_conversations有%条无效user_id', invalid_aia_general_conversations;
all_valid := false;
ELSE
RAISE NOTICE '✅ aia_schema.general_conversations外键全部有效';
END IF;
IF invalid_pkb_knowledge_bases > 0 THEN
RAISE WARNING '❌ pkb_schema.knowledge_bases有%条无效user_id', invalid_pkb_knowledge_bases;
all_valid := false;
ELSE
RAISE NOTICE '✅ pkb_schema.knowledge_bases外键全部有效';
END IF;
IF invalid_pkb_documents > 0 THEN
RAISE WARNING '❌ pkb_schema.documents有%条无效user_id', invalid_pkb_documents;
all_valid := false;
ELSE
RAISE NOTICE '✅ pkb_schema.documents外键全部有效';
END IF;
RAISE NOTICE '========================================';
IF all_valid THEN
RAISE NOTICE '✅ 所有跨Schema引用验证通过';
ELSE
RAISE WARNING '❌ 存在无效的跨Schema引用';
END IF;
RAISE NOTICE '========================================';
END $$;
-- ========================================
-- 第六部分:索引验证
-- ========================================
\echo '';
\echo '========================================';
\echo '第六部分:索引验证';
\echo '========================================';
SELECT
schemaname AS schema_name,
tablename AS table_name,
indexname AS index_name,
'' AS status
FROM pg_indexes
WHERE schemaname IN ('platform_schema', 'aia_schema', 'pkb_schema')
ORDER BY schemaname, tablename, indexname;
-- 统计索引数量
DO $$
DECLARE
index_count INTEGER;
BEGIN
SELECT COUNT(*) INTO index_count
FROM pg_indexes
WHERE schemaname IN ('platform_schema', 'aia_schema', 'pkb_schema')
AND indexname NOT LIKE '%pkey'; -- 排除主键索引
RAISE NOTICE '========================================';
RAISE NOTICE '✅ 非主键索引总数:%', index_count;
RAISE NOTICE '========================================';
END $$;
-- ========================================
-- 第七部分:数据采样验证(抽样检查)
-- ========================================
\echo '';
\echo '========================================';
\echo '第七部分:数据采样验证';
\echo '========================================';
-- 采样验证检查ID是否完全一致
DO $$
DECLARE
user_ids_match BOOLEAN;
project_ids_match BOOLEAN;
BEGIN
-- 验证users的ID
SELECT NOT EXISTS (
SELECT id FROM public.users
EXCEPT
SELECT id FROM platform_schema.users
) AND NOT EXISTS (
SELECT id FROM platform_schema.users
EXCEPT
SELECT id FROM public.users
) INTO user_ids_match;
-- 验证projects的ID
SELECT NOT EXISTS (
SELECT id FROM public.projects
EXCEPT
SELECT id FROM aia_schema.projects
) AND NOT EXISTS (
SELECT id FROM aia_schema.projects
EXCEPT
SELECT id FROM public.projects
) INTO project_ids_match;
RAISE NOTICE '========================================';
IF user_ids_match THEN
RAISE NOTICE '✅ users表ID完全一致';
ELSE
RAISE WARNING '❌ users表ID存在差异';
END IF;
IF project_ids_match THEN
RAISE NOTICE '✅ projects表ID完全一致';
ELSE
RAISE WARNING '❌ projects表ID存在差异';
END IF;
RAISE NOTICE '========================================';
END $$;
-- ========================================
-- 第八部分:最终总结报告
-- ========================================
\echo '';
\echo '========================================';
\echo '最终总结报告';
\echo '========================================';
SELECT
'✅ Schema隔离迁移验证完成' AS summary,
(SELECT COUNT(*) FROM platform_schema.users) || ' users' AS platform,
(SELECT COUNT(*) FROM aia_schema.projects) || ' projects, ' ||
(SELECT COUNT(*) FROM aia_schema.conversations) || ' conversations' AS aia,
(SELECT COUNT(*) FROM pkb_schema.knowledge_bases) || ' knowledge_bases, ' ||
(SELECT COUNT(*) FROM pkb_schema.documents) || ' documents' AS pkb;
\echo '';
\echo '========================================';
\echo '✅ 所有验证完成!';
\echo '========================================';
\echo '下一步:';
\echo '1. 更新Prisma配置schema.prisma';
\echo '2. 生成Prisma Client';
\echo '3. 更新代码以使用新Schema';
\echo '4. 运行应用测试';
\echo '========================================';
-- ========================================
-- 完成
-- ========================================