mehediakash01/Knowledge-Trader-Backend

GitHub: mehediakash01/Knowledge-Trader-Backend

知识交易者是一个基于代币化经济和AI匹配的技能交换后端平台,旨在通过安全交易和智能发现连接学习者与专家。

Stars: 0 | Forks: 0

# 知识交易者 ![构建状态](https://img.shields.io/badge/Build-Passing-success) ![Node.js版本](https://img.shields.io/badge/Node.js-20+-339933) ![TypeScript版本](https://img.shields.io/badge/TypeScript-6.x-3178C6) ![许可证](https://img.shields.io/badge/License-ISC-blue) **一个由多模型 AI 网关驱动的高性能、高弹性技能交换市场。** 知识交易者通过代币化的知识经济、安全的交易流程和 AI 驱动的匹配,在学习者和专家之间架起桥梁。该平台专为生产环境的可靠性、数据完整性和运维可观察性而设计。 ## 目录 - [项目身份与使命](#project-identity-and-mission) - [高级工程亮点](#senior-engineering-highlights) - [技术规格](#technical-specifications) - [按模块划分的 API 文档](#api-documentation-by-module) - [安装与设置](#installation-and-setup) - [环境变量](#environment-variables) - [架构图 (MSC 模式)](#architecture-diagram-msc-pattern) - [系统可靠性与数据完整性](#system-reliability-and-data-integrity) - [项目状态](#project-status) - [未来路线图](#future-roadmap) ## 项目身份与使命 知识交易者是一个用于技能交换的高弹性后端平台,其中: - 专家发布高质量的、结构化的技能帖子。 - 学习者使用平台代币发现、评估和购买知识。 - AI 服务个性化发现、内容构建和评论智能。 - 交易引擎对代币转移和内容访问强制执行严格的事务一致性。 其核心使命是提供一个安全、高信号的市场,让高质量的学习和货币化的专业知识能够规模化,同时不损害可靠性。 ## 高级工程亮点 ### 1. 高弹性 AI 网关 AI 网关围绕**供应商故障转移和结构化输出保证**构建: - 供应商顺序:**Gemini -> Groq -> OpenRouter**。 - 基于超时的执行,并支持取消(`AbortController`)以防止模型调用挂起。 - 使用 Zod 验证强制结构化模式。 - JSON 修复策略: - 去除 markdown/代码围栏, - 尝试提取对象边界, - 当解析/验证失败时重试供应商回退。 - 当所有供应商失败时,安全回退模式返回确定性的、类似 mock 的结构化数据。 - **每用户 AI 速率限制**,使用 Redis 主存储和内存回退。 - 当前策略:`20 请求数 / 小时 / 用户`。 ### 2. 知识经济 代币化交互受**原子事务引擎**保护: - 交易执行在单个 Prisma 事务内运行。 - 学习者代币扣款和教师代币入账是原子性提交的。 - 交易 + 事务 + 通知记录作为一致性单元持久化。 - 重复购买和自我购买尝试会被拒绝。 - 内容门控逻辑确保 `lockedContent` 仅对以下对象可见: - 帖子所有者,或 - 已完成该帖子交易的用户。 ### 3. 高级安全性 安全控制应用于多个层面: - 用于受保护模块(`USER`、`MANAGER`、`ADMIN`)的 **RBAC(基于角色的访问控制)**。 - **XSS 净化中间件**递归净化 POST/PATCH 请求体。 - **Helmet** 加固 HTTP 安全头。 - 基于 JWT 的认证,具有访问令牌和刷新令牌语义。 - 使用 Zod 模式进行验证优先的请求处理。 ### 4. 性能工程 以性能为中心的架构包括: - **基于 Redis 的缓存**,带内存回退。 - 缓存的类别发现, - 缓存的首页信息流, - 内容变更时的缓存失效。 - 用于 AI 端点的**基于 Redis 的速率限制**。 - 对高基数和搜索/筛选字段进行**数据库索引**。 - `category`、`tokenPrice`、`title`、`slug`、复合 `category + tokenPrice`。 - 用于生产环境诊断的 **Winston 日志**,支持控制台 + 文件传输。 ## 技术规格 ### 核心栈 - **语言:** TypeScript - **运行时:** Node.js + Express.js - **数据库:** PostgreSQL (Prisma ORM + Prisma PG 适配器) - **缓存 / 速率限制:** Redis (带内存优雅回退) - **AI 模型:** - Google Gemini (`gemini-1.5-flash`) - Groq (`llama-3.1-8b-instant`) - OpenRouter (`meta-llama/llama-3.1-8b-instruct:free`) - **文档:** Swagger UI / OpenAPI 3 (`/api-docs`) ### 使用的其他生产环境库 - `helmet` 用于 HTTP 加固 - `xss` 用于请求体净化 - `jsonwebtoken` 用于认证令牌 - `zod` 用于运行时契约验证 - `winston` 用于结构化日志 - `socket.io` 用于实时通知流 - `http-status`, `cors`, `cookie-parser`, `bcrypt` ## 按模块划分的 API 文档 基础 URL:`http://localhost:5000/api/v1` ### 认证模块 | 方法 | 端点 | 描述 | 访问权限 | |---|---|---|---| | POST | `/users/register` | 注册新用户账户 | 公开 | | POST | `/auth/login` | 登录并接收访问/刷新令牌 | 公开 | | POST | `/auth/refresh` | 使用刷新令牌刷新访问令牌 | 计划中(登录时已发出刷新令牌) | ### 技能帖子模块 | 方法 | 端点 | 描述 | 访问权限 | |---|---|---|---| | GET | `/skill-posts` | 搜索/筛选/列出技能帖子 | 公开 | | GET | `/skill-posts/categories` | 缓存的不同类别 | 公开 | | GET | `/skill-posts/home-feed` | 缓存的精选/最新信息流 | 公开 | | GET | `/skill-posts/:id` | 获取单个帖子及其门控的锁定内容 | 可选认证 | | POST | `/skill-posts` | 创建技能帖子 | USER / MANAGER / ADMIN | | PATCH | `/skill-posts/:id` | 更新自己的技能帖子 | USER / MANAGER / ADMIN | ### 交易模块 | 方法 | 端点 | 描述 | 访问权限 | |---|---|---|---| | POST | `/trades/token-trade` | 执行基于代币的购买交易 | USER | | GET | `/trades/my-trades` | 学习 + 教学交易历史 | USER | ### AI 模块 | 方法 | 端点 | 描述 | 访问权限 | |---|---|---|---| | POST | `/ai/match` | AI 技能匹配 | USER / MANAGER / ADMIN | | POST | `/ai/generate-content` | 用于课程详情的 AI 内容构建器 | USER / MANAGER / ADMIN | | POST | `/ai/summarize-reviews/:postId` | AI 评论摘要器 | USER / MANAGER / ADMIN | | POST | `/ai/consultant` | AI 路线图/交易顾问 | USER / MANAGER / ADMIN | ### 分析模块 | 方法 | 端点 | 描述 | 访问权限 | |---|---|---|---| | GET | `/analytics/admin-stats` | 管理后台仪表板 KPIs | ADMIN / MANAGER | | GET | `/analytics/trades?groupBy=date|category` | 交易趋势和代币交易量分析 | ADMIN / MANAGER | ### 通知模块 | 方法 | 端点 | 描述 | 访问权限 | |---|---|---|---| | POST | `/notifications` | 创建通知 | ADMIN / MANAGER | | GET | `/notifications/my-notifications` | 获取已认证用户的通知 | USER / MANAGER / ADMIN | | PATCH | `/notifications/:id/read` | 将自己的通知标记为已读 | USER / MANAGER / ADMIN | ### 评论模块 | 方法 | 端点 | 描述 | 访问权限 | |---|---|---|---| | POST | `/reviews` | 在完成交易后提交评论 | USER | 交互式文档可访问:`GET /api-docs` ## 安装与设置 ### 1. 克隆仓库 ``` git clone cd Knowledge-Trader-Backend ``` ### 2. 安装依赖 ``` npm install ``` ### 3. 配置环境 使用 [环境变量](#environment-variables) 中的变量,在项目根目录创建一个 `.env` 文件。 ### 4. 生成 Prisma 客户端并运行迁移 ``` npx prisma generate npx prisma migrate dev ``` ### 5. 填充数据库 ``` npm run seed ``` ### 6. 运行开发服务器 ``` npm run dev ``` 服务器将在配置的端口(默认 `5000`)上启动。 ### 7. 为生产环境构建 ``` npm run build ``` ## 环境变量 在你的 `.env` 文件中使用以下键: ``` # 应用 NODE_ENV=development PORT=5000 CORS_ORIGIN=http://localhost:3000,http://localhost:5173 # 数据库 DATABASE_URL=postgresql://username:password@localhost:5432/knowledge_trader # JWT JWT_SECRET=change-me JWT_ACCESS_SECRET=change-me-access JWT_REFRESH_SECRET=change-me-refresh JWT_ACCESS_EXPIRES_IN=1d JWT_REFRESH_EXPIRES_IN=30d # Google OAuth GOOGLE_CLIENT_ID=your-google-oauth-client-id GOOGLE_CLIENT_SECRET=your-google-oauth-client-secret # Redis REDIS_URL=redis://localhost:6379 # AI 提供商 GEMINI_API_KEY=your-gemini-key GROQ_API_KEY=your-groq-key OPENROUTER_API_KEY=your-openrouter-key AI_TIMEOUT_MS=10000 ``` 注意事项: - `JWT_SECRET` 如果省略了特定的访问/刷新密钥,可作为回退。 - 当密钥存在时,AI 网关会自动在供应商间回退。 - Redis 是可选的,但推荐用于生产级缓存和速率限制。 ## 架构图 (MSC 模式) 该项目遵循受企业后端系统启发的**模块化服务-控制器 (MSC)** 架构。 ``` Client / Postman / Frontend | v Express Router (Module-based) | v Middleware Layer (Helmet, CORS, Auth, RBAC, Validation, XSS Sanitization, Rate Limiting) | v Controller Layer (HTTP orchestration) | v Service Layer (Business logic, Transactions, Caching, AI orchestration) | +-------------------+ | | v v Prisma ORM AI Gateway (Failover) | Gemini -> Groq -> OpenRouter v PostgreSQL | v Redis (cache/rate-limit state) + Socket.IO (live notifications) ``` ### 为何在此处使用 MSC - 强制实现清晰的关注点分离。 - 提高模块级别的可测试性和可维护性。 - 简化添加新领域(AI、分析、交易、通知)。 - 保持业务规则集中化和可重用。 ## 系统可靠性与数据完整性 可靠性和完整性是此系统的首要关注点: - 原子交易事务防止部分财务状态更新。 - 防御性 AI 编排保护用户工作流免受供应商不稳定的影响。 - 写入时的缓存失效使高读取端点保持高性能和新鲜。 - 模式验证和严格的认证网关减少格式错误/未授权的状态转换。 - 结构化日志和 API 文档提高了运维可观察性和可支持性。 ## 项目状态 - 构建:通过 - API 文档:活跃 (`/api-docs`) - 核心模块:认证、技能帖子、交易、评论、通知、分析、AI - 生产环境加固:安全头、XSS 过滤、RBAC、速率限制、缓存、日志 ## 未来路线图 - 学习者和专家之间的 WebSocket 优先实时聊天 - 移动应用程序 (iOS/Android),提供统一的代币钱包体验 - 专用的刷新令牌轮换端点和会话管理仪表板 - 用于 AI 预计算和摘要通知的事件驱动后台任务 - 增强的审计跟踪,满足合规级交易取证要求 - 利用行为和群组信号的高级推荐排名 如果你正在评估此后端的生产就绪性,请从以下开始: 1. `GET /api-docs` 进行端点发现 2. 交易流程 (`/trades/token-trade`) 以验证事务完整性 3. AI 流程 (`/ai/*`) 以观察负载下的故障转移和结构化响应 4. 通知流程 (`/notifications/*` + Socket.IO) 以了解实时用户体验行为
标签:AI网关, AI驱动匹配, GNU通用公共许可证, MITM代理, Node.js, TypeScript, Zenmap, 专家平台, 个性化推荐, 事务处理, 代币化平台, 内容管理, 匹配算法, 在线学习, 多模型AI, 安全交易, 安全插件, 弹性系统, 技能交换市场, 搜索引擎查询, 操作可观察性, 教育科技, 数据完整性, 测试用例, 生产可靠性, 知识经济, 自动化攻击