fischerX/README.md

300 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FischerX
Fischer公司开发底座 — 适配国内运行环境的全栈Monorepo项目理念对标John Rush的Mars Stack/Mars Foundation。
## 技术栈
### 前端
- **框架**: Next.js 14+ (App Router)
- **语言**: TypeScript (严格模式)
- **样式**: Tailwind CSS
- **UI组件**: Shadcn UI
- **状态管理**: Zustand + React Query
- **表单**: React Hook Form + Zod
- **测试**: Vitest + Playwright
### 后端
- **框架**: NestJS
- **ORM**: Prisma
- **数据库**: PostgreSQL
- **缓存**: Redis
- **认证**: JWT + Passport
- **测试**: Jest
### 基础设施
- **容器化**: Docker + Docker Compose
- **编排**: Kubernetes (阿里云ACK)
- **IaC**: Terraform
- **CI/CD**: GitHub Actions
- **监控**: Prometheus + Grafana + Loki + Jaeger
### 工具链
- **包管理**: pnpm
- **构建系统**: Turborepo
- **代码规范**: ESLint + Prettier
- **CLI工具**: @fischerx/cli
## 核心模块
| 模块 | 说明 | 状态 |
|------|------|------|
| 用户管理 | 用户CRUD、头像上传 | ✅ 完成 |
| 认证授权 | JWT、Session、手机号登录、微信/支付宝OAuth、实名认证、MFA | ✅ 完成 |
| 权限控制 | RBAC模型、角色管理、权限分配、装饰器守卫 | ✅ 完成 |
| 文件存储 | 阿里云OSS、腾讯云COS、MinIO、图片处理、CDN | ✅ 完成 |
| 支付系统 | 支付宝、微信支付、银联适配器、退款、对账 | ✅ 完成 |
| 消息通知 | 邮件、短信、推送、站内信(适配器模式) | ✅ 完成 |
| 内容管理 | 文章、分类、标签、评论、版本控制 | ✅ 后端完成 |
| 监控告警 | Prometheus + Grafana + AlertManager + Loki + Jaeger | ✅ 完成 |
| CLI工具 | 项目初始化、代码生成、部署命令 | ✅ 完成 |
## 快速开始
### 环境要求
- Node.js >= 18.0.0
- pnpm >= 8.0.0
- Docker & Docker Compose
- PostgreSQL 15+
- Redis 7+
### 安装
```bash
# 克隆项目
git clone http://8.153.107.96/fischer/fischerX.git
cd fischerX
# 安装依赖
pnpm install
```
### 本地开发
```bash
# 1. 启动基础设施PostgreSQL + Redis
docker-compose up -d postgres redis
# 2. 配置环境变量
cp services/api/.env.example services/api/.env
# 编辑 .env 填入数据库连接、Redis连接、JWT密钥等
# 3. 运行数据库迁移
cd services/api
npx prisma migrate dev
cd ../..
# 4. 启动后端API服务
cd services/api
pnpm start:dev
# 5. 启动前端Web应用
cd apps/web
pnpm dev
```
### 访问地址
| 服务 | 地址 |
|------|------|
| 前端Web | http://localhost:3000 |
| 后端API | http://localhost:3001/api/v1/health |
| Grafana | http://localhost:3001 (admin/fischerx123) |
| Prometheus | http://localhost:9090 |
| Jaeger | http://localhost:16686 |
## 项目结构
```
FischerX/
├── apps/ # 应用层
│ ├── web/ # Web应用 (Next.js)
│ └── admin/ # 管理后台 (占位)
├── packages/ # 共享包
│ ├── core/ # 核心业务逻辑 (@fischerx/core)
│ ├── ui/ # 共享UI组件 (@fischerx/ui)
│ ├── utils/ # 工具函数 (@fischerx/utils)
│ ├── types/ # 类型定义 (@fischerx/types)
│ ├── config/ # 配置管理 (@fischerx/config)
│ └── constants/ # 常量定义 (@fischerx/constants)
├── services/ # 后端服务
│ └── api/ # API服务 (NestJS)
│ ├── prisma/ # 数据库Schema
│ └── src/modules/ # 业务模块
│ ├── auth/ # 认证授权
│ ├── rbac/ # 权限控制
│ ├── user/ # 用户管理
│ ├── file/ # 文件存储
│ ├── payment/ # 支付系统
│ ├── notification/ # 消息通知
│ ├── content/ # 内容管理
│ ├── health/ # 健康检查
│ ├── cache/ # 缓存服务
│ └── monitoring/ # 监控集成
├── infra/ # 基础设施
│ ├── db/ # 数据库Docker配置
│ ├── k8s/ # Kubernetes配置
│ ├── monitoring/ # 监控栈 (Prometheus/Grafana/Loki/Jaeger)
│ ├── terraform/ # 阿里云资源管理
│ └── envs/ # 多环境配置 (dev/test/prod)
├── tools/ # 开发工具
│ └── cli/ # CLI工具 (@fischerx/cli)
├── docs/ # 文档
│ ├── architecture/ # 架构文档
│ ├── requirements/ # 需求文档
│ ├── design/ # 设计文档
│ ├── development/ # 开发文档
│ ├── api/ # API文档
│ ├── testing/ # 测试文档
│ ├── deployment/ # 部署文档
│ ├── operations/ # 运维文档
│ ├── user/ # 用户文档
│ └── templates/ # 文档模板
├── .github/workflows/ # CI/CD (8个Workflow)
├── docker-compose.yml # Docker Compose
├── turbo.json # Turborepo配置
├── pnpm-workspace.yaml # pnpm工作空间
└── package.json # 根package.json
```
## API端点
### 认证授权
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /api/v1/auth/register | 用户注册 |
| POST | /api/v1/auth/login | 密码登录 |
| POST | /api/v1/auth/sms/send | 发送验证码 |
| POST | /api/v1/auth/sms/login | 验证码登录 |
| POST | /api/v1/auth/wechat/login | 微信OAuth登录 |
| POST | /api/v1/auth/alipay/login | 支付宝OAuth登录 |
| POST | /api/v1/auth/realname/verify | 实名认证 |
| POST | /api/v1/auth/mfa/enable | 启用MFA |
| POST | /api/v1/auth/mfa/verify | 验证MFA |
### 用户管理
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | /api/v1/users/me | 当前用户信息 |
| PUT | /api/v1/users/me | 更新用户信息 |
| POST | /api/v1/users/me/avatar | 上传头像 |
| GET | /api/v1/users | 用户列表 (管理员) |
### 权限控制
| 方法 | 路径 | 说明 |
|------|------|------|
| CRUD | /api/v1/roles | 角色管理 |
| CRUD | /api/v1/permissions | 权限管理 |
| POST | /api/v1/roles/:id/permissions | 分配权限 |
| POST | /api/v1/users/:id/roles | 分配角色 |
### 支付系统
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /api/v1/payment/orders | 创建支付订单 |
| GET | /api/v1/payment/orders/:id | 查询订单 |
| POST | /api/v1/payment/refunds | 申请退款 |
| POST | /api/v1/payment/callback/:channel | 支付回调 |
### 文件存储
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /api/v1/files/upload | 上传文件 |
| GET | /api/v1/files | 文件列表 |
| GET | /api/v1/files/:id | 文件详情 |
| DELETE | /api/v1/files/:id | 删除文件 |
### 消息通知
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /api/v1/notifications | 发送通知 |
| GET | /api/v1/notifications | 通知列表 |
| PUT | /api/v1/notifications/:id/read | 标记已读 |
## 底座使用方式
### 方式一Monorepo模式推荐
在FischerX Monorepo中创建新应用自动继承共享包
```bash
fischerx create-app my-crm --type=admin
```
### 方式二:独立项目模式
从FischerX模板创建独立项目
```bash
fischerx init client-project --template=standalone
```
### 方式三API服务模式
部署FischerX作为共享服务通过API调用底座功能。
## CLI工具
```bash
# 安装
cd tools/cli && pnpm install && pnpm build
# 项目管理
fischerx init <project-name> # 初始化新项目
fischerx create-app <app-name> # 创建新应用
fischerx create-package <pkg-name> # 创建新共享包
# 代码生成
fischerx generate page <name> # 生成页面
fischerx generate component <name> # 生成组件
fischerx generate api <name> # 生成API
fischerx generate module <name> # 生成完整模块
# 部署
fischerx deploy --env dev # 部署到开发环境
fischerx deploy --env prod # 部署到生产环境
# 其他
fischerx doctor # 检查项目健康
fischerx info # 显示项目信息
```
## 国内环境适配
| 维度 | 适配方案 |
|------|---------|
| 云服务 | 阿里云(首选)、腾讯云(备选)、华为云(备选) |
| 认证 | 手机号验证码、微信OAuth、支付宝OAuth、实名认证 |
| 支付 | 微信支付、支付宝、银联 |
| 存储 | 阿里云OSS、腾讯云COS、MinIO私有化 |
| 短信 | 阿里云短信 |
| 邮件 | SMTP / 阿里云邮件 |
| 监控 | Prometheus + Grafana / 阿里云ARMS |
| 日志 | Loki / 阿里云SLS |
| 部署 | 阿里云ACK / 自建K8s |
| CDN | 阿里云CDN |
## 可用脚本
| 脚本 | 说明 |
|------|------|
| `pnpm install` | 安装所有依赖 |
| `pnpm build` | 构建所有包和应用 |
| `pnpm dev` | 启动开发服务器 |
| `pnpm lint` | 运行ESLint检查 |
| `pnpm test` | 运行所有测试 |
| `pnpm format` | 使用Prettier格式化代码 |
## 待完善功能
| 优先级 | 功能 | 说明 |
|--------|------|------|
| P0 | 订单系统模块 | 独立Order模块订单状态机 |
| P0 | 企业微信通知 | WeComChannelService适配器 |
| P0 | 邮件真实发送 | 集成Nodemailer/阿里云邮件 |
| P0 | 短信真实发送 | 集成阿里云短信SDK |
| P1 | 用户管理前端页面 | 用户列表/编辑/删除 |
| P1 | 通知中心前端页面 | 通知列表/设置 |
| P1 | 订单前端页面 | 订单列表/详情 |
| P2 | 支付真实SDK集成 | 支付宝/微信支付真实SDK |
| P2 | 内容审核 | 阿里云绿网内容安全 |
| P2 | @fischerx/client-sdk | 客户端SDK包 |
## License
Private - Fischer Company