Skip to content

nanzhijin/DataAnalize-SAS-

Repository files navigation

TYBI — 团队数据资产管理平台

面向中小团队的实时协作与数据资产管理平台,覆盖即时通讯、文件索引、公告发布与权限管控。

项目定位

TYBI 是一个 OLTP 工作负载 的数据资产管理系统,解决团队协作中信息碎片化的问题——用统一平台替代"微信传文件 + Excel 记台账"的松散流程。

  • 聊天是管道,文件是资产:消息即时送达,文件持久索引、可追溯
  • 多数据库分工:PostgreSQL 负责事务一致性,MongoDB 存高吞吐消息体,Redis 驱动实时推送,MinIO 托管文件对象
  • Outbox 模式:保证消息不丢、不乱序,发消息和写消息解耦

技术栈

技术 用途
后端运行时 Node.js + Express + TypeScript (strict) REST API + 中间件
关系型数据库 PostgreSQL 16 + Prisma ORM 用户、团队、文件元数据、消息索引、公告
文档数据库 MongoDB 7 聊天消息体 (高写入吞吐)
缓存/消息中间件 Redis 7 JWT 令牌存储、PubSub 广播、Socket.IO 适配器
对象存储 MinIO (S3 兼容) 文件/头像/附件,预签名 URL 上传下载
实时通道 SSE + Socket.IO (双通道) 消息推送、频道列表同步
前端 Vue 3 (Composition API) + Pinia + Tailwind CSS SPA
桌面端 Electron 33 + vite-plugin-electron 独立客户端
部署 Docker Compose + Nginx 反向代理 容器化编排
输入验证 Zod 全路由覆盖
安全 Helmet + CORS + rate-limit + bcryptjs + JWT 轮换 纵深防护

架构

Client (Browser / Electron)
       │
       ├── HTTP REST ────── Express API Server ──── PostgreSQL (transactions)
       │        │                                     MongoDB (message bodies)
       │        ├── POST /chat/* ──→ Outbox table ──→ Outbox Worker ──→ Redis PubSub
       │        │                                                           │
       ├── SSE ◄────────────────────────────────────────────────────────────┘
       │        (channel messages / channel list / user events)
       │
       └── WebSocket ◄──── Socket.IO Server ──── Redis Adapter ──── PubSub
                (message send/ack, real-time sync)

关键设计决策

Outbox 模式(消息可靠性) 消息发送请求先写入 PostgreSQL Outbox 表(与 MessageIndex 在同一事务中),Worker 异步消费 Outbox 写入 MongoDB 并发布 Redis 事件。发消息的 HTTP 请求不阻塞消息分发,且保证 at-least-once 语义。

预签名 URL(文件安全) 上传:客户端向服务器请求预签名 PUT URL → 直传 MinIO,服务器不接触文件流。 下载:服务器生成短时效预签名 GET URL,MinIO 直出,避免代理文件消耗带宽。

JWT 双令牌轮换 Access token (短时效) + Refresh token (Redis 存储)。刷新时旧 token 立即撤销,新 token 发放。SSE 端点通过 ?token= query 参数兼容 EventSource 无法设置 Authorization 头的限制。

SSE + WebSocket 双通道 SSE 作为最小可用实时通道(轻量、HTTP 兼容),WebSocket 作为增强通道(双向、低延迟),两者统一桥接到 Redis PubSub,事件源一致。

功能

  • 团队管理:创建团队、6 位邀请码加入、角色权限 (boss/owner/manager/member)
  • 频道消息:团队内频道创建、消息发送/查询、附件上传
  • 私聊:点对点消息,按 peer 对隔离
  • 文件管理:上传、下载、搜索、过滤(名称/类型/大小/日期/标签)、批量删除
  • 标签系统:用户级自定义标签,文件多标签关联
  • 公告系统:团队公告发布、隐藏、已读回执
  • 用户设置:头像上传、主题色
  • 实时通知:频道列表变更、新消息推送
  • 桌面客户端:Electron 打包,独立窗口运行

快速开始

环境要求

  • Node.js >= 18.17
  • Docker Desktop (或本地安装 PostgreSQL 16 + Redis 7 + MongoDB 7 + MinIO)

一键启动

# 1. 安装依赖
cd tybiBackend && npm install && npx prisma generate
cd ../tybiFrontend && npm install

# 2. 启动基础设施 (Docker)
cd ../tybiBackend
npm run dev:infra    # 启动 PG + Redis + Mongo + MinIO + Nginx

# 3. 启动后端 (三个终端)
npm run dev           # API 服务器 :4000
npm run worker:dev    # Outbox Worker
npm run worker:file:dev  # 文件处理 Worker

# 4. 启动前端
cd ../tybiFrontend
npm run dev           # Vite 开发服务器 :5173

或使用根目录 PowerShell 脚本一键拉起:

.\dev-win.ps1

Docker Compose 全栈启动

cd tybiBackend
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d

项目结构

TYBI/
├── tybiBackend/               # Express API 后端
│   ├── prisma/schema.prisma    # 数据模型 (10 张表)
│   ├── src/
│   │   ├── index.ts            # 入口:HTTP + Socket.IO server
│   │   ├── server.ts           # Express 配置 + 中间件 + 路由挂载
│   │   ├── routes/             # auth / teams / chat / realtime / files / users / tags / announcements
│   │   ├── services/           # chat (Outbox 入队)
│   │   ├── workers/            # outboxWorker / fileProcessor
│   │   ├── realtime/ws.ts      # Socket.IO 服务器
│   │   ├── db/                 # prisma / redis / mongo 客户端
│   │   ├── middleware/auth.ts  # JWT 验证 + 角色注入
│   │   └── utils/              # s3 / env / error
│   ├── docker-compose.yml
│   └── Dockerfile
├── tybiFrontend/               # Vue 3 SPA 前端
│   ├── src/
│   │   ├── views/              # 页面视图
│   │   ├── components/         # UI 组件 (team / workspace)
│   │   ├── stores/             # Pinia 状态管理 (5 个 store)
│   │   ├── router/             # Vue Router 配置
│   │   └── utils/              # api (HTTP 客户端) / wsClient (WebSocket)
│   ├── electron-main.ts        # Electron 主进程
│   ├── preload.ts              # Electron 预加载脚本
│   └── vite.config.ts
└── dev-win.ps1                 # Windows 开发启动脚本

License

MIT

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors