88 KiB
88 KiB
Code 项目架构分层图
一个现代化的代码协作与团队沟通平台
技术栈:Rust (后端) + TypeScript/React (前端) + Kubernetes (部署)
系统全景架构
┌─────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 用 户 层 │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Web 浏览器 │ │ Git 客户端 │ │ 外部 CI/CD │ │
│ │ (React SPA) │ │ (git/SSH) │ │ (GitHub/GitLab) │ │
│ └────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘ │
└──────────────────┼────────────────────────────────┼────────────────────────────────┼────────────────┘
│ │ │
│ HTTP/WS │ Git Protocol │ Webhook
│ │ │
┌──────────────────▼────────────────────────────────▼────────────────────────────────▼────────────────┐
│ 接入层 (Ingress/LB) │
│ │
│ ┌──────────────────────────────────────────────────────────────────────────────────┐ │
│ │ Load Balancer / K8s Ingress (:80/:443) │ │
│ └──────────────────────┬──────────────────────┬──────────────────────┬─────────────┘ │
└────────────────────────────────┼──────────────────────┼──────────────────────┼──────────────────────┘
│ │ │
│ REST API │ Git Ops │ Webhook
│ │ │
┌────────────────────────────────▼──────────────────────▼──────────────────────▼──────────────────────┐
│ 应 用 服 务 层 (apps/) │
│ │
│ ┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐ ┌────────────────────┐ │
│ │ apps/app │ │ apps/gitserver │ │ apps/git-hook │ │ apps/email │ │
│ │ 主 Web API 服务 │ │ Git HTTP/SSH 服务 │ │ Git Hook 处理器 │ │ 邮件发送 Worker │ │
│ │ :8080 │ │ :8021/:2222 │ │ Worker │ │ Worker │ │
│ │ HTTP + WebSocket │ │ HTTP + SSH │ │ 异步任务 │ │ 队列消费 │ │
│ │ 多实例部署 │ │ 单实例 │ │ 单实例 │ │ 单实例 │ │
│ └─────────┬──────────┘ └─────────┬──────────┘ └─────────┬──────────┘ └─────────┬──────────┘ │
└─────────────┼───────────────────────┼───────────────────────┼───────────────────────┼───────────────┘
│ │ │ │
│ │ │ │
┌─────────────▼───────────────────────▼───────────────────────▼───────────────────────▼───────────────┐
│ 应 用 编 排 层 (apps/operator) │
│ │
│ ┌───────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ apps/operator (Kubernetes Operator) │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ App CRD │ │GitSrv CRD│ │Email CRD │ │Hook CRD │ │Mig CRD │ │ │
│ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │
│ │ │ │ │ │ │ │ │
│ │ ▼ ▼ ▼ ▼ ▼ │ │
│ │ ┌──────────────────────────────────────────────────────────────────────────┐ │ │
│ │ │ K8s 资源 (Deployments, Services, PVCs, Jobs) │ │ │
│ │ └──────────────────────────────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────────────────────────────────────────┘
│ │ │ │
│ │ │ │
┌─────────────▼───────────────────────▼───────────────────────▼───────────────────────▼───────────────┐
│ 业 务 逻 辑 层 (libs/service) │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ AppService { 全局服务聚合 } │ │
│ │ │ │
│ │ ┌─────────┐ ┌────────┐ ┌─────┐ ┌──────────┐ ┌───────────┐ ┌────────┐ ┌───────────┐ │ │
│ │ │ agent/ │ │ auth/ │ │git/ │ │ issue/ │ │ project/ │ │ user/ │ │ pull_req/ │ │ │
│ │ │ (8文件) │ │ (10) │ │(16) │ │ (8) │ │ (20) │ │ (12) │ │ (5) │ │ │
│ │ │ AI模型 │ │ 认证 │ │Git │ │ Issue │ │ 项目管理 │ │ 用户 │ │ PR审查 │ │ │
│ │ │ 管理 │ │ 会话 │ │操作 │ │ 追踪 │ │ 权限控制 │ │ 偏好 │ │ 合并 │ │ │
│ │ └─────────┘ └────────┘ └─────┘ └──────────┘ └───────────┘ └────────┘ └───────────┘ │ │
│ │ │ │
│ │ + utils/(project,repo,user) + ws_token + error + Pager │ │
│ └──────────────────────────────────────┬──────────────────────────────────────────────────┘ │
└──────────────────────────────────────────┼──────────────────────────────────────────────────────────┘
│
┌──────────────────────┼──────────────────────┐
│ │ │
┌───────────────────▼──────────┐ ┌────────▼─────────────┐ ┌──────▼────────────────────────────┐
│ HTTP 路由层 (libs/api) │ │ WebSocket 层 │ │ 后台 Worker 层 │
│ 100 个路由文件 │ │ (libs/room) │ │ │
│ │ │ │ │ libs/queue: │
│ /api/auth/* (9端点) │ │ /ws │ │ MessageProducer │
│ /api/git/* (100+端点) │ │ /ws/rooms/{id} │ │ RedisPubSub │
│ /api/projects/* (50+端点) │ │ /ws/projects/{id} │ │ room_worker_task │
│ /api/issue/* (30+端点) │ │ │ │ start_email_worker │
│ /api/room/* (40+端点) │ │ 实时消息广播 │ │ │
│ /api/pull_request/* (20端点)│ │ 多实例同步 │ │ libs/git/hook: │
│ /api/agent/* (15端点) │ │ AI 流式输出 │ │ GitServiceHooks │
│ /api/user/* (20端点) │ │ │ │ GitHookPool │
│ /api/openapi/* (文档) │ │ │ │ │
└───────────┬────────────────┘ └──────────┬───────────┘ └─────────────┬───────────────────────┘
│ │ │
└─────────────────────────────┼───────────────────────────┘
│
┌─────────────────────────────────────────▼────────────────────────────────────────────────────────┐
│ 基 础 设 施 层 (Infrastructure Libs) │
│ │
│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │
│ │ libs/models │ │ libs/db │ │ libs/config │ │ libs/session │ │
│ │ 92 个实体文件 │ │ 数据库连接池 │ │ 全局配置管理 │ │ 会话管理中间件 │ │
│ │ Sea-ORM 实体定义 │ │ 缓存抽象 │ │ .env 加载 │ │ Redis Store │ │
│ │ 类型别名 │ │ 重试机制 │ │ 12 子模块 │ │ JWT + Cookie │ │
│ └─────────┬─────────┘ └─────────┬─────────┘ └─────────┬─────────┘ └─────────┬─────────┘ │
│ │ │ │ │ │
│ ┌─────────▼─────────┐ ┌────────▼─────────┐ ┌─────────▼─────────┐ ┌─────────▼─────────┐ │
│ │ libs/git │ │ libs/agent │ │ libs/email │ │ libs/avatar │ │
│ │ 19 子模块 │ │ 6 子模块 │ │ SMTP 邮件发送 │ │ 图片处理 │ │
│ │ libgit2 封装 │ │ OpenAI 集成 │ │ lettre 客户端 │ │ image crate │ │
│ │ HTTP + SSH 协议 │ │ Qdrant 向量库 │ │ 模板引擎 │ │ 缩放/裁剪 │ │
│ └─────────┬─────────┘ └─────────┬─────────┘ └─────────┬─────────┘ └─────────┬─────────┘ │
│ │ │ │ │ │
│ ┌─────────▼─────────┐ ┌────────▼─────────┐ ┌─────────▼───────────────────────▼─────────┐ │
│ │ libs/queue │ │ libs/room │ │ libs/migrate │ │
│ │ 消息队列 │ │ 实时聊天室 │ │ 82+ 数据库迁移脚本 │ │
│ │ Redis Streams │ │ 19 子模块 │ │ sea-orm-migration │ │
│ │ Pub/Sub │ │ WebSocket 管理 │ │ up/down/fresh/refresh/reset │ │
│ └─────────┬─────────┘ └─────────┬─────────┘ └─────────────────────────────────────────┘ │
│ │ │ │
│ ┌─────────▼─────────┐ ┌────────▼─────────┐ │
│ │ libs/webhook │ │ libs/rpc │ libs/transport │
│ │ (占位) │ │ (占位) │ (占位) │
│ └───────────────────┘ └─────────────────┘ │
└────────────────────────────────────────────────────────────────────────────────────────────────┘
│ │
│ │
┌─────────────▼──────────────────────▼────────────────────────────────────────────────────────────┐
│ 存 储 层 │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ PostgreSQL │ │ Redis │ │ Qdrant │ │ 文件系统 │ │
│ │ :5432 │ │ :6379 │ │ :6333 │ │ │ │
│ │ │ │ │ │ │ │ /data/avatars │ │
│ │ • 用户数据 │ │ • 会话存储 │ │ • 向量嵌入 │ │ /data/repos │ │
│ │ • 项目/仓库 │ │ • 缓存数据 │ │ • AI 索引 │ │ • 头像图片 │ │
│ │ • Issue/PR │ │ • Pub/Sub │ │ • 相似度检索 │ │ • Git 仓库 │ │
│ │ • Room 消息 │ │ • Stream 队列 │ │ │ │ • 上传文件 │ │
│ │ • 评论/标签 │ │ • Hook 队列 │ │ │ │ │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
└────────────────────────────────────────────────────────────────────────────────────────────────┘
│
│ 外部 API
│
┌─────────────▼────────────────────────────────────────────────────────────────────────────────────┐
│ 外 部 服 务 │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ SMTP 服务器 │ │ OpenAI API │ │ Embedding API │ │
│ │ :587 │ │ HTTPS │ │ HTTPS │ │
│ │ │ │ │ │ │ │
│ │ • 邮件发送 │ │ • 聊天补全 │ │ • 文本向量化 │ │
│ │ • 通知邮件 │ │ • AI 助手 │ │ • 相似度计算 │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
└────────────────────────────────────────────────────────────────────────────────────────────────┘
前端架构分层
┌────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 前 端 应 用 层 (src/) │
│ │
│ ┌──────────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ Vite + React + TypeScript │ │
│ │ │ │
│ │ src/main.tsx ──▶ App.tsx ──▶ BrowserRouter ──▶ Routes │ │
│ │ │ │
│ │ ┌───────────────────────┐ ┌───────────────────────┐ ┌───────────────────────┐ │ │
│ │ │ 页面层 (app/) │ │ 组件层 (components/) │ │ 状态管理层 │ │ │
│ │ │ 59 页面组件 │ │ 108 UI 组件 │ │ │ │ │
│ │ │ │ │ │ │ TanStack Query │ │ │
│ │ │ auth/ (4) │ │ ui/ (66) │ │ (服务端状态) │ │ │
│ │ │ init/ (2) │ │ room/ (20) │ │ │ │ │
│ │ │ user/ (1) │ │ repository/ (8) │ │ React Context │ │ │
│ │ │ project/ (22) │ │ project/ (4) │ │ (全局状态) │ │ │
│ │ │ repository/ (12) │ │ auth/ (2) │ │ │ │ │
│ │ │ settings/ (8) │ │ layout/ (2) │ │ Local State │ │ │
│ │ │ │ │ │ │ (组件状态) │ │ │
│ │ └───────────┬───────────┘ └───────────┬───────────┘ └───────────┬────────────┘ │ │
│ │ │ │ │ │ │
│ │ └────────────────────────────┼────────────────────────────┘ │ │
│ │ │ │ │
│ │ ┌────────────────────────────────────────┼────────────────────────────────────────┐ │ │
│ │ │ API 客户端层 │ │ │
│ │ │ │ │ │
│ │ │ src/client/ ──▶ openapi-ts 自动生成 (从 openapi.json) │ │ │
│ │ │ 400+ API 函数 + 完整 TypeScript 类型 │ │ │
│ │ │ Axios HTTP 客户端 │ │ │
│ │ └──────────────────────────────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────────────────────────────────────┐ │ │
│ │ │ 工具层 │ │ │
│ │ │ │ │ │
│ │ │ src/hooks/ ──▶ 自定义 React Hooks │ │ │
│ │ │ src/lib/ ──▶ 工具函数 (api-error, rsa, date 等) │ │ │
│ │ │ src/contexts/ ──▶ React Context (User, Theme 等) │ │ │
│ │ │ src/assets/ ──▶ 静态资源 (图片、图标) │ │ │
│ │ └──────────────────────────────────────────────────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────────────────────────────────────┘
前端路由结构
/ 首页/仪表板
│
├── /auth/ 认证路由
│ ├── /login 登录页
│ ├── /register 注册页
│ ├── /password/reset 密码重置
│ └── /verify-email 邮箱验证
│
├── /init/ 初始化路由
│ ├── /project 初始化项目
│ └── /repository 初始化仓库
│
├── /user/:user 用户资料页
│
├── /settings/ 个人设置
│ ├── /profile 个人资料
│ ├── /account 账户设置
│ ├── /security 安全设置
│ ├── /tokens 访问令牌
│ ├── /ssh-keys SSH 密钥
│ ├── /preferences 偏好设置
│ └── /activity 活动日志
│
├── /project/:project_name/ 项目路由
│ ├── / 项目概览
│ ├── /activity 项目活动
│ ├── /repositories 仓库列表
│ ├── /issues Issue 列表
│ │ ├── /new 新建 Issue
│ │ └── /:issueNumber Issue 详情
│ ├── /boards 看板列表
│ │ └── /:boardId 看板详情
│ ├── /members 成员管理
│ ├── /room 聊天室列表
│ │ └── /:roomId 聊天室
│ ├── /articles 文章
│ ├── /resources 资源
│ └── /settings/ 项目设置
│ ├── /general 通用设置
│ ├── /labels 标签管理
│ ├── /billing 账单
│ ├── /members 成员管理
│ ├── /oauth OAuth 配置
│ └── /webhook Webhook 管理
│
├── /repository/:namespace/:repoName/ 仓库路由
│ ├── / 仓库概览
│ ├── /branches 分支管理
│ ├── /commits 提交历史
│ │ └── /:oid 提交详情
│ ├── /contributors 贡献者
│ ├── /files 文件浏览
│ ├── /tags 标签
│ ├── /pull-requests PR 列表
│ │ ├── /new 新建 PR
│ │ └── /:prNumber PR 详情
│ └── /settings 仓库设置
│
├── /search 全局搜索
└── /notifications 通知中心
后端服务依赖关系
┌──────────────────────────────────────────────────────────────────────────────────────┐
│ apps/ 应用依赖关系 │
│ │
│ apps/app ────────────────┐ │
│ apps/email ──────────────┤ │
│ apps/git-hook ───────────┤──▶ libs/config (全局配置) │
│ apps/gitserver ──────────┤──▶ libs/db (数据库连接池 + 缓存) │
│ apps/migrate ────────────┤──▶ libs/session (会话管理) │
│ apps/operator ───────────┘──▶ libs/migrate (数据库迁移) │
│ ├──▶ libs/service (业务逻辑层) │
│ │ │ │
│ │ ├──▶ libs/api (HTTP 路由) │
│ │ │ │
│ │ ├──▶ libs/agent (AI 服务) │
│ │ ├──▶ libs/avatar (头像处理) │
│ │ ├──▶ libs/email (邮件发送) │
│ │ ├──▶ libs/room (聊天室) │
│ │ │ │ │
│ │ │ └──▶ libs/queue (消息队列) │
│ │ │ │
│ │ └──▶ libs/git (Git 操作) │
│ │ │ │
│ │ ├──▶ git2 (libgit2 绑定) │
│ │ ├──▶ git2-hooks (Git 钩子) │
│ │ └──▶ russh (SSH 协议) │
│ │ │
│ └──▶ libs/models (数据模型 - 所有层共享) │
│ │ │
│ ├──▶ users/ (12 实体) │
│ ├──▶ projects/ (19 实体) │
│ ├──▶ repos/ (16 实体) │
│ ├──▶ issues/ (10 实体) │
│ ├──▶ pull_request/ (5 实体) │
│ ├──▶ rooms/ (11 实体) │
│ ├──▶ agents/ (6 实体) │
│ ├──▶ ai/ (3 实体) │
│ └──▶ system/ (3 实体) │
└──────────────────────────────────────────────────────────────────────────────────────┘
libs/models 实体分组
┌─────────────────────────────────────────────────────────────────────────┐
│ libs/models 实体分组 (92 个) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Users (12 实体) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ user 用户基本信息 │ │
│ │ user_2fa 双因素认证 │ │
│ │ user_activity_log 用户活动日志 │ │
│ │ user_email 用户邮箱 │ │
│ │ user_email_change 邮箱变更历史 │ │
│ │ user_notification 用户通知 │ │
│ │ user_password 用户密码 │ │
│ │ user_password_reset 密码重置令牌 │ │
│ │ user_preferences 用户偏好设置 │ │
│ │ user_relation 用户关系 │ │
│ │ user_ssh_key SSH 密钥 │ │
│ │ user_token 访问令牌 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ Projects (19 实体) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ project 项目基本信息 │ │
│ │ project_access_log 访问日志 │ │
│ │ project_activity 活动记录 │ │
│ │ project_audit_log 审计日志 │ │
│ │ project_billing 账单信息 │ │
│ │ project_billing_history 账单历史 │ │
│ │ project_board 看板 │ │
│ │ project_board_card 看板卡片 │ │
│ │ project_board_column 看板列 │ │
│ │ project_follow 项目关注 │ │
│ │ project_history_name 历史名称 │ │
│ │ project_label 项目标签 │ │
│ │ project_like 项目点赞 │ │
│ │ project_member_ 成员邀请 │ │
│ │ invitations │ │
│ │ project_member_join_ 加入问答 │ │
│ │ answers │ │
│ │ project_member_join_ 加入请求 │ │
│ │ request │ │
│ │ project_member_join_ 加入设置 │ │
│ │ settings │ │
│ │ project_members 项目成员 │ │
│ │ project_watch 项目观看 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ Repos (16 实体) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ repo 仓库基本信息 │ │
│ │ repo_branch 分支信息 │ │
│ │ repo_branch_protect 分支保护 │ │
│ │ repo_collaborator 协作者 │ │
│ │ repo_commit 提交记录 │ │
│ │ repo_fork 仓库 Fork │ │
│ │ repo_history_name 历史名称 │ │
│ │ repo_hook Git 钩子 │ │
│ │ repo_lfs_lock LFS 锁定 │ │
│ │ repo_lfs_object LFS 对象 │ │
│ │ repo_lock 仓库锁定 │ │
│ │ repo_star 仓库星标 │ │
│ │ repo_tag 仓库标签 │ │
│ │ repo_upstream 上游仓库 │ │
│ │ repo_watch 仓库观看 │ │
│ │ repo_webhook 仓库 Webhook │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ Issues (10 实体) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ issue Issue 基本信息 │ │
│ │ issue_assignee Issue 负责人 │ │
│ │ issue_comment Issue 评论 │ │
│ │ issue_comment_reaction 评论表情 │ │
│ │ issue_label Issue 标签 │ │
│ │ issue_pull_request Issue 关联 PR │ │
│ │ issue_reaction Issue 表情 │ │
│ │ issue_repo Issue 仓库 │ │
│ │ issue_subscriber Issue 订阅者 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ Pull Requests (5 实体) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ pull_request PR 基本信息 │ │
│ │ pull_request_commit PR 提交记录 │ │
│ │ pull_request_review PR 审查 │ │
│ │ pull_request_review_ PR 审查评论 │ │
│ │ comment │ │
│ │ pull_request_review_ PR 审查请求 │ │
│ │ request │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ Rooms (11 实体) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ room 聊天室基本信息 │ │
│ │ room_ai 聊天室 AI 配置 │ │
│ │ room_category 聊天室分类 │ │
│ │ room_member 聊天室成员 │ │
│ │ room_message 聊天消息 │ │
│ │ room_message_edit_ 消息编辑历史 │ │
│ │ history │ │
│ │ room_message_reaction 消息表情 │ │
│ │ room_notifications 聊天室通知 │ │
│ │ room_pin 聊天室置顶 │ │
│ │ room_thread 聊天室 Thread │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ Agents (6 实体) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ model AI 模型 │ │
│ │ model_capability 模型能力 │ │
│ │ model_parameter_profile 模型参数配置 │ │
│ │ model_pricing 模型定价 │ │
│ │ model_provider 模型提供商 │ │
│ │ model_version 模型版本 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ AI (3 实体) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ ai_session AI 会话 │ │
│ │ ai_tool_auth AI 工具认证 │ │
│ │ ai_tool_call AI 工具调用 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ System (3 实体) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ label 系统标签 │ │
│ │ notify 系统通知 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
libs/service 业务模块
┌─────────────────────────────────────────────────────────────────────────┐
│ libs/service 业务模块 (93 个文件) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ agent/ AI 模型管理 (8 文件) │
│ ├── code_review AI 代码审查 │
│ ├── model AI 模型管理 │
│ ├── model_capability 模型能力管理 │
│ ├── model_parameter_ 模型参数配置 │
│ │ profile │
│ ├── model_pricing 模型定价管理 │
│ ├── model_version 模型版本管理 │
│ ├── pr_summary PR 摘要生成 │
│ └── provider 模型提供商管理 │
│ │
│ auth/ 认证管理 (10 文件) │
│ ├── captcha 验证码管理 │
│ ├── email 邮箱认证 │
│ ├── login 登录逻辑 │
│ ├── logout 登出逻辑 │
│ ├── me 当前用户信息 │
│ ├── password 密码管理 │
│ ├── register 注册逻辑 │
│ ├── rsa RSA 加密 │
│ └── totp TOTP 双因素认证 │
│ │
│ git/ Git 操作 (16 文件) │
│ ├── archive 仓库归档 │
│ ├── blocking 阻塞操作 │
│ ├── blame Git Blame │
│ ├── blob Blob 操作 │
│ ├── branch 分支操作 │
│ ├── branch_ 分支保护 │
│ │ protection │
│ ├── commit 提交操作 │
│ ├── contributors 贡献者统计 │
│ ├── diff Diff 操作 │
│ ├── init 仓库初始化 │
│ ├── refs 引用操作 │
│ ├── repo 仓库操作 │
│ ├── star 星标操作 │
│ ├── tag 标签操作 │
│ ├── tree 树操作 │
│ └── watch 观看操作 │
│ │
│ issue/ Issue 管理 (8 文件) │
│ ├── assignee 负责人管理 │
│ ├── comment 评论管理 │
│ ├── issue Issue CRUD │
│ ├── label 标签管理 │
│ ├── pull_request Issue 关联 PR │
│ ├── reaction 表情回应 │
│ ├── repo 仓库 Issue │
│ └── subscriber 订阅者管理 │
│ │
│ project/ 项目管理 (20 文件) │
│ ├── activity 项目活动 │
│ ├── audit 审计日志 │
│ ├── avatar 项目头像 │
│ ├── billing 账单管理 │
│ ├── board 看板管理 │
│ ├── can_use 权限检查 │
│ ├── info 项目信息 │
│ ├── init 项目初始化 │
│ ├── invitation 邀请管理 │
│ ├── join_answers 加入问答 │
│ ├── join_request 加入请求 │
│ ├── join_settings 加入设置 │
│ ├── labels 标签管理 │
│ ├── like 点赞管理 │
│ ├── members 成员管理 │
│ ├── repo 仓库管理 │
│ ├── repo_ 仓库权限 │
│ │ permission │
│ ├── settings 项目设置 │
│ ├── standard 项目标准 │
│ ├── transfer_repo 仓库转移 │
│ └── watch 观看管理 │
│ │
│ pull_request/ PR 管理 (5 文件) │
│ ├── merge PR 合并 │
│ ├── pull_request PR CRUD │
│ ├── review PR 审查 │
│ ├── review_comment 审查评论 │
│ └── review_request 审查请求 │
│ │
│ user/ 用户管理 (12 文件) │
│ ├── access_key 访问密钥 │
│ ├── avatar 用户头像 │
│ ├── chpc 用户 CHPC │
│ ├── notification 通知管理 │
│ ├── notify 通知发送 │
│ ├── preferences 偏好设置 │
│ ├── profile 用户资料 │
│ ├── projects 用户项目 │
│ ├── repository 用户仓库 │
│ ├── ssh_key SSH 密钥 │
│ ├── subscribe 订阅管理 │
│ └── user_info 用户信息 │
│ │
│ utils/ 工具函数 (3 文件) │
│ ├── project 项目工具 │
│ ├── repo 仓库工具 │
│ └── user 用户工具 │
│ │
│ ws_token WebSocket Token 服务 │
│ error 服务层错误 │
│ Pager 分页结构体 │
└─────────────────────────────────────────────────────────────────────────┘
libs/api 路由模块
┌─────────────────────────────────────────────────────────────────────────┐
│ libs/api 路由模块 (100 个文件) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ auth/ 认证路由 (9 文件) │
│ ├── captcha 验证码接口 │
│ ├── email 邮箱认证接口 │
│ ├── login 登录接口 │
│ ├── logout 登出接口 │
│ ├── me 当前用户接口 │
│ ├── password 密码接口 │
│ ├── register 注册接口 │
│ ├── totp TOTP 接口 │
│ └── ws_token WebSocket Token 接口 │
│ │
│ git/ Git 路由 (18 文件) │
│ ├── archive 归档接口 │
│ ├── blame Blame 接口 │
│ ├── blob Blob 接口 │
│ ├── branch 分支接口 │
│ ├── branch_ 分支保护接口 │
│ │ protection │
│ ├── commit 提交接口 │
│ ├── contributors 贡献者接口 │
│ ├── diff Diff 接口 │
│ ├── init 初始化接口 │
│ ├── refs 引用接口 │
│ ├── repo 仓库接口 │
│ ├── star 星标接口 │
│ ├── tag 标签接口 │
│ ├── tree 树接口 │
│ └── watch 观看接口 │
│ │
│ project/ 项目路由 (17 文件) │
│ ├── activity 活动接口 │
│ ├── audit 审计接口 │
│ ├── billing 账单接口 │
│ ├── board 看板接口 │
│ ├── info 信息接口 │
│ ├── init 初始化接口 │
│ ├── invitation 邀请接口 │
│ ├── join_answers 加入问答接口 │
│ ├── join_request 加入请求接口 │
│ ├── join_settings 加入设置接口 │
│ ├── labels 标签接口 │
│ ├── like 点赞接口 │
│ ├── members 成员接口 │
│ ├── repo 仓库接口 │
│ ├── settings 设置接口 │
│ ├── transfer_repo 仓库转移接口 │
│ └── watch 观看接口 │
│ │
│ issue/ Issue 路由 (10 文件) │
│ ├── assignee 负责人接口 │
│ ├── comment 评论接口 │
│ ├── comment_ 评论表情接口 │
│ │ reaction │
│ ├── issue_label Issue 标签接口 │
│ ├── label 标签接口 │
│ ├── pull_request Issue 关联 PR 接口 │
│ ├── reaction 表情接口 │
│ ├── repo 仓库 Issue 接口 │
│ └── subscriber 订阅者接口 │
│ │
│ room/ 聊天室路由 (14 文件) │
│ ├── ai AI 接口 │
│ ├── category 分类接口 │
│ ├── draft_and_ 草稿和历史接口 │
│ │ history │
│ ├── member 成员接口 │
│ ├── message 消息接口 │
│ ├── notification 通知接口 │
│ ├── pin 置顶接口 │
│ ├── reaction 表情接口 │
│ ├── room 聊天室接口 │
│ ├── thread Thread 接口 │
│ ├── ws WebSocket 接口 │
│ ├── ws_handler WebSocket 处理器 │
│ ├── ws_types WebSocket 类型 │
│ └── ws_universal 通用 WebSocket 接口 │
│ │
│ pull_request/ PR 路由 (5 文件) │
│ ├── merge 合并接口 │
│ ├── pull_request PR CRUD 接口 │
│ ├── review 审查接口 │
│ ├── review_comment 审查评论接口 │
│ └── review_request 审查请求接口 │
│ │
│ agent/ AI Agent 路由 (8 文件) │
│ ├── code_review 代码审查接口 │
│ ├── model 模型接口 │
│ ├── model_ 模型能力接口 │
│ │ capability │
│ ├── model_ 模型参数配置接口 │
│ │ parameter_profile │
│ ├── model_pricing 模型定价接口 │
│ ├── model_version 模型版本接口 │
│ ├── pr_summary PR 摘要接口 │
│ └── provider 模型提供商接口 │
│ │
│ user/ 用户路由 (10 文件) │
│ ├── access_key 访问密钥接口 │
│ ├── chpc CHPC 接口 │
│ ├── notification 通知接口 │
│ ├── preferences 偏好接口 │
│ ├── profile 资料接口 │
│ ├── projects 项目接口 │
│ ├── repository 仓库接口 │
│ ├── ssh_key SSH 密钥接口 │
│ ├── subscribe 订阅接口 │
│ └── user_info 用户信息接口 │
│ │
│ openapi/ OpenAPI 文档生成 │
│ route/ 路由聚合 │
│ error/ API 错误处理 │
└─────────────────────────────────────────────────────────────────────────┘
服务间通信机制
┌────────────────────────────────────────────────────────────────────────────────────────────┐
│ 服务间通信机制 │
│ │
│ ┌──────────────────────────────────────────────────────────────────────────────────┐ │
│ │ Redis (核心通信总线) │ │
│ │ │ │
│ │ Redis Streams ──▶ 异步消息队列 │ │
│ │ ├── room:stream:{room_id} 房间消息持久化 │ │
│ │ └── email:stream 邮件发送队列 │ │
│ │ │ │
│ │ Redis Pub/Sub ──▶ 实时事件广播 │ │
│ │ ├── room:pub:{room_id} 房间级广播 │ │
│ │ └── project:pub:{proj_id} 项目级广播 │ │
│ │ │ │
│ │ Redis Lists ──▶ 任务队列 │ │
│ │ ├── {hook}:sync Git Hook 同步任务 │ │
│ │ ├── {hook}:fsck Git Hook 完整性检查 │ │
│ │ └── {hook}:gc Git Hook 垃圾回收 │ │
│ └──────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────────────────────┐ │
│ │ HTTP/REST API ──▶ 同步服务调用 │ │
│ │ ├── app ↔ gitserver Git 元数据查询 │ │
│ │ └── app → 外部 AI 服务 OpenAI 兼容 API 调用 │ │
│ └──────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────────────────────┐ │
│ │ WebSocket ──▶ 客户端实时通信 │ │
│ │ ├── /ws 通用 WebSocket (多房间订阅) │ │
│ │ ├── /ws/rooms/{room_id} 房间级 WebSocket │ │
│ │ └── /ws/projects/{proj_id} 项目级 WebSocket │ │
│ └──────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────────────────────┐ │
│ │ Kubernetes CRD + Operator ──▶ 基础设施编排 │ │
│ │ ├── apps.code.dev App CRD → Deployment + Service │ │
│ │ ├── gitservers.code.dev GitServer CRD → Deployment + Service + PVC │ │
│ │ ├── emailworkers.code.dev EmailWorker CRD → Deployment │ │
│ │ ├── githooks.code.dev GitHook CRD → Deployment + ConfigMap │ │
│ │ └── migrates.code.dev Migrate CRD → Job │ │
│ └──────────────────────────────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────────────────────────────────┘
数据流详解
1. 聊天消息流程
客户端 A app 实例 1 Redis app 实例 2 客户端 B
│ │ │ │ │
│── WS 发送消息 ───────▶│ │ │ │
│ │── XADD ──────────────▶│ │ │
│ │ room:stream:{id} │ │ │
│ │── PUBLISH ────────────▶│ │ │
│ │ room:pub:{id} │ │ │
│ │ │── 事件通知 ────────────▶│ │
│ │ │ │── WS 推送 ────────────▶│
│◀─ ACK ───────────────│ │ │ │
│ │ │ │ │
│ │◀──── XREADGROUP ─────│ │ │
│ │ (room_worker) │ │ │
│ │── 写入 PostgreSQL ────│ │ │
2. Git Push 流程
客户端 gitserver Redis git-hook PostgreSQL
│ │ │ │ │
│── git push ────────▶│ │ │ │
│ (HTTP/SSH) │ │ │ │
│ │── git-receive-pack──▶│ │ │
│ │── LPUSH ────────────▶│ │ │
│ │ {hook}:sync │ │ │
│◀─ ACK ─────────────│ │ │ │
│ │ │── BRPOPLPUSH ─────▶│ │
│ │ │ │── 同步元数据 ────────▶│
│ │ │ │── 可选: fsck/gc ─────▶│
│ │ │◀── XACK ──────────│ │
3. 邮件发送流程
业务逻辑 app Redis email-worker SMTP
│ │ │ │ │
│── 触发邮件 ────────▶│ │ │ │
│ │── XADD ───────────▶│ │ │
│ │ email:stream │ │ │
│◀─ 返回 ───────────│ │ │ │
│ │ │── XREADGROUP ─────▶│ │
│ │ │ │── 渲染模板 ──────────▶│
│ │ │ │── SMTP 发送 ─────────▶│
│ │ │◀── XACK ──────────│ │
4. AI 聊天流程
客户端 app OpenAI API Qdrant PostgreSQL
│ │ │ │ │
│── AI 消息 ──────────▶│ │ │ │
│ │── 生成 Embedding ──▶│ │ │
│ │◀──── 向量 ──────────│ │ │
│ │── 存储向量 ─────────────────────────────▶│ │
│ │── 流式 Chat ─────────▶│ │ │
│◀─ Stream Chunk ──────│◀──── Stream ─────────│ │ │
│ │ │ │ │
│ │── 保存消息 ────────────────────────────────────────────────▶│
│ │── 检索相似消息 ────────────────────────▶│ │
│ │◀── 相似结果 ───────────────────────────│ │
技术栈汇总
后端技术栈
| 类别 | 技术 | 版本 |
|---|---|---|
| 语言 | Rust | Edition 2024 |
| Web 框架 | Actix-web | 4.13.0 |
| WebSocket | Actix-ws | 0.4.0 |
| ORM | SeaORM | 2.0.0-rc.37 |
| 数据库 | PostgreSQL | - |
| 缓存/消息 | Redis | 1.1.0 |
| 向量库 | Qdrant | 1.17.0 |
| Git | git2 / russh | 0.20.0 / 0.55.0 |
| 邮件 | Lettre | 0.11.19 |
| AI | async-openai | 0.34.0 |
| K8s | kube-rs | 0.98 |
| gRPC | Tonic | 0.14.5 |
| 日志 | slog / tracing | 2.8 / 0.1.44 |
前端技术栈
| 类别 | 技术 | 版本 |
|---|---|---|
| 语言 | TypeScript | 5.9 |
| 框架 | React | 19.2 |
| 路由 | React Router | 7.13 |
| 构建 | Vite + SWC | 8.0 |
| UI | shadcn/ui + Tailwind | 4.11 / 4.2 |
| 状态 | TanStack Query | 5.96 |
| HTTP | Axios + OpenAPI 生成 | 1.7 |
| Markdown | react-markdown + Shiki | 10 / 1 |
| 拖拽 | dnd-kit | 6.3 |
Docker 与 K8s 部署
┌──────────────────────────────────────────────────────────────────────────────┐
│ Docker 镜像 (6 个) │
│ │
│ docker/app.Dockerfile ──▶ apps/app 主应用镜像 │
│ docker/email-worker.Dockerfile ──▶ apps/email 邮件 Worker 镜像 │
│ docker/git-hook.Dockerfile ──▶ apps/git-hook Git Hook 镜像 │
│ docker/gitserver.Dockerfile ──▶ apps/gitserver Git Server 镜像 │
│ docker/migrate.Dockerfile ──▶ apps/migrate 数据库迁移镜像 │
│ docker/operator.Dockerfile ──▶ apps/operator K8s Operator 镜像 │
└──────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────┐
│ Kubernetes CRD (5 个) │
│ │
│ docker/crd/app-crd.yaml ──▶ apps.code.dev │
│ docker/crd/gitserver-crd.yaml ──▶ gitservers.code.dev │
│ docker/crd/email-worker-crd.yaml ──▶ emailworkers.code.dev │
│ docker/crd/git-hook-crd.yaml ──▶ githooks.code.dev │
│ docker/crd/migrate-crd.yaml ──▶ migrates.code.dev │
└──────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────┐
│ K8s 部署配置 │
│ │
│ docker/operator/deployment.yaml ──▶ Operator Deployment │
│ docker/operator/example/ ──▶ CRD 使用示例 │
│ code-system.yaml │
└──────────────────────────────────────────────────────────────────────────────┘
关键设计特点
| 特点 | 描述 |
|---|---|
| Monorepo 架构 | Rust workspace + 前端 monorepo,统一管理 |
| 清晰分层 | 路由层 → 业务层 → 基础设施层 → 存储层,职责明确 |
| 异步优先 | 基于 Redis Streams 的异步消息处理 |
| 实时通信 | WebSocket + Redis Pub/Sub 实现多实例同步 |
| K8s 原生 | Operator + 5 个 CRD 管理全生命周期 |
| 类型安全 | OpenAPI 自动生成 TypeScript 客户端 |
| 可扩展 | 服务独立部署,水平扩展 |
| Git 兼容 | 完整支持 HTTP/SSH Git 协议 + LFS |
| AI 集成 | 原生集成 OpenAI 兼容 API + 向量检索 |
| 92 个数据库实体 | 覆盖用户、项目、仓库、Issue、PR、聊天室、AI 等完整业务域 |