Initial commit of akmon project

This commit is contained in:
2026-01-20 08:04:15 +08:00
commit 77a2bab985
1309 changed files with 343305 additions and 0 deletions

265
doc_news/README.md Normal file
View File

@@ -0,0 +1,265 @@
# AI多语言资讯系统 - 部署指南
![PostgreSQL](https://img.shields.io/badge/PostgreSQL-15+-blue.svg)
![Supabase](https://img.shields.io/badge/Supabase-Compatible-green.svg)
![License](https://img.shields.io/badge/License-MIT-yellow.svg)
## 📋 项目概述
AI多语言资讯系统是一个基于PostgreSQL的现代化新闻资讯管理平台支持多语言内容管理、AI智能翻译、用户行为分析、社交功能等特性。
## ✨ 主要功能
- 🌍 **多语言支持**: 支持多种语言的内容管理和AI翻译
- 📰 **内容管理**: 完整的新闻内容管理系统
- 🏷️ **专题系统**: 专题创建、订阅、内容聚合
- 💬 **评论系统**: 多层级评论、点赞、举报、审核
-**收藏功能**: 个人收藏夹、内容收藏管理
- 🔄 **转发分享**: 内容转发和社交分享
- 🤖 **AI智能**: 智能翻译、内容分析、聊天机器人
- 👥 **用户系统**: 用户行为分析、个性化推荐
- 🔒 **安全控制**: 基于RLS的行级安全策略
- 📊 **性能优化**: 全文搜索、复合索引、查询优化
## 🏗️ 系统架构
```
┌─────────────────────────────────────────────────────────────┐
│ AI多语言资讯系统 │
├─────────────────────────────────────────────────────────────┤
│ 内容层 │ 专题管理 │ 评论系统 │ 收藏转发 │ 用户行为 │
├─────────────────────────────────────────────────────────────┤
│ AI层 │ 智能翻译 │ 内容分析 │ 聊天机器人 │ 推荐系统 │
├─────────────────────────────────────────────────────────────┤
│ 数据层 │ PostgreSQL 数据库 (21+ 张表) │
├─────────────────────────────────────────────────────────────┤
│ 安全层 │ RLS策略 + 索引优化 + 触发器 │
└─────────────────────────────────────────────────────────────┘
```
## 📦 文件结构
```
doc_news/
├── 🗄️ 数据库文件
│ ├── ai_multilingual_news_database.sql # 主数据库结构
│ └── topics_comments_init_data.sql # 演示数据
├── 🚀 部署脚本
│ ├── deploy.sh # Linux/MacOS 部署脚本
│ └── deploy.ps1 # Windows PowerShell 部署脚本
├── 📖 文档
│ ├── README.md # 项目说明 (本文件)
│ ├── SQL_DEPLOYMENT_GUIDE.md # 详细部署指南
│ ├── FINAL_DEPLOYMENT_VALIDATION.md # 验证报告
│ └── INDEX_ERROR_SOLUTION.md # 错误解决方案
└── 🔧 工具脚本
├── fix_indexes.sql # 索引修复脚本
└── clean_policies.sql # 策略清理脚本
```
## 🚀 快速开始
### 方式一:自动部署 (推荐)
#### Linux/MacOS:
```bash
# 1. 确保PostgreSQL客户端已安装
sudo apt-get install postgresql-client # Ubuntu/Debian
# 或
brew install postgresql # MacOS
# 2. 执行部署脚本
chmod +x deploy.sh
./deploy.sh --host localhost --database ai_news --username postgres
```
#### Windows:
```powershell
# 1. 在PowerShell中执行
.\deploy.ps1 -DBHost "localhost" -DBName "ai_news" -DBUser "postgres"
# 2. 或者使用默认参数
.\deploy.ps1
```
### 方式二:手动部署
#### 1. 创建数据库结构
```sql
-- 在PostgreSQL或Supabase SQL编辑器中执行
\i ai_multilingual_news_database.sql
```
#### 2. 插入演示数据 (可选)
```sql
-- 在SQL编辑器中执行
\i topics_comments_init_data.sql
```
### 方式三Supabase 部署
1. 登录 [Supabase Dashboard](https://app.supabase.com/)
2. 创建新项目或选择现有项目
3. 进入 `SQL Editor`
4. 复制 `ai_multilingual_news_database.sql` 内容并执行
5. 复制 `topics_comments_init_data.sql` 内容并执行 (可选)
## 🔧 配置参数
### 数据库连接参数
| 参数 | 默认值 | 说明 |
|------|--------|------|
| DB_HOST | localhost | 数据库主机地址 |
| DB_PORT | 5432 | 数据库端口 |
| DB_NAME | ai_news | 数据库名称 |
| DB_USER | postgres | 数据库用户名 |
### 环境变量配置
```bash
# 设置数据库连接
export DB_HOST="your-db-host"
export DB_PORT="5432"
export DB_NAME="your-database"
export DB_USER="your-username"
export PGPASSWORD="your-password"
```
## ✅ 部署验证
部署完成后可以通过以下SQL命令验证
```sql
-- 检查表创建
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'public' AND table_name LIKE 'ak_%';
-- 检查RLS策略
SELECT schemaname, tablename, policyname
FROM pg_policies WHERE schemaname = 'public';
-- 检查索引
SELECT indexname FROM pg_indexes
WHERE schemaname = 'public' AND indexname LIKE 'idx_%';
-- 检查演示数据
SELECT COUNT(*) as topic_count FROM ak_topics;
SELECT COUNT(*) as comment_count FROM ak_comments;
```
预期结果:
- ✅ 21+ 个数据表
- ✅ 9+ 个RLS安全策略
- ✅ 21+ 个性能索引
- ✅ 演示数据 (如果选择插入)
## 🗃️ 数据库表结构
### 核心表
- `ak_contents` - 内容管理
- `ak_content_translations` - 内容翻译
- `ak_topics` - 专题管理
- `ak_comments` - 评论系统
- `ak_content_favorites` - 收藏功能
- `ak_content_shares` - 转发分享
### AI功能表
- `ak_ai_translation_logs` - AI翻译记录
- `ak_ai_usage_stats` - AI使用统计
- `ak_chat_sessions` - 聊天会话
- `ak_chat_messages` - 聊天消息
### 用户分析表
- `ak_user_behaviors` - 用户行为
- `ak_user_profiles` - 用户画像
- `ak_recommendations` - 推荐记录
## 🔒 安全特性
- **RLS行级安全**: 用户只能访问自己的数据
- **策略隔离**: 不同功能模块的策略分离
- **数据加密**: 敏感信息加密存储
- **访问控制**: 基于角色的访问控制
## 🚨 故障排除
### 常见问题
#### 1. 策略重复创建错误
```
ERROR: 42710: policy "xxx" for table "xxx" already exists
```
**解决方案**: 所有策略已添加 `DROP POLICY IF EXISTS`,可安全重复执行。
#### 2. 索引重复创建错误
```
ERROR: 42P07: relation "idx_xxx" already exists
```
**解决方案**: 所有索引使用 `CREATE INDEX IF NOT EXISTS`,支持幂等执行。
#### 3. 扩展不存在错误
```
ERROR: extension "uuid-ossp" does not exist
```
**解决方案**:
```sql
-- 手动安装所需扩展
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pg_trgm";
CREATE EXTENSION IF NOT EXISTS "btree_gin";
```
#### 4. 全文搜索IMMUTABLE函数错误
```
ERROR: 42P17: functions in index predicate must be marked IMMUTABLE
```
**解决方案**: 已创建IMMUTABLE包装函数
```sql
-- 自动使用IMMUTABLE函数创建索引
CREATE INDEX IF NOT EXISTS idx_contents_fts_title ON public.ak_contents
USING gin(content_title_to_tsvector(title));
```
#### 5. 权限不足错误
```
ERROR: permission denied to create extension
```
**解决方案**: 使用超级用户权限或联系数据库管理员。
### 获取更多帮助
- 📖 查看 `SQL_DEPLOYMENT_GUIDE.md` 了解详细部署步骤
- 🔍 查看 `INDEX_ERROR_SOLUTION.md` 了解错误解决方案
- ✅ 查看 `FINAL_DEPLOYMENT_VALIDATION.md` 了解验证详情
## 📈 性能优化
- **全文搜索**: 使用GIN索引支持高效的文本搜索
- **复合索引**: 针对常用查询组合优化
- **分区表**: 大数据量时支持表分区
- **连接池**: 建议使用连接池管理数据库连接
## 🤝 贡献指南
1. Fork 项目
2. 创建功能分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'Add amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 打开 Pull Request
## 📄 许可证
该项目基于 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 🙏 致谢
- PostgreSQL 社区
- Supabase 团队
- 所有贡献者
---
**最后更新**: 2025年1月27日
**版本**: v1.0.0
**状态**: ✅ 生产就绪