feat: 完成 NestJS 后端核心底座开发 (M1-M6) 和 Ant Design Vue 前端迁移

主要更新:
1. 后端核心底座完成 (M1-M6):
   - 健康检查、指标监控、分布式锁
   - 事件总线、队列系统、事务管理
   - 安全守卫、多租户隔离、存储适配器
   - 审计日志、配置管理、多语言支持

2. 前端迁移到 Ant Design Vue:
   - 从 Element Plus 迁移到 Ant Design Vue
   - 完善 system 模块 (role/menu/dept)
   - 修复依赖和配置问题

3. 文档完善:
   - AI 开发工作流文档
   - 架构约束和开发规范
   - 项目进度跟踪

4. 其他改进:
   - 修复编译错误和类型问题
   - 完善测试用例
   - 优化项目结构
This commit is contained in:
万物街
2025-08-27 11:24:22 +08:00
parent be07b9ffec
commit 1cd5d3bdef
696 changed files with 36708 additions and 16868 deletions

View File

@@ -90,52 +90,30 @@ import { h } from 'vue';
import { globalShareState, IconPicker } from '@vben/common-ui';
import { $t } from '@vben/locales';
const AutoComplete = defineAsyncComponent(
() => import('ant-design-vue/es/auto-complete'),
);
const Button = defineAsyncComponent(() => import('ant-design-vue/es/button'));
const Checkbox = defineAsyncComponent(
() => import('ant-design-vue/es/checkbox'),
);
const CheckboxGroup = defineAsyncComponent(() =>
import('ant-design-vue/es/checkbox').then((res) => res.CheckboxGroup),
);
const DatePicker = defineAsyncComponent(
() => import('ant-design-vue/es/date-picker'),
);
const Divider = defineAsyncComponent(() => import('ant-design-vue/es/divider'));
const Input = defineAsyncComponent(() => import('ant-design-vue/es/input'));
const InputNumber = defineAsyncComponent(
() => import('ant-design-vue/es/input-number'),
);
const InputPassword = defineAsyncComponent(() =>
import('ant-design-vue/es/input').then((res) => res.InputPassword),
);
const Mentions = defineAsyncComponent(
() => import('ant-design-vue/es/mentions'),
);
const Radio = defineAsyncComponent(() => import('ant-design-vue/es/radio'));
const RadioGroup = defineAsyncComponent(() =>
import('ant-design-vue/es/radio').then((res) => res.RadioGroup),
);
const RangePicker = defineAsyncComponent(() =>
import('ant-design-vue/es/date-picker').then((res) => res.RangePicker),
);
const Rate = defineAsyncComponent(() => import('ant-design-vue/es/rate'));
const Select = defineAsyncComponent(() => import('ant-design-vue/es/select'));
const Space = defineAsyncComponent(() => import('ant-design-vue/es/space'));
const Switch = defineAsyncComponent(() => import('ant-design-vue/es/switch'));
const Textarea = defineAsyncComponent(() =>
import('ant-design-vue/es/input').then((res) => res.Textarea),
);
const TimePicker = defineAsyncComponent(
() => import('ant-design-vue/es/time-picker'),
);
const TreeSelect = defineAsyncComponent(
() => import('ant-design-vue/es/tree-select'),
);
const Upload = defineAsyncComponent(() => import('ant-design-vue/es/upload'));
import {
AutoComplete,
Button,
Checkbox,
CheckboxGroup,
DatePicker,
Divider,
Input,
InputNumber,
InputPassword,
Mentions,
notification,
Radio,
RadioGroup,
RangePicker,
Rate,
Select,
Space,
Switch,
Textarea,
TimePicker,
TreeSelect,
Upload,
} from 'ant-design-vue';
const withDefaultPlaceholder = <T extends Component>(
component: T,
@@ -326,12 +304,10 @@ useVbenForm 返回的第二个参数,是一个对象,包含了一些表单
| 属性名 | 描述 | 类型 | 默认值 |
| --- | --- | --- | --- |
| layout | 表单项布局 | `'horizontal' \| 'vertical'\| 'inline'` | `horizontal` |
| layout | 表单项布局 | `'horizontal' \| 'vertical'` | `horizontal` |
| showCollapseButton | 是否显示折叠按钮 | `boolean` | `false` |
| wrapperClass | 表单的布局基于tailwindcss | `any` | - |
| actionWrapperClass | 表单操作区域class | `any` | - |
| actionLayout | 表单操作按钮位置 | `'newLine' \| 'rowEnd' \| 'inline'` | `rowEnd` |
| actionPosition | 表单操作按钮对齐方式 | `'left' \| 'center' \| 'right'` | `right` |
| handleReset | 表单重置回调 | `(values: Record<string, any>,) => Promise<void> \| void` | - |
| handleSubmit | 表单提交回调 | `(values: Record<string, any>,) => Promise<void> \| void` | - |
| handleValuesChange | 表单值变化回调 | `(values: Record<string, any>, fieldsChanged: string[]) => void` | - |

View File

@@ -0,0 +1,76 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
sidebar: false
hero:
name: Vben Admin
text: Enterprise-Level Management System Framework
tagline: Fully Upgraded, Ready to Use, Simple and Efficient
image:
src: https://unpkg.com/@vbenjs/static-source@0.1.7/source/logo-v1.webp
alt: Vben Admin
actions:
- theme: brand
text: Get Started ->
link: /en/guide/introduction/vben
- theme: alt
text: Live Preview
link: https://www.vben.pro
- theme: alt
text: View on GitHub
link: https://github.com/vbenjs/vue-vben-admin
features:
- icon: 🚀
title: Latest Technology Stack
details: Based on the latest technology stack, including Vue3, Pinia, Vue Router, TypeScript, etc.
link: /en/guide/introduction/quick-start
linkText: Get Started
- icon: 🦄
title: Rich Configurations
details: An enterprise-level frontend solution for middle and back-end systems, offering a wealth of components, templates, and various preference settings.
link: /en/guide/essentials/settings
linkText: Configuration Documentation
- icon: 🎨
title: Theme Customization
details: Easily switch between various themes through simple configurations, catering to personalized needs.
link: /en/guide/in-depth/theme
linkText: Theme Documentation
- icon: 🌐
title: Internationalization
details: Built-in internationalization support with multiple languages to meet global needs.
link: /en/guide/in-depth/locale
linkText: Internationalization Documentation
- icon: 🔐
title: Access Control
details: Built-in access control solutions supporting various permission management methods to meet different access requirements.
link: /en/guide/in-depth/access
linkText: Access Documentation
- title: Vite
icon:
src: /logos/vite.svg
details: Modern frontend build tool with fast cold start and instant hot updates.
link: https://vitejs.dev/
linkText: Official Site
- title: Shadcn UI
icon:
src: /logos/shadcn-ui.svg
details: Core built on Shadcn UI + Tailwindcss, with business support for any UI framework.
link: https://www.shadcn-vue.com/
linkText: Official Site
- title: Turbo Repo
icon:
src: /logos/turborepo.svg
details: Standardized monorepo architecture using pnpm + monorepo + turbo for enterprise-level development standards.
link: https://turbo.build/
linkText: Official Site
- title: Nitro Mock Server
icon:
src: /logos/nitro.svg
details: Built-in Nitro Mock service makes your mock service more powerful.
link: https://nitro.unjs.io/
linkText: Official Site
---
<VbenContributors />

View File

@@ -4,108 +4,84 @@ layout: home
sidebar: false
hero:
name: Vben Admin
name: WWJCloud-Admin
text: 企业级管理系统框架
tagline: 全新升级,开箱即用,简单高效
image:
src: https://unpkg.com/@vbenjs/static-source@0.1.7/source/logo-v1.webp
alt: Vben Admin
src: https://t.wanwujie.cn/img/1/2025/08/24/68aad11c8deb7.webp
alt: wwjcloud
actions:
- theme: brand
text: 快速开始 ->
link: /guide/introduction/vben
link: /wwjcloud/guide/quick-start
- theme: alt
text: 在线预览
link: https://www.vben.pro
text: API 文档
link: /wwjcloud/openapi/standards/restful
- theme: alt
text: 在 GitHub 查看
link: https://github.com/vbenjs/vue-vben-admin
- theme: alt
text: DeepWiki 文档
link: https://deepwiki.com/vbenjs/vue-vben-admin
text: Vben Admin
link: /guide/introduction/vben
features:
- icon: 🚀
title: 最新技术栈
details: 基于 Vue3、Pinia、Vue Router、TypeScript、等最新技术栈
link: /guide/introduction/quick-start
title: 现代化技术栈
details: 基于 NestJS、TypeScript、TypeORM 等最新技术栈,提供企业级后端解决方案
link: /wwjcloud/guide/quick-start
linkText: 快速开始
- icon: 🦄
title: 丰富的配置
details: 企业级中后台前端解决方案,提供丰富的组件和模板以及 N 种偏好设置组合方案
link: /guide/essentials/settings
linkText: 配置文档
- icon: 🎨
title: 主题定制
details: 通过简单的配置,即可实现各种主题切换,满足个性化需求
link: /guide/in-depth/theme
linkText: 主题文档
- icon: 🔄
title: Saas+独立版双架构
details: 支持Saas多租户和独立部署两种架构模式满足不同业务场景需求提供灵活的部署选择
link: /wwjcloud/guide/architecture
linkText: 架构说明
- icon: 🏗️
title: 开箱即用,内置模块化功能
details: 采用分层架构设计,已搭建模块化架构系统开发底层,为业务开发提供完整的底层支撑
link: /wwjcloud/guide/development
linkText: 开发指南
- icon: 🌐
title: 国际化
details: 内置国际化方案,支持多语言切换,满足国际化需求。
link: /guide/in-depth/locale
linkText: 国际化文档
title: 多语言支持
details: 内置多语言系统,支持动态语言包加载,满足国际化需求。
link: /wwjcloud/guide/concepts
linkText: 基础概念
- icon: 🔐
title: 权限管理
details: 内置权限管理方案,支持多种权限控制方式,满足各种权限需求。
link: /guide/in-depth/access
linkText: 权限文档
- title: Vite
details: 内置 RBAC 权限管理方案,支持多种权限控制方式,满足各种权限需求。
link: /wwjcloud/guide/concepts
linkText: 基础概念
- icon: 📱
title: 支持多端管理
details: 基于UniAppX多平台支持原生App、小程序、PC等多端统一管理和开发一套代码多端运行。
link: /wwjcloud/guide/multi-platform
linkText: 多端开发
- title: TypeORM
icon:
src: /logos/vite.svg
details: 现代化的前端构建工具,快速冷启动,瞬间热更新
link: https://vitejs.dev/
src: https://unpkg.com/wwjcloud@latest/source/icons/typeorm.svg
details: 强大的 TypeScript ORM支持多种数据库提供完整的数据库操作功能
link: https://typeorm.io/
linkText: 官方站点
- title: Shadcn UI
- title: 多应用+插件组合安装
icon:
src: /logos/shadcn-ui.svg
details: 核心基于 Shadcn UI + Tailwindcss业务可支持任意的 UI 框架
link: https://www.shadcn-vue.com/
linkText: 官方站点
- title: Turbo Repo
src: https://unpkg.com/wwjcloud@latest/source/icons/mysql.svg
details: 支持业务自定义和应用插件热插拔,提供灵活的应用扩展和插件管理功能
link: /wwjcloud/guide/plugins
linkText: 插件开发
- title: 自建编译服务
icon:
src: /logos/turborepo.svg
details: 规范且标准的大仓架构,使用 pnpm + monorepo + turbo 工程管理模式,提供企业级开发规范
link: https://turbo.build/
linkText: 官方站点
- title: Nitro Mock Server
icon:
src: /logos/nitro.svg
details: 内置 Nitro Mock 服务,让你的 mock 服务更加强大。
link: https://nitro.unjs.io/
linkText: 官方站点
src: https://unpkg.com/wwjcloud@latest/source/icons/redis.svg
details: 提供完整的编译服务搭建方案,支持自定义编译环境和构建流程,满足不同项目的编译需求
link: /wwjcloud/guide/build-service
linkText: 编译服务
---
<!-- <script setup>
import {
VPTeamPage,
VPTeamPageTitle,
VPTeamMembers,
VPTeamPageSection
} from 'vitepress/theme';
<style>
:root {
--vp-home-hero-image-background-image: linear-gradient(
-45deg,
#78d8d1 50%,
#5f6eed 50%
);
}
const members = [
{
avatar: 'https://avatars.githubusercontent.com/u/28132598?v=4',
name: 'Vben',
title: '创建者',
desc: 'Vben Admin以及相关生态的作者负责项目的整体开发。',
links: [
{ icon: 'github', link: 'https://github.com/anncwb' },
]
},
]
</script>
<VPTeamPage>
<VPTeamPageTitle>
<template #title>
核心成员介绍
</template>
</VPTeamPageTitle>
<VPTeamMembers
:members="members"
/>
</VPTeamPage> -->
<VbenContributors />
</style>

View File

@@ -0,0 +1,113 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
sidebar: false
hero:
name: Vben Admin
text: 企业级管理系统框架
tagline: 全新升级,开箱即用,简单高效
image:
src: https://unpkg.com/@vbenjs/static-source@0.1.7/source/logo-v1.webp
alt: Vben Admin
actions:
- theme: brand
text: 快速开始 ->
link: /guide/introduction/vben
- theme: alt
text: 在线预览
link: https://www.vben.pro
- theme: alt
text: 在 GitHub 查看
link: https://github.com/vbenjs/vue-vben-admin
- theme: alt
text: DeepWiki 文档
link: https://deepwiki.com/vbenjs/vue-vben-admin
features:
- icon: 🚀
title: 最新技术栈
details: 基于 Vue3、Pinia、Vue Router、TypeScript、等最新技术栈。
link: /guide/introduction/quick-start
linkText: 快速开始
- icon: 🦄
title: 丰富的配置
details: 企业级中后台前端解决方案,提供丰富的组件和模板以及 N 种偏好设置组合方案。
link: /guide/essentials/settings
linkText: 配置文档
- icon: 🎨
title: 主题定制
details: 通过简单的配置,即可实现各种主题切换,满足个性化需求。
link: /guide/in-depth/theme
linkText: 主题文档
- icon: 🌐
title: 国际化
details: 内置国际化方案,支持多语言切换,满足国际化需求。
link: /guide/in-depth/locale
linkText: 国际化文档
- icon: 🔐
title: 权限管理
details: 内置权限管理方案,支持多种权限控制方式,满足各种权限需求。
link: /guide/in-depth/access
linkText: 权限文档
- title: Vite
icon:
src: /logos/vite.svg
details: 现代化的前端构建工具,快速冷启动,瞬间热更新。
link: https://vitejs.dev/
linkText: 官方站点
- title: Shadcn UI
icon:
src: /logos/shadcn-ui.svg
details: 核心基于 Shadcn UI + Tailwindcss业务可支持任意的 UI 框架。
link: https://www.shadcn-vue.com/
linkText: 官方站点
- title: Turbo Repo
icon:
src: /logos/turborepo.svg
details: 规范且标准的大仓架构,使用 pnpm + monorepo + turbo 工程管理模式,提供企业级开发规范。
link: https://turbo.build/
linkText: 官方站点
- title: Nitro Mock Server
icon:
src: /logos/nitro.svg
details: 内置 Nitro Mock 服务,让你的 mock 服务更加强大。
link: https://nitro.unjs.io/
linkText: 官方站点
---
<!-- <script setup>
import {
VPTeamPage,
VPTeamPageTitle,
VPTeamMembers,
VPTeamPageSection
} from 'vitepress/theme';
const members = [
{
avatar: 'https://avatars.githubusercontent.com/u/28132598?v=4',
name: 'Vben',
title: '创建者',
desc: 'Vben Admin以及相关生态的作者负责项目的整体开发。',
links: [
{ icon: 'github', link: 'https://github.com/anncwb' },
]
},
]
</script>
<VPTeamPage>
<VPTeamPageTitle>
<template #title>
核心成员介绍
</template>
</VPTeamPageTitle>
<VPTeamMembers
:members="members"
/>
</VPTeamPage> -->
<VbenContributors />

View File

@@ -0,0 +1,21 @@
## 执行检查清单(给智能体)
### 开发前
- [ ] 对齐 PHP 模块/接口/字段
- [ ] 核对 DB 结构(表/字段/类型/索引)
- [ ] 明确路由分端(/adminapi, /api与守卫
### 开发中
- [ ] 目录分层到位Controller/Application/Core/Infrastructure/Entities/DTO
- [ ] 实体字段与 DB 一致;配置表仅用 `value(JSON)`
- [ ] Controller 只路由+DTO 校验;不写业务/不碰 ORM
- [ ] Application 负责编排与事务Core 写规则Infra 实现仓储与适配
- [ ] 管理端控制器接 `JwtAuthGuard + RolesGuard`
- [ ] 启用必要 PipesJSON/Timestamp
- [ ] 用例完成发布事件;耗时逻辑入队
### 开发后
- [ ] `npm run build` 通过(无类型警告)
- [ ] 单测/集成/e2e 通过;关键路径有覆盖
- [ ] Swagger 注解完整
- [ ] 变更清单与迁移说明

View File

@@ -0,0 +1,21 @@
## WWJCloud AI 文档总览
### 目标
- **统一规范**: 用 NestJS 的方式实现,与 PHP 业务/数据100%对齐。
- **智能体协作**: 多个智能体基于同一规则、流程与工具偏好执行任务。
### 文档导航
- 工作流程: ./workflow.md
- 工具偏好: ./tooling.md
- 规则规范: ./rules.md
- 执行清单: ./checklists.md
- 基础能力集成: ./integration.md
### 适用范围
- 仓库: `wwjcloud/` 主后端及 `admin/apps/*` 示例
- 模块: `common/*`, `core/*`, `config/*`, `vendor/*`
### 约定
- 管理端路由: `/adminapi/{module}/...`
- 前台端路由: `/api/{module}/...`
- 配置表: `sys_config.value(JSON)`,禁止使用不存在字段(如 `config_value`, `app_type`

View File

@@ -0,0 +1,154 @@
## 基础能力集成Kafka / Redis / 队列 / 事务)
### 总览
- 目标: 将事件、任务、缓存、事务能力以统一规范接入 App/Core/Infrastructure 三层,替代“散落式调用”。
- 约束: 由 Application 发起流程Core 编排业务规则且不直接依赖外设Infrastructure 提供具体实现。
### 1) 事务TypeORM
- 发起层: Application用例级事务边界
- 使用方式:
```ts
// application/xxx.app.service.ts
constructor(private readonly dataSource: DataSource, private readonly core: XxxCoreService) {}
async runUseCase(dto: Dto) {
return await this.dataSource.transaction(async (manager) => {
// 将 manager 注入到仓储实现(通过请求域注入或方法透传)
await this.core.handle(dto); // Core 内仅调用仓储接口
});
}
```
- 规范:
- 事务只在 Application 层开启Core 不直接操作事务对象
- 多仓储参与时基于同一 `EntityManager`
### 2) 队列Bull/BullMQ 或 DB 队列)
- 发起层: Application用例结束后入队
- 接入点: `UnifiedQueueService` 或具体 Provider`BullQueueProvider`/`DatabaseQueueProvider`
```ts
// application/xxx.app.service.ts
constructor(private readonly queue: UnifiedQueueService) {}
await this.queue.addJob('media', 'generateThumbnail', { attId }, { attempts: 3, delay: 0 });
```
- 处理器建议放置:
- `infrastructure/queues/xxx.processor.ts` 或独立消费模块
- 规范:
- 入队数据为最小必要字段ID/键大对象存储DB再查
### 3) 事件Kafka / DB Outbox
- 发起层: Application领域事件在用例完成后发布
- 接入点: `DomainEventService`(绑定 `IEventBus`,默认 DB Outbox可切 Kafka
```ts
// application/xxx.app.service.ts
constructor(private readonly events: DomainEventService) {}
await this.events.publishEvent(
'system.settings.storage.updated',
String(siteId),
String(siteId),
{ storageType },
);
```
- 配置切换:
- 通过 `EventBusModule` 的 provider 切换 `DatabaseEventBusProvider``KafkaEventBusProvider`
- 规范:
- 事件名格式: `domain.aggregate.action`
- 载荷仅含必要业务字段,带上 `tenantId/siteId`
### 4) Redis缓存/限流/幂等)
- 发起层: Application流程性控制或 Infrastructure技术性实现
- 接入点: `RedisProvider``vendor/redis`
- 常见场景:
- 读多写少配置缓存:`sys_config` 读取后短缓存
- 上传限流/防刷:基于 IP/UID 的计数器
- 幂等:`SETNX` + 过期控制
### 5) 存储(本地/云)
- 发起层: Application 调用 Core 规则后,委托 Infrastructure Provider 落地
- 接入点: `infrastructure/providers/*``vendor/storage/*`(如 `LocalStorageAdapter`
- 规范:
- Provider 通过接口注入,便于切换 OSS/COS/Qiniu
### 6) 在三层中的放置原则
- Application: 事务、入队、发事件、协调多 Core 服务
- Core: 纯业务规则/策略与仓储接口;不直接依赖 Kafka/Redis/队列
- Infrastructure: 队列消费者、存储/HTTP/Redis 具体实现、TypeORM 仓储实现
### 7) 示例Upload 模块接入
- 用例: 上传完成 → 入库附件 → 入队生成缩略图
```ts
// application/upload.app.service.ts
await this.dataSource.transaction(async (manager) => {
const att = await this.core.validateAndPlan(fileMeta);
await this.attachmentRepo.withManager(manager).save(att);
});
await this.queue.addJob('media', 'generateThumbnail', { attId: att.id });
```
### 8) 示例Settings.Storage 接入
- 用例: 切换默认存储 → 写 `sys_config` → 发布事件 → 入队校验可用性
```ts
// application/storage-settings.app.service.ts
await this.dataSource.transaction(async (manager) => {
await this.core.ensureExclusiveDefault(type);
await this.sysConfigRepo.withManager(manager).setValue(key, value);
});
await this.events.publishEvent('system.settings.storage.updated', String(siteId), String(siteId), { type });
await this.queue.addJob('ops', 'validateStorage', { type, siteId });
```
### 9) 配置与健康
- 配置在 `VendorModule`/`EventBusModule` 注入;通过 `ConfigService` 读取连接信息
- 健康检查:将 Redis/队列/事件写入健康聚合输出
### 10) 方案Bvendor/storage 标准结构(平台外设)
```
vendor/storage/
├── index.ts # 统一导出(接口、Token、模块、适配器)
├── storage.module.ts # 可配置模块(选择具体实现)
├── tokens.ts # 注入Token常量(如 STORAGE_ADAPTER)
├── interfaces/
│ ├── storage-adapter.ts # 适配器接口(平台标准)
│ └── types.ts # 通用类型(上传结果、签名参数等)
├── adapters/
│ ├── local.adapter.ts # 本地实现
│ ├── aliyun-oss.adapter.ts # 阿里云实现
│ ├── qcloud-cos.adapter.ts # 腾讯云实现
│ └── qiniu.adapter.ts # 七牛云实现
├── providers/
│ ├── storage.provider.ts # 工厂: 按配置/站点解析适配器
│ └── registry.ts # 多实例注册表 Map<siteId, adapter> + TTL
├── health/storage.health.ts # 健康检查(各实现可选实现)
├── config/schema.ts # 配置Schema(必需项校验)
└── __tests__/
├── storage.contract.spec.ts # 契约测试(接口一致性)
└── adapters/*.spec.ts # 各实现最小测试
```
- Token
```ts
export const STORAGE_ADAPTER = 'STORAGE_ADAPTER';
```
- 接口
```ts
export interface StorageAdapter {
upload(params: { key: string; content: Buffer | NodeJS.ReadableStream; mime?: string }): Promise<{ url: string; key: string }>;
delete(key: string): Promise<void>;
signUpload?(params: { key: string; expiresSec?: number; mime?: string }): Promise<{ url: string; headers?: Record<string,string>; fields?: Record<string,string> }>;
healthCheck?(): Promise<boolean>;
}
```
- 按 site_id 解析(站点启用 > 跟随系统 > local 兜底)
```ts
function resolveAdapter(siteId: number): StorageAdapter {
const enabled = readSiteEnabled(siteId); // storage_xxx with is_use
const type = enabled?.type ?? readPlatformDefault();
const options = enabled?.options ?? readPlatformOptions(type) ?? {};
return registry.getOrCreate(siteId, type, options);
}
```
- 本地隔离路径:`upload/site_{siteId}/...`
- 健康检查:对活跃站点适配器定期 `healthCheck()` 并聚合到 Health
> 说明方案B 将“三方存储”视为外设,接口与实现均在 vendor业务通过 Token 注入与按站点解析工厂使用core 无需暴露存储端口。

View File

@@ -0,0 +1,98 @@
## 模块关系映射PHP ↔ NestJS
### 1) 职责映射总览
| 职责 | PHPThinkPHP风格 | NestJS规范分层 | 备注 |
|---|---|---|---|
| 控制器 | `app/admin/controller/*``app/api/controller/*` | `controllers/adminapi/*``controllers/api/*` | 仅路由与DTO校验Nest特有Guards/Pipes/Interceptors |
| 用例编排/流程 | `app/*/service/*`(可分 admin/api | `application/*`(可分 `AdminXxxAppService`/`ApiXxxAppService` | 事务、聚合领域规则、发事件/入队 |
| 通用业务规则 | `core/*` 或被两端复用的 service | `core/services/*` | 不依赖外设DDD |
| 仓储接口 | 与模型耦合在一起 | `domain/repositories/*` | 定义端口(接口) |
| 仓储实现 | 模型(Model)直连DB | `infrastructure/repositories/*.typeorm.repository.ts` | TypeORM 实现,注入接口 |
| 实体/模型 | `app/*/model/*` | `entities/*`TypeORM 实体) | 字段与DB 100%一致 |
| 外部适配 | SDK/Driver 封装 | `infrastructure/providers/*``vendor/*` | 存储/HTTP/SMS等 |
| 配置中心 | `sys_config` + 配置文件 | `settings/*` 统一读写 `sys_config.value(JSON)` | 禁止 `config_value``app_type` |
### 2) 目录映射(标准化)
```
your-module/
├── your-module.module.ts # 模块定义Nest特有
├── controllers/
│ ├── adminapi/ # 后台控制器(/adminapi
│ └── api/ # 前台控制器(/api
├── application/ # 用例编排admin/api可分
├── core/
│ ├── services/ # 通用规则/策略(≈ PHP core
│ ├── repositories/ # 仓储接口(端口)
│ └── models|policies/ # 值对象/策略(可选)
├── infrastructure/
│ ├── repositories/ # TypeORM 实现
│ └── providers/ # 外部系统适配
├── entities/ # TypeORM实体DB一致
└── dto/ # DTOclass-validator
```
### 3) 命名映射规则
- 应用层:`XxxAppService`(如 `AdminUploadAppService` / `ApiUploadAppService`
- Core层`XxxCoreService`
- 仓储接口:`XxxRepository`
- 仓储实现:`XxxTypeormRepository`
- 控制器:`XxxController`(位于 `controllers/adminapi|api`
- 配置键:常量化,如 `UPLOAD_CONFIG_KEY = 'upload'``STORAGE_LOCAL_KEY = 'storage_local'`
### 4) 映射示例Upload 模块
- PHP 心智:
- admin/api 控制器 → 上传服务 → 模型写库(附件表)
- NestJS 对应:
- 控制器:`controllers/adminapi/upload.controller.ts``controllers/api/upload.controller.ts`
- 应用:`application/upload.app.service.ts`(编排上传 → 领域校验 → Provider 落地 → 入库)
- Core`core/services/upload.core.service.ts`(类型/大小/命名/路径策略)
- 仓储接口:`core/repositories/attachment.repository.ts`
- 仓储实现:`infrastructure/repositories/attachment.typeorm.repository.ts`
- 实体:`entities/sys-attachment.entity.ts`(严格对齐 `sys_attachment`
- 适配:`infrastructure/providers/local.storage.provider.ts`(或 `vendor/storage/*`
流程Controller → AppService事务/编排) → CoreService校验策略 → StorageProvider落地 → AttachmentRepository入库
### 5) 映射示例Settings.Storage 模块
- PHP 心智:
- admin 控制器(配置) → 服务 → `sys_config` 读写(键:`storage_*`
- NestJS 对应:
- 控制器:`settings/storage/controllers/storage-settings.controller.ts`
- 应用:`settings/storage/application/storage-settings.app.service.ts`
- Core`settings/storage/core/services/storage-config.core.service.ts`(唯一启用策略、键名规范)
- 仓储接口:`settings/storage/core/repositories/sys-config.repository.ts`
- 仓储实现:`settings/storage/infrastructure/sys-config.typeorm.repository.ts`
- 实体:`settings/entities/sys-config.entity.ts`(对齐 `sys_config`,字段名:`value`
流程Controller → AppService → CoreService校验/策略) → SysConfigRepository读写 `value(JSON)` → 发布事件/入队
### 6) 约束速查(强制对齐)
- DB 字段:实体字段名/类型/时间戳/软删与 SQL 100%一致
- `sys_config`:统一使用 `value(JSON)`;禁止 `config_value``app_type`
- 路由前缀:管理端 `/adminapi`,前台 `/api`
- 守卫:管理端控制器统一 `JwtAuthGuard + RolesGuard`
- DTO`class-validator`,必要时 `JsonTransformPipe``TimestampPipe`
- 事件/队列:用例完成后发布 `system.settings.*` 等领域事件,耗时逻辑入队
### 7) 反模式(避免踩坑)
- 在 Controller 中写业务或直接操作 ORM
- 跳过 Application 层,直接由 Controller 调 Domain/Repository
- Domain 依赖具体 ORM/外设实现
-`upload` 模块中放置“配置管理”代码(应全部在 `settings` 模块)
- `sys_config` 使用不存在字段(如 `config_value`)、添加 `app_type` 过滤
### 8) 决策树(智能体选路)
- 这是接口/路由吗?→ 放 `controllers`,只做 DTO 校验与调用 AppService
- 这是业务流程/事务/聚合?→ 放 `application`,完成后发事件/入队
- 这是纯业务规则/策略?→ 放 `domain/services`
- 需要访问数据库?→ 定义 `domain/repositories` 接口,在 `infrastructure/repositories` 实现
- 需要调用外部系统?→ 放 `infrastructure/providers`(或 `vendor/*`),通过接口注入
- 是系统配置?→ 放 `settings/*`,读写 `sys_config.value(JSON)`,键按约定常量化
### 命名优先级(重要)
- 在不违反 NestJS 规范与 TypeScript 命名习惯的前提下,**优先沿用 PHP 的业务命名**含服务方法名、DTO 字段名、配置键名)
- NestJS 特有文件/类名按规范命名(如 `*.module.ts`, `*.controller.ts`, `*.app.service.ts`, `*.core.service.ts`
---
以上映射可直接用于指导模块落地与代码评审,智能体在执行任务前请先对照本表完成“位置与职责”的选择。

View File

@@ -0,0 +1,80 @@
## AI 规划师:底座完善路线图(面向微服务的一次性落地)
### 目标
- 一次性补齐“微服务刚需底座”,保证当前单体可用、未来可无感切分。
- 全程遵循项目约束:与 PHP 业务/数据一致;与 NestJS 规范一致;最小可行改动。
### 阶段划分与里程碑
- M1 基础通信与契约D1-D2
- 统一错误码与异常过滤器(全局 Filter
- 统一响应包装Interceptor
- API 版本化v1/v2与 Swagger 分组(/api、/adminapi
- 配置中心 Schema 校验Joi/Zod启动即校验
- 验收:/docs OK错误码/响应统一;配置校验失败阻断启动
- M2 事务与数据访问D2-D3
- 事务助手Application 开启,共享 EntityManager
- 仓储基类withManager、分页/排序/过滤白名单)
- 分布式锁Redis Lock + 看门狗)
- 验收:示例用例通过;并发压测无脏写;锁可重入/续租
- M3 安全与多租D3
- SiteIdScopeGuard多租隔离
- 幂等Idempotency-Key + Redis SETNX + TTL
- 限流IP/UID/接口级 令牌桶)
- 审计日志最小版(配置/权限/删除变更)
- 验收:关键接口具备限流/幂等;审计写入成功
- M4 事件与队列D4
- 事件总线DB Outbox 默认Kafka 可切换;事件契约(事件名/版本/载荷 Schema
- 任务队列Bull/BullMQ 或 DB Jobs重试/死信/命名规范
- Saga/补偿基类(占位)
- 验收:发布/消费示例跑通;切 Kafka 仅改配置;死信与重试可观测
- M5 可观测与稳定性D4-D5
- 健康聚合DB/Redis/队列/事件/对象存储)
- 指标PrometheusHTTP/DB/队列/事件/存储基础指标
- 追踪OpenTelemetryHTTP↔队列↔事件 traceparent 贯通
- 结构化日志JSON + traceId + site_id + 采样)
- 验收:/health 聚合齐全;/metrics 输出基础指标trace 在链路可见
- M6 vendor 外设标准(并行推进)
- storage方案B接口+adapters(local/aliyun/qcloud/qiniu)+按 site_id 解析工厂+契约测试
- providers/registry多实例缓存 Map<siteId, adapter> + TTL
- 健康与 Schema厂商配置校验与健康钩子
- 验收:站点启用 > 跟随系统 > 本地兜底 生效;契约测试通过
### 目录落位(仅技术底座)
- core/
- config/{schema.ts, feature-flags.service.ts}
- http/{filters/http-exception.filter.ts, interceptors/response.interceptor.ts, client/http.client.ts}
- database/{transaction.manager.ts, base-repository.ts, redis-lock.service.ts}
- security/{site-scope.guard.ts, idempotency.service.ts, rate-limit.service.ts}
- event-bus/{outbox.provider.ts, kafka.provider.ts, contracts/*.schema.ts}
- queue/{bull.provider.ts, db-queue.provider.ts, naming.ts, dead-letter.ts}
- observability/{health/aggregator.ts, metrics/http.metrics.ts, tracing/otel.ts, logging/logger.ts}
- vendor/
- storage/(接口+adapters+providers+health+schema+tests
### 执行顺序(对齐多智能体 S1-S9
- S1/S2 分析与架构:冻结上述目录与规范
- S3 基建接入体:落地 core 与 vendor 骨架;接入 Kafka/Redis/队列/事务
- S4 开发执行体实现各模块最小能力与示例接入settings/storage、upload
- S5 安全基线体:多租/限流/幂等/权限核查
- S6 质量门禁体lint/ts/test/e2e/覆盖率阈值
- S7 规范审计体:对照 checklists 差异清单
- S8 发布:变更/迁移/回滚说明
- S9 性能优化体:缓存/异步化/批量化建议
### 验收清单(通过即视为底座完成)
- /health、/metrics、/docs 与追踪链路可用;错误码+响应统一
- 事务助手/仓储基类/锁/限流/幂等 有实例与测试
- 事件总线 Outbox→Kafka 可切;队列有重试/死信与可视化
- vendor/storage 支持站点启用/平台默认/本地兜底;契约测试通过
### 依赖与风险
- 依赖Redis、数据库可用Kafka 按需
- 风险:配置校验与权限基线放开可能影响旧路由;需灰度启用与回滚脚本
### 文档联动
- 参见:`./workflow.md`S1-S9`./integration.md`(能力接入)、`../project/vendor.md`vendor 规范)

View File

@@ -0,0 +1,28 @@
## 规则与规范AI 执行细则)
### 总则
- 框架层: 按 NestJS 规范;业务/数据层: 与 PHP 项目 100% 一致
- 禁止自创 DB 字段/索引;实体必须与 `sql/wwjcloud.sql` 一致
### 分层与依赖
- 目录: Controller / Application / Core / Infrastructure / Entities / DTO
- 依赖方向: App → Common → Core → Vendor严格单向
- Repository: 接口在 Core实现放 InfrastructureController 不直接用 ORM
### 路由与权限
- 管理端: `/adminapi/{module}/...`,前台: `/api/{module}/...`
- 管理端控制器统一: `JwtAuthGuard + RolesGuard`
### 数据与配置
- 配置表: `sys_config.value(JSON)`;禁止 `config_value``app_type`
- 时间戳: int软删: `is_del`, `delete_time`; JSON: `@Column('json')` 或 text + JSON 序列化
### 验证与错误
- DTO: `class-validator` 必须;必要时启用 `JsonTransformPipe``TimestampPipe`
- 异常: 全局过滤器统一错误响应;拦截器记录 request-id/trace
### 事件与队列
- 用例完成后发布领域事件(如 `system.settings.*`);耗时逻辑入队处理
### 文档与测试
- Swagger 注解完善;单测/集成/e2e 覆盖关键用例;`npm run build` 必须通过

View File

@@ -0,0 +1,20 @@
## 工具偏好与使用约定
### 首选工具
- 代码检索: 语义检索优先,其次精确 `grep`(限定范围/文件类型)
- 文件读取: 分段读取,避免大文件全量;聚焦导入/实体/控制器/服务、测试
- 编辑变更: 小步、原地最小改动;优先迁移后删除,避免职责重复
- 运行与测试: `npm run build``npm run test`(单测/集成e2e 按 `playground` 配置
### 偏好策略
- 并行检索: 控制器/服务/实体/DTO/模块定义并行查看
- 批量对齐: 字段/命名统一替换前先定位所有引用
- 规范优先: 不因快捷而破坏分层与依赖约束
### 常用检查点
- DB 对齐: 实体字段名、类型、软删、时间戳
- 配置统一: `sys_config.value(JSON)`,无 `config_value`、无 `app_type`
- 路由前缀: `/adminapi``/api`
- 守卫: 管理端 `JwtAuthGuard + RolesGuard`
- DTO: `class-validator`,必要时 `Pipes`JSON/Timestamp
- 事件/队列: 用例完成后发布事件、必要时入队

View File

@@ -0,0 +1,96 @@
## 智能体工作流程(多智能体协作)
### 角色定义(按执行顺序标注)
- S1 需求分析体(Analyzer): 解析需求、对应 PHP/Nest 规范、输出任务切分与验收标准
- S2 架构治理体(Architect): 校验分层/依赖/目录规范,给出重构建议与边界清单
- S3 基建接入体(InfraOperator): 接入/校验 Kafka、Redis、队列、事务与配置提供接入差异与示例
- S4 开发执行体(Developer): 按规范编码、编写测试、修复构建
- S5 安全基线体(SecurityGuard): 检查守卫、跨租户(site_id)隔离、敏感信息暴露(开发中与提测前各执行一次)
- S6 质量门禁体(QualityGate): 聚合 ESLint/TS/覆盖率/e2e 结果,低于阈值阻断合并
- S7 规范审计体(Auditor): 按清单逐项核查,出具差异报告与修复项
- S8 上线管控体(Release): 构建、变更说明、灰度计划与回滚预案
- S9 性能优化体(PerfTuner): 建议缓存/异步化/批处理,识别大对象传输与 N+1开发后期与上线后持续执行
### 串联流程(带顺序)
1) S1 Analyzer
- 输入: 业务需求/接口变更/对齐 PHP 的说明
- 输出: 模块划分、路由表、DTO、实体字段清单、与 DB/ThinkPHP 对照
2) S2 Architect
- 校验: 模块目录、分层(Application/Core/Infrastructure)、依赖方向(App→Common→Core→Vendor)
- 输出: 设计说明、端口(Repository/Provider)定义、删除/迁移建议
3) S3 InfraOperator
- 接入: Kafka/Redis/队列/事务的工程化接入与配置
- 产物: 接入差异与示例代码(见 integration.md健康检查/配置项校验清单
4) S4 Developer
- 实现: Controller 仅路由+DTO校验AppService 编排Core 规则Infra 实现Entity 对齐 DB
- 接入: 守卫(RBAC)、Pipes(JSON/Timestamp)、拦截器(请求日志)、事件与队列
- 测试: 单测/集成/e2e构建通过
5) S5 SecurityGuard第一次开发阶段
- 检查: 控制器守卫、site_id 隔离、敏感字段输出、配置权限
6) S6 QualityGateCI 阶段)
- 指标: ESLint/TS 无报错覆盖率≥阈值e2e 关键路径通过
- 动作: 不达标阻断合并
7) S7 Auditor提测前
- 检查: 规范清单(见 checklists.md),字段/命名/路由/守卫/事务/队列/事件 与 PHP/DB 对齐
- 产物: 差异报告与修复任务
8) S5 SecurityGuard第二次提测前
- 复检: 重要接口的鉴权/越权/敏感输出
9) S9 PerfTuner并行/持续)
- 建议: 缓存、异步化、批量化、索引与查询优化;识别 N+1、大对象传输
10) S8 Release
- 产出: 变更日志、部署步骤、数据迁移脚本、回滚预案
### 关键约束
- 与 PHP 业务/数据100%一致;与 NestJS 规范100%匹配
- 禁止创建 DB 不存在字段;`sys_config.value(JSON)` 统一
- 管理端路由 `/adminapi`,前台 `/api`;统一守卫与响应格式
### 基础能力检查点Kafka / Redis / 队列 / 事务)
- 事务: 仅在 Application 开启;多仓储共享同一 EntityManagerCore 不直接操作事务对象
- 队列: 用例完成后入队;载荷仅传关键 ID处理器在 Infrastructure按队列名分域
- 事件: 统一用 DomainEventService事件名 `domain.aggregate.action`;默认 DB Outbox可切 Kafka
- Redis: 短缓存配置读取、上传限流/防刷(计数器)、幂等(SETNX+TTL)
### 命名与对齐
- PHP 业务命名优先(不违反 Nest/TS 规范前提下包括服务方法、DTO 字段、配置键
- Nest 特有类型按规范命名:`*.module.ts``*.controller.ts``*.app.service.ts``*.core.service.ts`
### 核心链接
- 模块映射: `./mapping.md`
- 能力集成: `./integration.md`
- 规则与清单: `./rules.md``./checklists.md`
### 执行与验收CI/PR 建议)
- PR 必须通过: build、单测/集成/e2e
- 审计体根据 `checklists.md` 自动评论差异(字段/命名/路由/守卫/事务/队列/事件)
- 安全基线: 管理端控制器统一 `JwtAuthGuard + RolesGuard`/adminapi 与 /api 路由前缀
### 目录职能速查(防误用)
- common/(框架通用服务层)
- 放可被业务复用的通用功能:用户/权限/菜单/上传/通知/设置等模块
- 内部模块按 Controller / Application / Core / Infrastructure / Entities / DTO 分层
- 禁止依赖 App 层;允许依赖 core/, config/, vendor/
- config/(配置与适配)
- 环境变量、数据库/HTTP/安全/队列/第三方等配置模块与注入工厂
- 仅存放配置与适配代码,不放业务逻辑
- core/(核心基础设施与通用规则)
- 通用规则/策略与仓储接口Core 层),以及全局基础设施(如队列、事件、健康、拦截器)
- 不直接依赖业务模块;面向 common/app 提供能力
- vendor/(第三方适配层)
- 外部服务适配:存储/支付/短信/HTTP/Kafka/Redis 等 Provider
- 通过接口注入到 Infrastructure 或 Application避免在 Controller 直接使用
- lang/(多语言)
- 多语言资源与语言包,供接口/异常/文案统一输出
- 智能体在涉及文案/错误消息时,优先调用多语言键值而非写死文本
- test/(测试)
- 单元/集成/e2e 测试,包含关键业务与基础能力(事务/队列/事件/权限)覆盖
- PR 必须通过测试基线,质量门禁体(QualityGate)据此决策

View File

@@ -0,0 +1,133 @@
# 架构约束规则
## 🏗️ 分层架构
```
┌─────────────────┐
│ App │ ← 业务开发层(用户自定义业务模块)
│ (用户业务) │ 电商、CRM、ERP等具体业务逻辑
└─────────────────┘
┌─────────────────┐
│ Common │ ← 框架通用服务层(企业级通用功能)
│ (框架通用服务) │ 用户管理、权限管理、菜单管理
└─────────────────┘ 文件上传、通知服务、系统设置
↓ 数据字典、缓存服务、队列服务
┌─────────────────┐
│ Core │ ← 核心基础设施层(底层基础设施)
│ (基础设施) │ 认证核心、数据库核心、验证核心
└─────────────────┘ HTTP核心、缓存核心、队列核心
┌─────────────────┐
│ Vendor │ ← 第三方服务适配层
│ (外部集成) │ 存储、支付、通信、云服务适配
└─────────────────┘
┌─────────────────┐
│ Addons │ ← 插件扩展层(可插拔功能模块)
│ (插件扩展) │ 扩展框架功能,不影响核心稳定性
└─────────────────┘
┌─────────────────┐
│ Test │ ← 测试代码层(独立测试模块)
│ (测试代码) │ 单元测试、集成测试、E2E测试
└─────────────────┘
```
## 📋 依赖约束规则
### 1. **Core 层(最底层)**
-**允许依赖**:无(最底层基础设施)
-**禁止依赖**Common、App、Vendor 层
- 📁 **位置**`src/core/`
- 🎯 **职责**:提供最基础的抽象和接口
### 2. **Vendor 层(第三方适配)**
-**允许依赖**Core 层
-**禁止依赖**Common、App 层
- 📁 **位置**`src/vendor/`
- 🎯 **职责**:第三方服务适配,实现 Core 层抽象
### 3. **Common 层(通用服务)**
-**允许依赖**Core 层
-**禁止依赖**App、Vendor 层
- 📁 **位置**`src/common/`
- 🎯 **职责**:企业级通用功能,基于 Core 层构建
### 4. **App 层(业务应用)**
-**允许依赖**Common、Core 层
-**禁止依赖**Vendor 层(通过 Common 层抽象)
- 📁 **位置**`src/app/`
- 🎯 **职责**:具体业务逻辑实现
### 5. **Test 层(测试代码)**
-**允许依赖**:所有层(测试需要)
- 📁 **位置**`test/`(项目根目录)
-**禁止位置**`src/` 目录下
- 🎯 **职责**:测试所有层的功能
## 🚫 禁止的依赖关系
```typescript
// ❌ 错误Common 层依赖 App 层
// src/common/auth/auth.service.ts
import { AppService } from '../../app/app.service'; // 禁止!
// ❌ 错误Core 层依赖 Common 层
// src/core/database/database.service.ts
import { UserService } from '../../common/user/user.service'; // 禁止!
// ❌ 错误App 层直接依赖 Vendor 层
// src/app/payment/payment.service.ts
import { AlipayProvider } from '../../vendor/payment/alipay.provider'; // 禁止!
// ❌ 错误:在 src 目录下创建测试代码
// src/test/test.service.ts - 禁止!
```
## ✅ 正确的依赖关系
```typescript
// ✅ 正确Common 层依赖 Core 层
// src/common/auth/auth.service.ts
import { JwtService } from '../../core/auth/jwt.service';
// ✅ 正确App 层依赖 Common 层
// src/app/user/user.controller.ts
import { AuthService } from '../../common/auth/auth.service';
// ✅ 正确Vendor 层依赖 Core 层
// src/vendor/payment/alipay.provider.ts
import { PaymentProvider } from '../../core/payment/payment.provider';
// ✅ 正确:测试代码依赖所有层
// test/auth.test.ts
import { AuthService } from '../src/common/auth/auth.service';
```
## 🔧 ESLint 规则
项目已配置严格的 ESLint 规则来强制执行这些约束:
1. **分层依赖检查**:自动检测违反依赖方向的导入
2. **测试代码位置检查**:禁止在 src 目录下创建测试代码
3. **路径别名检查**:强制使用相对路径,避免路径别名
4. **内部实现检查**:禁止依赖其他模块的内部实现
## 📝 开发建议
1. **设计时先确定层级**:新功能应该放在哪一层?
2. **依赖时检查方向**:确保依赖关系符合架构约束
3. **测试代码统一管理**:所有测试代码放在 `test/` 目录
4. **定期运行 ESLint**`npm run lint` 检查架构约束
5. **代码审查时关注架构**:确保新代码符合分层原则
## 🚨 常见错误
1. **在 Core 层导入业务逻辑**
2. **Common 层直接调用第三方服务**
3. **App 层绕过 Common 层直接使用 Vendor**
4. **测试代码放在 src 目录下**
5. **使用绝对路径或路径别名导入**
遵循这些约束规则,可以确保 WWJCloud 的架构清晰、依赖关系正确,为未来的微服务拆分奠定坚实基础。

View File

@@ -0,0 +1,769 @@
# 网关技术架构详解
> 深入理解 WWJCloud 网关系统的技术架构和实现原理
## 🏗️ **架构设计原则**
### **核心原则**
1. **分层架构**: 清晰的层次结构,职责分离
2. **模块化设计**: 高内聚、低耦合的模块组织
3. **可扩展性**: 支持水平扩展和垂直扩展
4. **高可用性**: 故障隔离和自动恢复机制
5. **可观测性**: 完整的监控、追踪和日志
6. **安全性**: 多层次的安全防护策略
---
## 🌐 **整体架构设计**
### **架构层次图**
```
┌─────────────────────────────────────────────────────────────┐
│ 接入层 (Access Layer) │
├─────────────────────────────────────────────────────────────┤
│ CDN │ DNS │ 负载均衡器 │ 反向代理 │ 防火墙 │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ API网关层 (API Gateway Layer) │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 路由管理 │ │ 限流控制 │ │ 安全策略 │ │
│ │ │ │ │ │ │ │
│ │ • 动态路由 │ │ • 用户限流 │ │ • 访问控制 │ │
│ │ • 路由版本 │ │ • IP限流 │ │ • 流量控制 │ │
│ │ • 路由策略 │ │ • API限流 │ │ • 安全防护 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 微服务网关层 (Microservice Gateway) │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 服务发现 │ │ 负载均衡 │ │ 熔断器 │ │
│ │ │ │ │ │ │ │
│ │ • 服务注册 │ │ • 轮询算法 │ │ • 状态管理 │ │
│ │ • 服务发现 │ │ • 权重算法 │ │ • 策略配置 │ │
│ │ • 健康检查 │ │ • 一致性哈希│ │ • 自动恢复 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 服务网格层 (Service Mesh) │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 流量管理 │ │ 安全策略 │ │ 可观测性 │ │
│ │ │ │ │ │ │ │
│ │ • 流量路由 │ │ • 身份认证 │ │ • 指标收集 │ │
│ │ • 流量分割 │ │ • 授权策略 │ │ • 日志聚合 │ │
│ │ • 流量镜像 │ │ • 加密通信 │ │ • 链路追踪 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 业务服务层 (Business Service Layer) │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 用户服务 │ │ 权限服务 │ │ 文件服务 │ │
│ │ │ │ │ │ │ │
│ │ • 会员管理 │ │ • 角色管理 │ │ • 文件上传 │ │
│ │ • 管理员 │ │ • 菜单管理 │ │ • 文件管理 │ │
│ │ • 认证授权 │ │ • 权限控制 │ │ • 存储适配 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 数据存储层 (Data Storage Layer) │
├─────────────────────────────────────────────────────────────┤
│ MySQL集群 │ Redis集群 │ 对象存储 │ 时序数据库 │
└─────────────────────────────────────────────────────────────┘
```
---
## 🔧 **核心组件架构**
### **1. API网关组件**
#### **1.1 路由管理组件**
```typescript
// 路由管理核心接口
interface RouteManager {
// 路由注册
registerRoute(route: Route): Promise<void>;
// 路由查找
findRoute(path: string, method: string): Route | null;
// 路由更新
updateRoute(routeId: string, updates: Partial<Route>): Promise<void>;
// 路由删除
deleteRoute(routeId: string): Promise<void>;
// 路由列表
listRoutes(filters?: RouteFilters): Route[];
}
// 路由定义
interface Route {
id: string;
name: string;
path: string;
method: string;
target: string;
middleware: string[];
rateLimit: RateLimitConfig;
security: SecurityConfig;
version: string;
enabled: boolean;
createdAt: Date;
updatedAt: Date;
}
```
#### **1.2 限流控制组件**
```typescript
// 限流器接口
interface RateLimiter {
// 检查是否允许请求
isAllowed(key: string, limit: RateLimit): Promise<boolean>;
// 获取当前使用量
getCurrentUsage(key: string): Promise<number>;
// 重置限流器
reset(key: string): Promise<void>;
}
// 限流配置
interface RateLimit {
// 时间窗口(秒)
window: number;
// 最大请求数
max: number;
// 限流策略
strategy: 'fixed' | 'sliding' | 'token-bucket' | 'leaky-bucket';
// 限流键类型
keyType: 'ip' | 'user' | 'api' | 'custom';
}
```
### **2. 微服务网关组件**
#### **2.1 服务发现组件**
```typescript
// 服务发现接口
interface ServiceDiscovery {
// 服务注册
registerService(service: ServiceInfo): Promise<void>;
// 服务发现
discoverService(serviceName: string): Promise<ServiceInstance[]>;
// 服务注销
unregisterService(serviceId: string): Promise<void>;
// 健康检查
checkHealth(serviceId: string): Promise<HealthStatus>;
// 服务列表
listServices(): ServiceInfo[];
}
// 服务信息
interface ServiceInfo {
id: string;
name: string;
version: string;
host: string;
port: number;
protocol: string;
metadata: Record<string, any>;
tags: string[];
status: ServiceStatus;
lastHeartbeat: Date;
}
```
#### **2.2 负载均衡组件**
```typescript
// 负载均衡器接口
interface LoadBalancer {
// 选择服务实例
selectInstance(instances: ServiceInstance[]): ServiceInstance;
// 更新实例状态
updateInstanceStatus(instanceId: string, status: InstanceStatus): void;
// 获取负载均衡策略
getStrategy(): LoadBalanceStrategy;
// 设置负载均衡策略
setStrategy(strategy: LoadBalanceStrategy): void;
}
// 负载均衡策略
enum LoadBalanceStrategy {
ROUND_ROBIN = 'round-robin',
WEIGHTED_ROUND_ROBIN = 'weighted-round-robin',
LEAST_CONNECTIONS = 'least-connections',
WEIGHTED_LEAST_CONNECTIONS = 'weighted-least-connections',
CONSISTENT_HASH = 'consistent-hash',
IP_HASH = 'ip-hash',
RANDOM = 'random'
}
```
#### **2.3 熔断器组件**
```typescript
// 熔断器接口
interface CircuitBreaker {
// 执行请求
execute<T>(fn: () => Promise<T>): Promise<T>;
// 获取状态
getStatus(): CircuitBreakerStatus;
// 手动重置
reset(): void;
// 获取统计信息
getStats(): CircuitBreakerStats;
}
// 熔断器状态
enum CircuitBreakerStatus {
CLOSED = 'closed', // 关闭状态,正常处理请求
OPEN = 'open', // 开启状态,拒绝所有请求
HALF_OPEN = 'half-open' // 半开状态,允许部分请求
}
```
### **3. 服务网格组件**
#### **3.1 Istio集成组件**
```typescript
// Istio 客户端接口
interface IstioClient {
// 创建虚拟服务
createVirtualService(vs: VirtualService): Promise<void>;
// 创建目标规则
createDestinationRule(dr: DestinationRule): Promise<void>;
// 创建网关
createGateway(gateway: Gateway): Promise<void>;
// 创建服务入口
createServiceEntry(se: ServiceEntry): Promise<void>;
// 获取服务配置
getServiceConfig(serviceName: string): Promise<ServiceConfig>;
}
// 虚拟服务配置
interface VirtualService {
apiVersion: string;
kind: string;
metadata: {
name: string;
namespace: string;
};
spec: {
hosts: string[];
gateways?: string[];
http: HttpRoute[];
tcp?: TcpRoute[];
tls?: TlsRoute[];
};
}
```
### **4. 监控追踪组件**
#### **4.1 分布式追踪组件**
```typescript
// 追踪器接口
interface Tracer {
// 开始追踪
startSpan(name: string, options?: SpanOptions): Span;
// 注入追踪上下文
inject(span: Span, format: string, carrier: any): void;
// 提取追踪上下文
extract(format: string, carrier: any): SpanContext | null;
// 获取当前活跃的Span
getCurrentSpan(): Span | null;
}
// Span接口
interface Span {
// 获取上下文
context(): SpanContext;
// 设置标签
setTag(key: string, value: any): this;
// 记录事件
log(event: LogEvent): this;
// 设置状态
setStatus(status: SpanStatus): this;
// 完成Span
finish(finishTime?: number): void;
}
```
#### **4.2 性能监控组件**
```typescript
// 性能监控接口
interface PerformanceMonitor {
// 记录请求开始
recordRequestStart(requestId: string, metadata: RequestMetadata): void;
// 记录请求结束
recordRequestEnd(requestId: string, responseTime: number, status: number): void;
// 记录错误
recordError(requestId: string, error: Error): void;
// 获取性能指标
getMetrics(timeRange: TimeRange): PerformanceMetrics;
// 设置告警规则
setAlertRule(rule: AlertRule): void;
}
// 性能指标
interface PerformanceMetrics {
// 请求总数
totalRequests: number;
// 成功请求数
successfulRequests: number;
// 失败请求数
failedRequests: number;
// 平均响应时间
averageResponseTime: number;
// 95%分位响应时间
p95ResponseTime: number;
// 99%分位响应时间
p99ResponseTime: number;
// 吞吐量 (QPS)
throughput: number;
// 错误率
errorRate: number;
}
```
---
## 📊 **性能优化策略**
### **1. 缓存策略**
```typescript
// 多级缓存接口
interface MultiLevelCache {
// 获取缓存
get<T>(key: string): Promise<T | null>;
// 设置缓存
set<T>(key: string, value: T, ttl?: number): Promise<void>;
// 删除缓存
delete(key: string): Promise<void>;
// 清空缓存
clear(): Promise<void>;
// 获取缓存统计
getStats(): CacheStats;
}
// 多级缓存实现
class MultiLevelCacheImpl implements MultiLevelCache {
constructor(
private l1Cache: Cache, // L1: 内存缓存
private l2Cache: Cache, // L2: Redis缓存
private l3Cache: Cache // L3: 数据库缓存
) {}
async get<T>(key: string): Promise<T | null> {
// L1 缓存查找
let value = await this.l1Cache.get<T>(key);
if (value !== null) {
return value;
}
// L2 缓存查找
value = await this.l2Cache.get<T>(key);
if (value !== null) {
// 回填 L1 缓存
await this.l1Cache.set(key, value);
return value;
}
// L3 缓存查找
value = await this.l3Cache.get<T>(key);
if (value !== null) {
// 回填 L1 和 L2 缓存
await Promise.all([
this.l1Cache.set(key, value),
this.l2Cache.set(key, value)
]);
return value;
}
return null;
}
}
```
### **2. 连接池管理**
```typescript
// 连接池接口
interface ConnectionPool<T> {
// 获取连接
acquire(): Promise<T>;
// 释放连接
release(connection: T): void;
// 关闭连接池
close(): Promise<void>;
// 获取池状态
getStatus(): PoolStatus;
}
// 数据库连接池实现
class DatabaseConnectionPool implements ConnectionPool<DatabaseConnection> {
private pool: Pool<DatabaseConnection>;
private config: PoolConfig;
constructor(config: PoolConfig) {
this.config = config;
this.pool = new Pool({
host: config.host,
port: config.port,
user: config.user,
password: config.password,
database: config.database,
connectionLimit: config.maxConnections,
acquireTimeout: config.acquireTimeout,
timeout: config.timeout,
queueLimit: config.queueLimit
});
}
async acquire(): Promise<DatabaseConnection> {
return this.pool.getConnection();
}
release(connection: DatabaseConnection): void {
connection.release();
}
async close(): Promise<void> {
await this.pool.end();
}
getStatus(): PoolStatus {
return {
totalConnections: this.pool.config.connectionLimit,
activeConnections: this.pool._allConnections.length,
idleConnections: this.pool._freeConnections.length,
waitingRequests: this.pool._connectionQueue.length
};
}
}
```
---
## 🚀 **部署架构**
### **容器化部署**
```yaml
# docker-compose.yml
version: '3.8'
services:
gateway:
build: .
ports:
- "3001:3001"
environment:
- NODE_ENV=production
- DB_HOST=mysql
- REDIS_HOST=redis
depends_on:
- mysql
- redis
networks:
- gateway-network
deploy:
replicas: 3
resources:
limits:
cpus: '1.0'
memory: 1G
reservations:
cpus: '0.5'
memory: 512M
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
volumes:
- mysql_data:/var/lib/mysql
networks:
- gateway-network
redis:
image: redis:6.2-alpine
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
- redis_data:/data
networks:
- gateway-network
networks:
gateway-network:
driver: bridge
volumes:
mysql_data:
redis_data:
```
### **Kubernetes部署**
```yaml
# gateway-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: gateway
namespace: wwjcloud
spec:
replicas: 3
selector:
matchLabels:
app: gateway
template:
metadata:
labels:
app: gateway
spec:
containers:
- name: gateway
image: wwjcloud/gateway:latest
ports:
- containerPort: 3001
env:
- name: NODE_ENV
value: "production"
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: gateway-config
key: db_host
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
livenessProbe:
httpGet:
path: /health
port: 3001
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 3001
initialDelaySeconds: 5
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: gateway-service
namespace: wwjcloud
spec:
selector:
app: gateway
ports:
- protocol: TCP
port: 80
targetPort: 3001
type: LoadBalancer
```
---
## 🔍 **监控和告警**
### **监控指标**
```typescript
// 监控指标收集器
@Injectable()
export class MetricsCollector {
private metrics = new Map<string, Metric>();
// 记录计数器
incrementCounter(name: string, labels: Record<string, string> = {}): void {
const key = this.buildKey(name, labels);
const metric = this.metrics.get(key) || { name, type: 'counter', value: 0, labels };
metric.value++;
this.metrics.set(key, metric);
}
// 记录直方图
recordHistogram(name: string, value: number, labels: Record<string, string> = {}): void {
const key = this.buildKey(name, labels);
const metric = this.metrics.get(key) || {
name,
type: 'histogram',
buckets: new Map(),
labels
};
if (metric.type === 'histogram') {
const bucket = this.getBucket(value);
metric.buckets.set(bucket, (metric.buckets.get(bucket) || 0) + 1);
}
this.metrics.set(key, metric);
}
// 记录仪表盘
setGauge(name: string, value: number, labels: Record<string, string> = {}): void {
const key = this.buildKey(name, labels);
this.metrics.set(key, { name, type: 'gauge', value, labels });
}
// 获取所有指标
getMetrics(): Metric[] {
return Array.from(this.metrics.values());
}
private buildKey(name: string, labels: Record<string, string>): string {
const labelStr = Object.entries(labels)
.map(([k, v]) => `${k}="${v}"`)
.join(',');
return labelStr ? `${name}{${labelStr}}` : name;
}
private getBucket(value: number): string {
const buckets = [0.1, 0.5, 1, 2, 5, 10, 30, 60, 120, 300, 600];
for (const bucket of buckets) {
if (value <= bucket) {
return `le="${bucket}"`;
}
}
return 'le="+Inf"';
}
}
```
### **告警规则**
```typescript
// 告警规则引擎
@Injectable()
export class AlertingEngine {
private rules: AlertRule[] = [];
private alertManager: AlertManager;
constructor(alertManager: AlertManager) {
this.alertManager = alertManager;
}
// 添加告警规则
addRule(rule: AlertRule): void {
this.rules.push(rule);
}
// 评估告警规则
evaluateRules(metrics: Metric[]): void {
for (const rule of this.rules) {
if (this.evaluateRule(rule, metrics)) {
this.triggerAlert(rule);
}
}
}
private evaluateRule(rule: AlertRule, metrics: Metric[]): boolean {
const metric = metrics.find(m => m.name === rule.metricName);
if (!metric) return false;
switch (rule.operator) {
case 'gt':
return metric.value > rule.threshold;
case 'gte':
return metric.value >= rule.threshold;
case 'lt':
return metric.value < rule.threshold;
case 'lte':
return metric.value <= rule.threshold;
case 'eq':
return metric.value === rule.threshold;
case 'ne':
return metric.value !== rule.threshold;
default:
return false;
}
}
private triggerAlert(rule: AlertRule): void {
const alert: Alert = {
id: uuidv4(),
ruleId: rule.id,
severity: rule.severity,
message: rule.message,
timestamp: new Date(),
status: 'firing'
};
this.alertManager.sendAlert(alert);
}
}
```
---
## 📚 **下一步**
- [查看开发计划](./development-plan.md) - 了解详细的开发路线图
- [开始快速上手](./quick-start.md) - 立即开始使用网关系统
- [查看API参考](./api-reference.md) - 完整的API接口文档
---
> **提示**: 本文档提供了网关系统的技术架构详解如需了解具体实现细节请查看相应的代码示例和API文档。

View File

@@ -0,0 +1,496 @@
# WWJCloud 网关系统待开发功能分析
> 本文档详细分析了 WWJCloud 网关系统的当前状态、缺失功能和开发计划
## 📋 **当前网关系统状态概览**
### **已实现功能** ✅
- **基础路由网关**: 完整的路由定义和管理
- **中间件系统**: 全局中间件、路由中间件
- **认证授权**: JWT、OAuth2.0、RBAC权限
- **网络安全**: HTTPS、CORS、CSRF防护
- **基础监控**: 健康检查、基础日志
- **文件上传**: 多文件上传、文件管理
### **缺失功能** ❌
- **微服务网关**: 服务发现、服务注册、负载均衡
- **服务网格**: Istio、Envoy集成
- **分布式追踪**: 链路追踪、性能分析
- **高级负载均衡**: 一致性哈希、熔断器
- **API网关管理**: 路由配置、限流配置
- **监控告警**: 性能监控、错误告警
---
## 🚨 **严重缺失功能(必须实现)**
### **1. 微服务网关** 🔴 **优先级:最高**
#### **1.1 服务发现系统**
```typescript
// 待实现:服务发现模块
@Module({
imports: [DiscoveryModule],
providers: [ServiceDiscoveryService],
exports: [ServiceDiscoveryService],
})
export class ServiceDiscoveryModule {}
// 核心功能需求:
// - 服务注册 (Service Registration)
// - 服务发现 (Service Discovery)
// - 健康检查 (Health Check)
// - 服务元数据管理 (Service Metadata)
```
#### **1.2 服务注册系统**
```typescript
// 待实现:服务注册模块
@Module({
imports: [RegistryModule],
providers: [ServiceRegistryService],
exports: [ServiceRegistryService],
})
export class ServiceRegistryModule {}
// 核心功能需求:
// - 自动服务注册 (Auto Registration)
// - 服务心跳检测 (Heartbeat Detection)
// - 服务状态管理 (Service Status Management)
// - 服务版本管理 (Service Version Management)
```
#### **1.3 负载均衡系统**
```typescript
// 待实现:负载均衡模块
@Module({
imports: [LoadBalancerModule],
providers: [LoadBalancerService],
exports: [LoadBalancerService],
})
export class LoadBalancerModule {}
// 核心功能需求:
// - 轮询负载均衡 (Round Robin)
// - 权重负载均衡 (Weighted)
// - 最少连接负载均衡 (Least Connections)
// - 一致性哈希负载均衡 (Consistent Hashing)
// - 健康检查负载均衡 (Health Check)
```
### **2. 服务网格支持** 🔴 **优先级:最高**
#### **2.1 Istio集成**
```typescript
// 待实现Istio集成模块
@Module({
imports: [IstioModule],
providers: [IstioService],
exports: [IstioService],
})
export class IstioModule {}
// 核心功能需求:
// - 流量管理 (Traffic Management)
// - 安全策略 (Security Policies)
// - 可观测性 (Observability)
// - 策略执行 (Policy Enforcement)
```
#### **2.2 Envoy代理集成**
```typescript
// 待实现Envoy代理模块
@Module({
imports: [EnvoyModule],
providers: [EnvoyService],
exports: [EnvoyService],
})
export class EnvoyModule {}
// 核心功能需求:
// - 代理配置管理 (Proxy Configuration)
// - 动态配置更新 (Dynamic Configuration)
// - 流量路由 (Traffic Routing)
// - 负载均衡 (Load Balancing)
```
### **3. 分布式追踪系统** 🔴 **优先级:最高**
#### **3.1 链路追踪**
```typescript
// 待实现:链路追踪模块
@Module({
imports: [TracingModule],
providers: [TracingService],
exports: [TracingService],
})
export class TracingModule {}
// 核心功能需求:
// - 请求链路追踪 (Request Tracing)
// - 跨服务追踪 (Cross-Service Tracing)
// - 性能分析 (Performance Analysis)
// - 错误追踪 (Error Tracing)
```
#### **3.2 性能监控**
```typescript
// 待实现:性能监控模块
@Module({
imports: [PerformanceModule],
providers: [PerformanceService],
exports: [PerformanceService],
})
export class PerformanceModule {}
// 核心功能需求:
// - 响应时间监控 (Response Time Monitoring)
// - 吞吐量监控 (Throughput Monitoring)
// - 资源使用监控 (Resource Usage Monitoring)
// - 性能指标聚合 (Performance Metrics Aggregation)
```
---
## ⚠️ **部分缺失功能(建议补充)**
### **4. API网关管理** 🟡 **优先级:高**
#### **4.1 路由配置管理**
```typescript
// 待实现:路由配置管理模块
@Module({
imports: [RouteConfigModule],
providers: [RouteConfigService],
exports: [RouteConfigService],
})
export class RouteConfigModule {}
// 核心功能需求:
// - 动态路由配置 (Dynamic Route Configuration)
// - 路由规则管理 (Route Rule Management)
// - 路由策略配置 (Route Policy Configuration)
// - 路由版本管理 (Route Version Management)
```
#### **4.2 限流配置管理**
```typescript
// 待实现:限流配置管理模块
@Module({
imports: [RateLimitModule],
providers: [RateLimitService],
exports: [RateLimitService],
})
export class RateLimitModule {}
// 核心功能需求:
// - 基于用户的限流 (User-Based Rate Limiting)
// - 基于IP的限流 (IP-Based Rate Limiting)
// - 基于API的限流 (API-Based Rate Limiting)
// - 动态限流配置 (Dynamic Rate Limit Configuration)
```
### **5. 监控告警系统** 🟡 **优先级:高**
#### **5.1 性能监控**
```typescript
// 待实现:性能监控模块
@Module({
imports: [MonitoringModule],
providers: [MonitoringService],
exports: [MonitoringService],
})
export class MonitoringModule {}
// 核心功能需求:
// - 实时性能监控 (Real-Time Performance Monitoring)
// - 历史性能分析 (Historical Performance Analysis)
// - 性能趋势分析 (Performance Trend Analysis)
// - 性能报告生成 (Performance Report Generation)
```
#### **5.2 告警系统**
```typescript
// 待实现:告警系统模块
@Module({
imports: [AlertingModule],
providers: [AlertingService],
exports: [AlertingService],
})
export class AlertingModule {}
// 核心功能需求:
// - 告警规则配置 (Alert Rule Configuration)
// - 告警触发机制 (Alert Trigger Mechanism)
// - 告警通知渠道 (Alert Notification Channels)
// - 告警升级策略 (Alert Escalation Strategy)
```
---
## ✨ **高级特性功能(可选实现)**
### **6. 高级负载均衡** 🟢 **优先级:中**
#### **6.1 熔断器模式**
```typescript
// 待实现:熔断器模块
@Module({
imports: [CircuitBreakerModule],
providers: [CircuitBreakerService],
exports: [CircuitBreakerService],
})
export class CircuitBreakerModule {}
// 核心功能需求:
// - 熔断器状态管理 (Circuit Breaker State Management)
// - 熔断器策略配置 (Circuit Breaker Policy Configuration)
// - 熔断器监控 (Circuit Breaker Monitoring)
// - 自动恢复机制 (Auto Recovery Mechanism)
```
#### **6.2 重试机制**
```typescript
// 待实现:重试机制模块
@Module({
imports: [RetryModule],
providers: [RetryService],
exports: [RetryService],
})
export class RetryModule {}
// 核心功能需求:
// - 重试策略配置 (Retry Policy Configuration)
// - 指数退避算法 (Exponential Backoff)
// - 重试次数限制 (Retry Count Limitation)
// - 重试条件配置 (Retry Condition Configuration)
```
### **7. 缓存网关** 🟢 **优先级:中**
#### **7.1 响应缓存**
```typescript
// 待实现:响应缓存模块
@Module({
imports: [ResponseCacheModule],
providers: [ResponseCacheService],
exports: [ResponseCacheService],
})
export class ResponseCacheModule {}
// 核心功能需求:
// - 响应缓存策略 (Response Caching Strategy)
// - 缓存失效管理 (Cache Invalidation Management)
// - 缓存预热机制 (Cache Warming Mechanism)
// - 缓存统计监控 (Cache Statistics Monitoring)
```
---
## 📅 **开发计划时间表**
### **第一阶段核心微服务网关3-6个月**
#### **第1个月服务发现系统**
- [ ] 设计服务发现架构
- [ ] 实现服务注册功能
- [ ] 实现服务发现功能
- [ ] 添加健康检查机制
- [ ] 编写单元测试
#### **第2个月负载均衡系统**
- [ ] 设计负载均衡架构
- [ ] 实现基础负载均衡算法
- [ ] 实现一致性哈希算法
- [ ] 添加健康检查负载均衡
- [ ] 编写单元测试
#### **第3个月服务注册系统**
- [ ] 设计服务注册架构
- [ ] 实现自动服务注册
- [ ] 实现服务心跳检测
- [ ] 实现服务状态管理
- [ ] 编写单元测试
### **第二阶段服务网格集成6-9个月**
#### **第4个月Istio集成**
- [ ] 研究Istio架构
- [ ] 实现Istio客户端
- [ ] 集成流量管理功能
- [ ] 集成安全策略功能
- [ ] 编写集成测试
#### **第5个月Envoy代理集成**
- [ ] 研究Envoy架构
- [ ] 实现Envoy客户端
- [ ] 集成代理配置管理
- [ ] 集成动态配置更新
- [ ] 编写集成测试
#### **第6个月服务网格功能**
- [ ] 实现流量路由功能
- [ ] 实现负载均衡功能
- [ ] 实现安全策略功能
- [ ] 实现可观测性功能
- [ ] 编写集成测试
### **第三阶段分布式追踪9-12个月**
#### **第7个月链路追踪基础**
- [ ] 设计链路追踪架构
- [ ] 实现请求链路追踪
- [ ] 实现跨服务追踪
- [ ] 实现追踪数据收集
- [ ] 编写单元测试
#### **第8个月性能监控**
- [ ] 设计性能监控架构
- [ ] 实现响应时间监控
- [ ] 实现吞吐量监控
- [ ] 实现资源使用监控
- [ ] 编写单元测试
#### **第9个月错误追踪**
- [ ] 设计错误追踪架构
- [ ] 实现错误收集功能
- [ ] 实现错误分析功能
- [ ] 实现错误报告功能
- [ ] 编写单元测试
### **第四阶段高级特性12-15个月**
#### **第10个月API网关管理**
- [ ] 设计API网关管理架构
- [ ] 实现动态路由配置
- [ ] 实现路由规则管理
- [ ] 实现路由策略配置
- [ ] 编写单元测试
#### **第11个月监控告警系统**
- [ ] 设计监控告警架构
- [ ] 实现性能监控功能
- [ ] 实现告警规则配置
- [ ] 实现告警通知功能
- [ ] 编写单元测试
#### **第12个月高级负载均衡**
- [ ] 设计高级负载均衡架构
- [ ] 实现熔断器模式
- [ ] 实现重试机制
- [ ] 实现高级算法
- [ ] 编写单元测试
---
## 🛠️ **技术实现建议**
### **推荐技术栈**
#### **微服务框架**
- **服务发现**: Consul、Eureka、Zookeeper
- **负载均衡**: Ribbon、LoadBalancer
- **熔断器**: Hystrix、Resilience4j
- **重试机制**: Retry4j、Spring Retry
#### **服务网格**
- **Istio**: 服务网格控制平面
- **Envoy**: 高性能代理
- **Linkerd**: 轻量级服务网格
- **Consul Connect**: 基于Consul的服务网格
#### **监控追踪**
- **Jaeger**: 分布式追踪系统
- **Zipkin**: 分布式追踪系统
- **Prometheus**: 监控系统
- **Grafana**: 可视化平台
#### **API网关**
- **Kong**: 高性能API网关
- **Traefik**: 现代HTTP反向代理
- **Ambassador**: Kubernetes原生API网关
- **Gloo**: 功能丰富的API网关
### **架构设计原则**
1. **模块化设计**: 每个功能模块独立,便于维护和扩展
2. **接口标准化**: 定义清晰的接口规范,便于集成
3. **配置外部化**: 支持外部配置,便于部署和运维
4. **监控可观测**: 全面的监控和追踪能力
5. **高可用设计**: 支持故障转移和自动恢复
6. **性能优化**: 支持高并发和低延迟
---
## 📊 **成功指标**
### **功能完整性指标**
- [ ] 微服务网关功能完整度 ≥ 90%
- [ ] 服务网格集成完整度 ≥ 80%
- [ ] 分布式追踪完整度 ≥ 85%
- [ ] 监控告警完整度 ≥ 80%
### **性能指标**
- [ ] 网关延迟 ≤ 10ms
- [ ] 支持并发请求 ≥ 10,000 QPS
- [ ] 服务发现响应时间 ≤ 100ms
- [ ] 负载均衡响应时间 ≤ 5ms
### **可靠性指标**
- [ ] 系统可用性 ≥ 99.9%
- [ ] 故障恢复时间 ≤ 30秒
- [ ] 数据一致性 ≥ 99.99%
- [ ] 错误率 ≤ 0.1%
---
## 🔍 **风险评估**
### **技术风险**
- **微服务复杂性**: 微服务架构增加了系统复杂性
- **服务网格学习成本**: Istio等工具学习成本较高
- **分布式系统挑战**: 分布式追踪和监控实现复杂
### **资源风险**
- **开发时间**: 预计需要15个月完成所有功能
- **技术人才**: 需要具备微服务和云原生经验的开发人员
- **测试资源**: 需要大量的测试环境和测试数据
### **运维风险**
- **部署复杂性**: 微服务部署比单体应用复杂
- **监控复杂性**: 分布式系统监控比单体系统复杂
- **故障排查**: 分布式系统故障排查难度增加
---
## 📚 **参考资料**
### **官方文档**
- [NestJS 官方文档](https://nestjs.com/)
- [Istio 官方文档](https://istio.io/)
- [Envoy 官方文档](https://www.envoyproxy.io/)
- [Consul 官方文档](https://www.consul.io/)
### **技术博客**
- [微服务架构设计模式](https://microservices.io/)
- [服务网格最佳实践](https://servicemesh.io/)
- [分布式追踪实现指南](https://opentracing.io/)
### **开源项目**
- [NestJS 微服务示例](https://github.com/nestjs/nest/tree/master/sample)
- [Istio 示例项目](https://github.com/istio/istio/tree/master/samples)
- [Envoy 示例配置](https://github.com/envoyproxy/envoy/tree/master/examples)
---
## 📝 **更新日志**
| 版本 | 日期 | 更新内容 | 更新人 |
|------|------|----------|--------|
| v1.0.0 | 2025-08-25 | 初始版本,基础功能分析 | 系统分析员 |
| v1.1.0 | - | 待更新 | - |
| v1.2.0 | - | 待更新 | - |
---
> **注意**: 本文档将根据开发进度和需求变化持续更新,请定期查看最新版本。

View File

@@ -0,0 +1,100 @@
# WWJCloud 网关系统文档
> 本文档集合涵盖了 WWJCloud 网关系统的完整技术文档
## 📚 **文档导航**
### **🚀 快速开始**
- [网关系统概览](./overview.md) - 了解网关系统的基本概念和架构
- [快速开始指南](./quick-start.md) - 快速上手网关系统开发
### **🏗️ 架构设计**
- [技术架构详解](./architecture.md) - 深入理解网关系统的技术架构
- [组件设计说明](./components.md) - 了解各个组件的设计原理
### **📋 开发指南**
- [开发计划](./development-plan.md) - 详细的开发时间表和任务分解
- [API 参考](./api-reference.md) - 网关系统的 API 接口文档
- [配置指南](./configuration.md) - 系统配置和参数说明
### **🔧 运维指南**
- [部署指南](./deployment.md) - 系统部署和安装说明
- [监控告警](./monitoring.md) - 系统监控和告警配置
- [故障排查](./troubleshooting.md) - 常见问题解决方案
### **📊 性能优化**
- [性能调优](./performance.md) - 系统性能优化指南
- [负载均衡](./load-balancing.md) - 负载均衡策略和配置
- [缓存策略](./caching.md) - 缓存机制和优化方案
---
## 🌟 **核心特性**
### **微服务网关**
- **服务发现**: 自动服务注册和发现
- **负载均衡**: 多种负载均衡算法支持
- **熔断器**: 服务保护机制
- **重试机制**: 智能重试策略
### **服务网格**
- **Istio 集成**: 完整的服务网格解决方案
- **Envoy 代理**: 高性能代理支持
- **流量管理**: 灵活的流量路由策略
- **安全策略**: 多层次安全防护
### **监控追踪**
- **分布式追踪**: 完整的请求链路追踪
- **性能监控**: 实时性能指标监控
- **告警系统**: 智能告警和通知
- **日志聚合**: 集中化日志管理
---
## 🎯 **适用场景**
- **企业级应用**: 大型分布式系统
- **微服务架构**: 服务间通信管理
- **云原生部署**: 容器化和 Kubernetes 支持
- **高并发系统**: 高性能网关需求
- **多租户系统**: SaaS 应用支持
---
## 🚀 **快速体验**
### **环境要求**
- Node.js >= 18.0.0
- NestJS >= 11.0.0
- Docker >= 20.0.0
- Kubernetes >= 1.20.0
### **快速启动**
```bash
# 克隆项目
git clone <repository-url>
cd wwjcloud-nestjs
# 安装依赖
npm install
# 启动开发环境
npm run start:dev
```
### **访问地址**
- **API 文档**: http://localhost:3001/docs
- **健康检查**: http://localhost:3001/health
- **监控面板**: http://localhost:3001/monitoring
---
## 📞 **技术支持**
- **文档问题**: 在 GitHub 上提交 Issue
- **技术交流**: 加入技术交流群
- **商业支持**: 联系技术支持团队
---
> **注意**: 本文档将根据开发进度持续更新,请定期查看最新版本。

View File

@@ -0,0 +1,37 @@
# Kong decK 使用说明
## 前置
- 已安装并启动 KongDB 模式,推荐 Postgres
- 安装 decK参考官方文档
## 目录
- 配置文件:`deck.yaml`
## 常用命令
```bash
# 校验配置
deck validate --state deck.yaml
# 直接导入(会覆盖已有同名资源)
deck sync --state deck.yaml
# 以 diff 方式查看变更
deck diff --state deck.yaml
```
## 本地开发说明
- services.host 使用 `host.docker.internal:3001` 将请求转发到宿主机运行的 NestJS
- 若 Kong 与后端同在宿主机,可将 host 改为 `localhost`
## 插件
- correlation-id统一请求 ID上游未传则生成下游透传
- rate-limiting示例每分钟 300 次,可据环境覆盖
- prometheus开启 Kong 指标,抓取地址 `:8001/metrics`
## 环境差异化
- 建议按环境拆分 `deck.dev.yaml``deck.prod.yaml` 或使用 CI 注入变量
- 关键变量:上游 host/port、限流阈值、超时、JWT 公钥/密钥
## 与后端配合
- 后端会记录并透传 `X-Request-ID` / `traceparent`
- Kong 可作为北向入口,/api 与 /adminapi 分流

View File

@@ -0,0 +1,73 @@
_format_version: "3.0"
_transform: true
info:
select_tags:
- wwjcloud
services:
- name: wwjcloud-backend
host: host.docker.internal
port: 3001
protocol: http
routes:
- name: wwjcloud-api
paths:
- /api
strip_path: false
methods:
- GET
- POST
- PUT
- PATCH
- DELETE
- OPTIONS
tags: [wwjcloud]
- name: wwjcloud-adminapi
paths:
- /adminapi
strip_path: false
methods:
- GET
- POST
- PUT
- PATCH
- DELETE
- OPTIONS
tags: [wwjcloud]
tags: [wwjcloud]
plugins:
# 统一关联请求 ID如果上游没传则生成
- name: correlation-id
config:
header_name: X-Request-ID
generator: uuid
echo_downstream: true
tags: [wwjcloud]
# 速率限制(示例:每分钟 300 次)
- name: rate-limiting
config:
minute: 300
policy: local
fault_tolerant: true
hide_client_headers: false
tags: [wwjcloud]
# Prometheus 指标
- name: prometheus
tags: [wwjcloud]
# 上游超时(毫秒)
- name: upstream-timeout
enabled: false
config:
connect_timeout: 6000
send_timeout: 30000
read_timeout: 30000
tags: [wwjcloud]
consumers: []
jwt_secrets: []

View File

@@ -0,0 +1,230 @@
# 网关系统概览
> 了解 WWJCloud 网关系统的基本概念、架构和特性
## 🌟 **什么是网关系统**
网关系统是 WWJCloud 框架的核心组件,负责处理所有进入系统的请求,提供路由、负载均衡、认证授权、监控追踪等核心功能。它是连接前端应用和后端服务的桥梁,确保系统的高可用性、安全性和可观测性。
### **核心作用**
- **统一入口**: 为所有服务提供统一的访问入口
- **流量管理**: 智能路由和负载均衡
- **安全防护**: 认证授权和安全策略
- **性能优化**: 缓存、限流、熔断等机制
- **监控追踪**: 完整的可观测性支持
---
## 🏗️ **系统架构**
### **整体架构图**
```
┌─────────────────────────────────────────────────────────────┐
│ 用户请求层 │
├─────────────────────────────────────────────────────────────┤
│ Web浏览器 │ 移动应用 │ API客户端 │ 第三方系统 │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ CDN + 负载均衡层 │
├─────────────────────────────────────────────────────────────┤
│ 全球CDN │ 智能DNS │ 负载均衡器 │ 健康检查 │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ API网关层 (Kong/Envoy) │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 路由管理 │ │ 限流控制 │ │ 安全策略 │ │
│ │ │ │ │ │ │ │
│ │ • 动态路由 │ │ • 用户限流 │ │ • 访问控制 │ │
│ │ • 路由版本 │ │ • IP限流 │ │ • 流量控制 │ │
│ │ • 路由策略 │ │ • API限流 │ │ • 安全防护 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ NestJS 微服务网关层 │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 服务发现 │ │ 负载均衡 │ │ 熔断器 │ │
│ │ │ │ │ │ │ │
│ │ • 服务注册 │ │ • 轮询算法 │ │ • 状态管理 │ │
│ │ • 服务发现 │ │ • 权重算法 │ │ • 策略配置 │ │
│ │ • 健康检查 │ │ • 一致性哈希│ │ • 自动恢复 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 服务网格层 (Istio) │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 流量管理 │ │ 安全策略 │ │ 可观测性 │ │
│ │ │ │ │ │ │ │
│ │ • 流量路由 │ │ • 身份认证 │ │ • 指标收集 │ │
│ │ • 流量分割 │ │ • 授权策略 │ │ • 日志聚合 │ │
│ │ • 流量镜像 │ │ • 加密通信 │ │ • 链路追踪 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 微服务层 │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 用户服务 │ │ 权限服务 │ │ 文件服务 │ │
│ │ │ │ │ │ │ │
│ │ • 会员管理 │ │ • 角色管理 │ │ • 文件上传 │ │
│ │ • 管理员 │ │ • 菜单管理 │ │ • 文件管理 │ │
│ │ • 认证授权 │ │ • 权限控制 │ │ • 存储适配 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 数据存储层 │
├─────────────────────────────────────────────────────────────┤
│ MySQL集群 │ Redis集群 │ 对象存储 │ 时序数据库 │
└─────────────────────────────────────────────────────────────┘
```
---
## 🔧 **核心组件**
### **1. API网关层**
- **Kong**: 高性能API网关提供丰富的插件生态
- **Envoy**: 现代HTTP代理支持动态配置
- **功能**: 路由管理、限流控制、安全策略
### **2. 微服务网关层**
- **服务发现**: 自动服务注册和发现机制
- **负载均衡**: 多种负载均衡算法支持
- **熔断器**: 服务保护和服务降级
- **重试机制**: 智能重试和指数退避
### **3. 服务网格层**
- **Istio**: 完整的服务网格解决方案
- **流量管理**: 灵活的流量路由策略
- **安全策略**: 多层次安全防护
- **可观测性**: 完整的监控和追踪
### **4. 监控追踪层**
- **Prometheus**: 指标收集和告警
- **Jaeger**: 分布式链路追踪
- **Grafana**: 数据可视化和仪表板
- **ELK Stack**: 日志聚合和分析
---
## 🚀 **核心特性**
### **微服务支持**
- **服务发现**: 支持多种服务发现机制
- **负载均衡**: 轮询、权重、一致性哈希等算法
- **熔断器**: 自动故障检测和恢复
- **重试机制**: 智能重试策略
### **安全防护**
- **认证授权**: JWT、OAuth2.0、RBAC
- **访问控制**: 基于角色的权限控制
- **流量控制**: 限流、熔断、降级
- **加密通信**: TLS/SSL 加密支持
### **性能优化**
- **缓存机制**: 多级缓存策略
- **连接池**: 数据库和外部服务连接池
- **异步处理**: 非阻塞异步处理
- **资源管理**: 智能资源分配
### **可观测性**
- **指标监控**: 实时性能指标
- **链路追踪**: 完整的请求链路
- **日志聚合**: 集中化日志管理
- **告警通知**: 智能告警机制
---
## 📊 **性能指标**
### **响应时间**
- **网关延迟**: ≤ 10ms
- **服务发现**: ≤ 100ms
- **负载均衡**: ≤ 5ms
- **链路追踪**: ≤ 50ms
### **吞吐量**
- **并发处理**: ≥ 10,000 QPS
- **连接数**: ≥ 100,000 并发连接
- **缓存命中率**: ≥ 95%
- **系统可用性**: ≥ 99.9%
---
## 🎯 **应用场景**
### **企业级应用**
- **大型分布式系统**: 支持数百个微服务
- **高并发场景**: 支持数万并发用户
- **多租户系统**: SaaS 应用支持
- **混合云部署**: 跨云平台部署
### **微服务架构**
- **服务治理**: 完整的服务生命周期管理
- **流量管理**: 灵活的流量路由策略
- **故障隔离**: 服务间故障隔离
- **弹性伸缩**: 自动扩缩容支持
### **云原生应用**
- **容器化部署**: Docker 和 Kubernetes 支持
- **服务网格**: Istio 和 Envoy 集成
- **DevOps**: 自动化部署和运维
- **监控告警**: 完整的可观测性
---
## 🚀 **快速开始**
### **环境要求**
- Node.js >= 18.0.0
- NestJS >= 11.0.0
- Docker >= 20.0.0
- Kubernetes >= 1.20.0
### **安装步骤**
```bash
# 1. 克隆项目
git clone <repository-url>
cd wwjcloud-nestjs
# 2. 安装依赖
npm install
# 3. 配置环境
cp .env.example .env
# 编辑 .env 文件
# 4. 启动服务
npm run start:dev
```
### **验证安装**
- **健康检查**: http://localhost:3001/health
- **API 文档**: http://localhost:3001/docs
- **监控面板**: http://localhost:3001/monitoring
---
## 📚 **下一步**
- [查看技术架构](./architecture.md) - 深入了解技术实现
- [阅读开发计划](./development-plan.md) - 了解开发路线图
- [开始快速上手](./quick-start.md) - 立即开始使用
---
> **提示**: 本文档提供了网关系统的基本概览,如需深入了解特定功能,请查看相应的详细文档。

View File

@@ -0,0 +1,375 @@
# 快速开始指南
> 快速上手 WWJCloud 网关系统,从零开始搭建完整的网关环境
## 🚀 **环境准备**
### **系统要求**
- **操作系统**: Windows 10+, macOS 10.15+, Ubuntu 18.04+
- **Node.js**: >= 18.0.0
- **npm**: >= 8.0.0 或 pnpm >= 7.0.0
- **Docker**: >= 20.0.0 (可选)
- **Kubernetes**: >= 1.20.0 (可选)
### **开发工具**
- **代码编辑器**: VS Code (推荐)
- **API 测试**: Postman 或 Apifox
- **数据库管理**: MySQL Workbench 或 phpMyAdmin
- **容器管理**: Docker Desktop
---
## 📦 **安装步骤**
### **1. 克隆项目**
```bash
# 克隆项目到本地
git clone <your-repository-url>
cd wwjcloud-nestjs
# 检查项目结构
ls -la
```
### **2. 安装依赖**
```bash
# 使用 npm 安装
npm install
# 或使用 pnpm (推荐)
pnpm install
# 检查安装结果
npm list --depth=0
```
### **3. 环境配置**
```bash
# 复制环境配置文件
cp .env.example .env
# 编辑环境配置
nano .env
```
**环境配置示例**:
```env
# 应用配置
NODE_ENV=development
PORT=3001
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=your_password
DB_DATABASE=wwjcloud
# Redis配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
# JWT配置
JWT_SECRET=your_jwt_secret_key
JWT_EXPIRES_IN=7d
# 日志配置
LOG_LEVEL=info
```
### **4. 数据库准备**
```bash
# 启动 MySQL 服务
sudo systemctl start mysql
# 创建数据库
mysql -u root -p
CREATE DATABASE wwjcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EXIT;
# 导入数据库结构
mysql -u root -p wwjcloud < sql/wwjcloud.sql
```
### **5. 启动服务**
```bash
# 开发模式启动
npm run start:dev
# 或使用 pnpm
pnpm start:dev
```
---
## ✅ **验证安装**
### **健康检查**
```bash
# 检查服务状态
curl http://localhost:3001/health
# 预期响应
{
"status": "ok",
"timestamp": "2025-08-25T02:36:55.746Z",
"uptime": 123.456
}
```
### **API 文档**
- **访问地址**: http://localhost:3001/docs
- **功能**: 查看所有可用的 API 接口
- **测试**: 在线测试 API 功能
### **服务状态**
```bash
# 检查端口占用
netstat -tulpn | grep :3001
# 检查进程状态
ps aux | grep node
```
---
## 🔧 **基础配置**
### **路由配置**
```typescript
// src/app.module.ts
@Module({
imports: [
// 基础模块
ConfigModule.forRoot({
isGlobal: true,
load: [configuration],
}),
// 网关模块
GatewayModule,
// 业务模块
UserModule,
AuthModule,
],
})
export class AppModule {}
```
### **中间件配置**
```typescript
// src/main.ts
async function bootstrap() {
const app = await NestFactory.create(AppModule);
// 全局中间件
app.useGlobalPipes(new ValidationPipe());
app.useGlobalInterceptors(new TransformInterceptor());
// CORS 配置
app.enableCors({
origin: ['http://localhost:3000', 'http://localhost:8080'],
credentials: true,
});
// 启动服务
await app.listen(3001);
}
```
### **环境变量配置**
```typescript
// src/config/index.ts
export default () => ({
nodeEnv: process.env.NODE_ENV || 'development',
port: parseInt(process.env.PORT || '3000', 10),
// 网关配置
gateway: {
enabled: process.env.GATEWAY_ENABLED === 'true',
timeout: parseInt(process.env.GATEWAY_TIMEOUT || '30000', 10),
retries: parseInt(process.env.GATEWAY_RETRIES || '3', 10),
},
// 负载均衡配置
loadBalancer: {
algorithm: process.env.LB_ALGORITHM || 'round-robin',
healthCheck: process.env.LB_HEALTH_CHECK === 'true',
},
});
```
---
## 🧪 **测试网关功能**
### **1. 基础路由测试**
```bash
# 测试用户注册
curl -X POST http://localhost:3001/api/member/register \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"email": "test@example.com",
"password": "password123"
}'
# 测试用户登录
curl -X POST http://localhost:3001/api/member/login \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"password": "password123"
}'
```
### **2. 认证测试**
```bash
# 获取 JWT Token
TOKEN=$(curl -s -X POST http://localhost:3001/api/member/login \
-H "Content-Type: application/json" \
-d '{"username": "testuser", "password": "password123"}' \
| jq -r '.access_token')
# 使用 Token 访问受保护的接口
curl -X GET http://localhost:3001/api/member/profile \
-H "Authorization: Bearer $TOKEN"
```
### **3. 负载均衡测试**
```bash
# 模拟并发请求
for i in {1..10}; do
curl -s http://localhost:3001/api/member/profile \
-H "Authorization: Bearer $TOKEN" &
done
wait
```
---
## 📊 **监控和日志**
### **日志查看**
```bash
# 查看应用日志
tail -f logs/app-$(date +%Y-%m-%d).log
# 查看错误日志
grep "ERROR" logs/app-$(date +%Y-%m-%d).log
# 查看性能日志
grep "PERFORMANCE" logs/app-$(date +%Y-%m-%d).log
```
### **性能监控**
```bash
# 检查内存使用
ps -o pid,ppid,%mem,%cpu,cmd -p $(pgrep node)
# 检查网络连接
netstat -an | grep :3001 | wc -l
# 检查响应时间
curl -w "@curl-format.txt" -o /dev/null -s http://localhost:3001/health
```
**curl-format.txt 内容**:
```
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect: %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
----------\n
time_total: %{time_total}\n
```
---
## 🚨 **常见问题**
### **1. 端口被占用**
```bash
# 查找占用端口的进程
lsof -i :3001
# 杀死进程
kill -9 <PID>
# 或者修改端口
export PORT=3002
npm run start:dev
```
### **2. 数据库连接失败**
```bash
# 检查 MySQL 服务状态
sudo systemctl status mysql
# 检查数据库连接
mysql -u root -p -h localhost
# 检查防火墙设置
sudo ufw status
```
### **3. 依赖安装失败**
```bash
# 清理缓存
npm cache clean --force
# 删除 node_modules
rm -rf node_modules package-lock.json
# 重新安装
npm install
```
---
## 🔄 **下一步操作**
### **开发模式**
- [ ] 熟悉项目结构和代码组织
- [ ] 了解各个模块的功能和接口
- [ ] 开始开发新的功能模块
- [ ] 编写单元测试和集成测试
### **生产部署**
- [ ] 配置生产环境变量
- [ ] 设置数据库和缓存
- [ ] 配置负载均衡和反向代理
- [ ] 设置监控和告警
### **高级功能**
- [ ] 实现微服务网关功能
- [ ] 集成服务网格技术
- [ ] 添加分布式追踪
- [ ] 优化性能和可靠性
---
## 📚 **相关文档**
- [网关系统概览](./overview.md) - 了解系统架构和特性
- [技术架构详解](./architecture.md) - 深入理解技术实现
- [开发计划](./development-plan.md) - 查看开发路线图
- [API 参考](./api-reference.md) - 完整的 API 文档
---
## 💡 **提示和建议**
1. **开发环境**: 建议使用 VS Code 和相关的 NestJS 插件
2. **版本控制**: 定期提交代码,保持良好的版本管理习惯
3. **测试驱动**: 先写测试,再写代码,确保代码质量
4. **文档更新**: 及时更新文档,保持文档与代码同步
5. **性能优化**: 关注性能指标,持续优化系统性能
---
> **注意**: 如果遇到问题,请查看日志文件或提交 Issue 到项目仓库。

View File

@@ -0,0 +1,218 @@
# 基础概念
::: info 理解 wwjcloud 框架
为了更好地理解和使用 wwjcloud 框架,我们需要了解一些基础概念。
:::
## 核心概念
### 🏗️ 基础架构
wwjcloud 框架基于 NestJS 构建,采用了分层架构设计:
```mermaid
graph TB
A[Controller 控制器层] --> B[Service 服务层]
B --> C[Repository 数据访问层]
C --> D[Database 数据库]
E[BaseEntity] --> F[BaseService]
F --> G[BaseController]
```
### 📦 模块化设计
框架采用模块化设计,每个业务功能都是一个独立的模块:
```
src/
├── core/ # 核心模块
│ ├── base/ # 基础类
│ ├── lang/ # 多语言系统
│ └── utils/ # 工具函数
├── common/ # 业务模块
│ ├── member/ # 会员模块
│ ├── notice/ # 通知模块
│ ├── schedule/ # 定时任务
│ ├── rbac/ # 权限管理
│ └── admin/ # 管理模块
└── config/ # 配置文件
```
## 基础类
### 🔧 BaseEntity
所有实体的基类,提供通用字段和功能:
```typescript
export abstract class BaseEntity {
@Column({ name: 'site_id', type: 'int', default: 0 })
site_id: number;
@Column({ name: 'create_time', type: 'int', default: 0 })
create_time: number;
@Column({ name: 'update_time', type: 'int', default: 0 })
update_time: number;
@Column({ name: 'is_del', type: 'tinyint', default: 0 })
is_del: number;
@Column({ name: 'delete_time', type: 'int', default: 0 })
delete_time: number;
}
```
**特点:**
- **通用字段**:包含所有实体都需要的字段
- **软删除**:统一的软删除机制
- **时间戳**:自动管理创建和更新时间
- **站点隔离**:支持多站点部署
### 🛠️ BaseService
提供通用的 CRUD 操作和业务逻辑:
```typescript
export abstract class BaseService<T> {
constructor(protected readonly repository: Repository<T>) {}
async findAll(): Promise<T[]> {
return this.repository.find({
where: { is_del: 0 } as any
});
}
async findById(id: number): Promise<T | null> {
return this.repository.findOne({
where: { id, is_del: 0 } as any
});
}
async create(data: Partial<T>): Promise<T> {
const entity = this.repository.create(data);
return this.repository.save(entity);
}
}
```
**特点:**
- **通用 CRUD**:提供标准的增删改查操作
- **软删除**:自动处理软删除逻辑
- **查询过滤**:自动过滤已删除的数据
- **错误处理**:统一的错误处理机制
### 🎮 BaseController
提供标准的 API 端点:
```typescript
export abstract class BaseController<T> {
constructor(protected readonly service: BaseService<T>) {}
@Get()
async getList() {
const data = await this.service.findAll();
return {
code: 200,
message: '获取成功',
data
};
}
@Post()
async create(@Body() data: Partial<T>) {
const result = await this.service.create(data);
return {
code: 200,
message: '创建成功',
data: result
};
}
}
```
**特点:**
- **标准端点**:提供 RESTful API 标准端点
- **统一响应**:统一的响应格式
- **参数验证**:自动参数验证
- **错误处理**:统一的错误处理
## 软删除机制
### 🗑️ 双字段策略
wwjcloud 采用双字段软删除策略:
```typescript
// 软删除字段
@Column({ name: 'is_del', type: 'tinyint', default: 0 })
is_del: number; // 0: 正常, 1: 已删除
@Column({ name: 'delete_time', type: 'int', default: 0 })
delete_time: number; // 删除时间戳
```
**优势:**
- **查询效率**`is_del` 字段便于快速查询
- **时间记录**`delete_time` 记录删除时间
- **恢复功能**:支持数据恢复
- **兼容性**:与 PHP 框架保持一致
## 多语言系统
### 🌐 动态加载
支持运行时动态加载语言包:
```typescript
// 语言包目录结构
src/
common/lang/ #
zh-cn/
common.json
member.json
en/
common.json
member.json
app/lang/ #
addons/*/lang/ #
```
## 统一响应格式
### 📊 标准格式
所有 API 响应都遵循统一格式:
```typescript
interface ApiResponse<T = any> {
code: number; // 状态码
message: string; // 消息
data: T; // 数据
timestamp: number; // 时间戳
}
```
## 下一步
::: tip 深入学习
1. **查看架构文档**:了解整体架构设计
2. **阅读 API 规范**:了解接口设计规范
3. **参考开发规范**:遵循开发规范
4. **查看最佳实践**:学习最佳实践
:::
::: warning 注意事项
- 所有实体都应该继承 BaseEntity
- 所有服务都应该继承 BaseService
- 遵循统一的命名规范
- 使用统一的响应格式
:::

View File

@@ -0,0 +1,230 @@
# 框架介绍
::: info 你正在阅读的是 [wwjcloud](https://github.com/vbenjs/vue-vben-admin) 框架文档!
wwjcloud 是一个基于 NestJS 的现代化后端框架,专为 PHP 项目迁移而设计。我们致力于提供一个平滑的迁移路径,让您能够轻松地从 PHP 迁移到现代化的 Node.js 技术栈。
- 如果你只是想体验一下,你可以查看[快速开始](./quick-start.md)。
- 如发现文档有误,欢迎提交 [issue](https://github.com/vbenjs/vue-vben-admin/issues) 帮助我们改进。
:::
## 设计理念
### 🎯 核心目标
- **平滑迁移**:保持与 PHP 框架的数据库一致性和业务逻辑兼容性
- **现代化**:采用最新的 Node.js 技术栈,提供更好的性能和开发体验
- **企业级**:内置多语言、权限管理、软删除等企业级功能
- **开箱即用**:提供完整的开发规范和最佳实践
### 🔄 迁移友好
我们深知从 PHP 迁移到 Node.js 的挑战,因此 wwjcloud 框架在设计时特别考虑了:
- **数据库一致性**:保持与 PHP 框架相同的数据库结构
- **软删除机制**:统一的双字段软删除策略 (`is_del` + `delete_time`)
- **命名规范**:保持与 PHP 框架一致的字段命名和表结构
- **业务逻辑**:核心业务逻辑与 PHP 框架保持一致
## 技术架构
### 🏗️ 整体架构
```mermaid
graph TB
A[前端应用] --> B[API Gateway]
B --> C[wwjcloud 后端]
C --> D[数据库层]
C --> E[缓存层]
C --> F[文件存储]
subgraph "wwjcloud 核心"
G[BaseEntity] --> H[BaseService]
H --> I[BaseController]
J[多语言系统] --> K[权限管理]
L[软删除] --> M[统一响应]
end
C --> G
C --> J
C --> L
```
### 🧩 核心组件
::: grid
```md
### BaseEntity
- 统一的基础实体类
- 包含通用字段 (site_id, create_time, update_time)
- 软删除机制 (is_del, delete_time)
- 时间戳管理
```
```md
### BaseService
- 通用 CRUD 操作
- 软删除处理
- 查询条件构建
- 错误处理
```
```md
### BaseController
- 标准 API 端点
- 统一响应格式
- 参数验证
- 错误处理
```
```md
### 多语言系统
- 动态语言包加载
- 缓存机制
- 模块化语言包
- 支持 common/app/addons
```
:::
## 技术栈
### 🛠️ 核心技术
- **NestJS** - 现代化 Node.js 框架
- **TypeScript** - 强类型 JavaScript
- **TypeORM** - 数据库 ORM
- **MySQL** - 主数据库
- **Redis** - 缓存存储
- **JWT** - 身份认证
### 📦 开发工具
- **ESLint** - 代码规范检查
- **Prettier** - 代码格式化
- **Swagger** - API 文档生成
- **Jest** - 单元测试
- **Docker** - 容器化部署
## 目录结构
```
wwjcloud/
├── src/
│ ├── core/ # 核心模块
│ │ ├── base/ # 基础类
│ │ ├── lang/ # 多语言系统
│ │ └── utils/ # 工具函数
│ ├── common/ # 业务模块
│ │ ├── member/ # 会员模块
│ │ ├── notice/ # 通知模块
│ │ ├── schedule/ # 定时任务
│ │ ├── rbac/ # 权限管理
│ │ └── admin/ # 管理模块
│ ├── config/ # 配置文件
│ ├── vendor/ # 第三方服务
│ └── migrations/ # 数据库迁移
├── test/ # 测试文件
├── docs/ # 文档
└── docker/ # Docker 配置
```
## 核心特性
### 🔐 权限管理
- **RBAC 模型**:基于角色的访问控制
- **动态权限**:支持动态权限配置
- **按钮级权限**:细粒度的权限控制
- **菜单权限**:动态菜单显示
### 🌐 多语言支持
- **动态加载**:支持运行时语言包加载
- **模块化**:按业务模块组织语言包
- **缓存机制**:提高语言包加载性能
- **扩展性**:支持插件语言包
### 🗑️ 软删除机制
- **双字段策略**`is_del` + `delete_time`
- **统一处理**BaseService 自动处理软删除
- **查询过滤**:自动过滤已删除数据
- **恢复功能**:支持数据恢复
### 📊 统一响应格式
```typescript
{
code: 200,
message: "操作成功",
data: {},
timestamp: 1640995200
}
```
## 开发规范
### 📝 命名规范
- **数据库字段**:使用下划线命名法 (`snake_case`)
- **TypeScript 属性**:使用下划线命名法 (`snake_case`)
- **方法名**:使用驼峰命名法 (`camelCase`)
- **文件名**:使用帕斯卡命名法 (`PascalCase`)
### 🏗️ 架构规范
- **模块化设计**:按业务功能划分模块
- **依赖注入**:使用 NestJS 的依赖注入
- **接口分离**:遵循接口隔离原则
- **单一职责**:每个类只负责一个功能
### 🔧 代码规范
- **TypeScript**:严格类型检查
- **ESLint**:代码质量检查
- **Prettier**:代码格式化
- **注释规范**:完整的代码注释
## 迁移优势
### 🚀 性能提升
- **异步处理**Node.js 的异步非阻塞特性
- **内存优化**:更好的内存管理
- **并发处理**:更高的并发处理能力
- **缓存策略**Redis 缓存提升性能
### 🛠️ 开发效率
- **TypeScript**:强类型支持,减少错误
- **热重载**:开发时自动重载
- **调试工具**:丰富的调试工具
- **生态丰富**npm 生态丰富
### 🔒 安全性
- **JWT 认证**:无状态的认证机制
- **参数验证**:严格的参数验证
- **SQL 注入防护**ORM 自动防护
- **XSS 防护**:内置安全防护
## 下一步
::: tip 开始使用
1. **阅读快速开始**:了解如何快速搭建项目
2. **查看基础概念**:理解框架的核心概念
3. **参考 API 文档**:了解可用的 API 接口
4. **查看迁移指南**:了解如何从 PHP 迁移
:::
::: warning 注意事项
- 确保 Node.js 版本 >= 16
- 数据库需要 MySQL 5.7+ 或 8.0+
- 建议使用 Docker 进行部署
- 请遵循开发规范进行开发
:::

View File

@@ -0,0 +1,184 @@
# 快速开始
::: info 快速上手 wwjcloud 框架
本指南将帮助您快速搭建一个 wwjcloud 项目,并运行第一个 API 接口。
:::
## 环境要求
### 📋 系统要求
- **Node.js** >= 16.0.0
- **MySQL** >= 5.7 或 8.0
- **Redis** >= 6.0 (可选,用于缓存)
- **Git** >= 2.0
### 🔧 开发工具
- **VS Code** (推荐)
- **Postman** 或 **Apifox** (API 测试)
- **MySQL Workbench** (数据库管理)
## 项目初始化
### 1. 克隆项目
```bash
# 克隆项目到本地
git clone <your-repository-url>
cd wwjcloud-nestjs
```
### 2. 安装依赖
```bash
# 安装项目依赖
npm install
```
### 3. 环境配置
复制环境配置文件:
```bash
# 复制环境配置文件
cp .env.example .env
```
编辑 `.env` 文件,配置数据库连接:
```env
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=your_password
DB_DATABASE=wwjcloud
# JWT 配置
JWT_SECRET=your_jwt_secret_key
JWT_EXPIRES_IN=7d
# 应用配置
PORT=3000
NODE_ENV=development
```
### 4. 启动项目
```bash
# 开发模式启动
npm run start:dev
```
项目启动后,访问以下地址:
- **API 文档**http://localhost:3000/api-docs
- **健康检查**http://localhost:3000/health
## 第一个 API
### 1. 创建实体
`src/common/member/entities/Member.ts` 中:
```typescript
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
import { BaseEntity } from '../../../core/base/BaseEntity';
@Entity('member')
export class Member extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column({ name: 'username', type: 'varchar', length: 50 })
username: string;
@Column({ name: 'email', type: 'varchar', length: 100 })
email: string;
@Column({ name: 'status', type: 'tinyint', default: 1 })
status: number;
}
```
### 2. 创建服务
`src/common/member/services/core/CoreMemberService.ts` 中:
```typescript
import { Injectable } from '@nestjs/common';
import { BaseService } from '../../../../core/base/BaseService';
import { Member } from '../entities/Member';
@Injectable()
export class CoreMemberService extends BaseService<Member> {
constructor() {
super(Member);
}
// 自定义业务方法
async getActiveMembers() {
return this.repository.find({
where: { status: 1, is_del: 0 }
});
}
}
```
### 3. 创建控制器
`src/common/member/controllers/api/MemberController.ts` 中:
```typescript
import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { CoreMemberService } from '../../services/core/CoreMemberService';
import { Member } from '../../entities/Member';
@Controller('api/member')
export class MemberController {
constructor(private readonly memberService: CoreMemberService) {}
@Get()
async getMembers() {
const members = await this.memberService.findAll();
return {
code: 200,
message: '获取成功',
data: members
};
}
@Post()
async createMember(@Body() memberData: Partial<Member>) {
const member = await this.memberService.create(memberData);
return {
code: 200,
message: '创建成功',
data: member
};
}
}
```
## 下一步
::: tip 深入学习
1. **阅读框架介绍**:了解框架的设计理念
2. **查看基础概念**:理解核心概念
3. **参考 API 文档**:了解可用的 API
4. **查看开发规范**:遵循开发规范
:::
::: warning 注意事项
- 确保所有依赖都正确安装
- 检查环境配置是否正确
- 遵循开发规范进行开发
- 定期备份数据库
:::

View File

@@ -0,0 +1,87 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
sidebar: false
hero:
name: WWJCloud-Admin
text: 企业级管理系统框架
tagline: 全新升级,开箱即用,简单高效
image:
src: https://t.wanwujie.cn/img/1/2025/08/24/68aad11c8deb7.webp
alt: wwjcloud
actions:
- theme: brand
text: 快速开始 ->
link: /wwjcloud/guide/quick-start
- theme: alt
text: API 文档
link: /wwjcloud/openapi/standards/restful
- theme: alt
text: 在 GitHub 查看
link: https://github.com/vbenjs/vue-vben-admin
- theme: alt
text: Vben Admin
link: /guide/introduction/vben
features:
- icon: 🚀
title: 现代化技术栈
details: 基于 NestJS、TypeScript、TypeORM 等最新技术栈,提供企业级后端解决方案。
link: /wwjcloud/guide/quick-start
linkText: 快速开始
- icon: 🔄
title: Saas+独立版双架构
details: 支持Saas多租户和独立部署两种架构模式满足不同业务场景需求提供灵活的部署选择。
link: /wwjcloud/guide/architecture
linkText: 架构说明
- icon: 🏗️
title: 开箱即用,内置模块化功能
details: 采用分层架构设计,已搭建模块化架构系统开发底层,为业务开发提供完整的底层支撑。
link: /wwjcloud/guide/development
linkText: 开发指南
- icon: 🌐
title: 多语言支持
details: 内置多语言系统,支持动态语言包加载,满足国际化需求。
link: /wwjcloud/guide/concepts
linkText: 基础概念
- icon: 🔐
title: 权限管理
details: 内置 RBAC 权限管理方案,支持多种权限控制方式,满足各种权限需求。
link: /wwjcloud/guide/concepts
linkText: 基础概念
- icon: 📱
title: 支持多端管理
details: 基于UniAppX多平台支持原生App、小程序、PC等多端统一管理和开发一套代码多端运行。
link: /wwjcloud/guide/multi-platform
linkText: 多端开发
- title: TypeORM
icon:
src: https://unpkg.com/wwjcloud@latest/source/icons/typeorm.svg
details: 强大的 TypeScript ORM支持多种数据库提供完整的数据库操作功能。
link: https://typeorm.io/
linkText: 官方站点
- title: 多应用+插件组合安装
icon:
src: https://unpkg.com/wwjcloud@latest/source/icons/mysql.svg
details: 支持业务自定义和应用插件热插拔,提供灵活的应用扩展和插件管理功能。
link: /wwjcloud/guide/plugins
linkText: 插件开发
- title: 自建编译服务
icon:
src: https://unpkg.com/wwjcloud@latest/source/icons/redis.svg
details: 提供完整的编译服务搭建方案,支持自定义编译环境和构建流程,满足不同项目的编译需求。
link: /wwjcloud/guide/build-service
linkText: 编译服务
---
<style>
:root {
--vp-home-hero-image-background-image: linear-gradient(
-45deg,
#78d8d1 50%,
#5f6eed 50%
);
}
</style>

View File

@@ -0,0 +1,482 @@
---
title: 后台 API
description: WWJCloud 后台管理员访问的 API 接口文档
---
# 后台 API
::: info 后台 API 说明
后台 API 是面向系统管理员的接口,提供会员管理、系统配置、权限管理等功能。
:::
## API 基础信息
- **基础路径**: `/adminapi/`
- **认证方式**: JWT Bearer Token
- **内容类型**: `application/json`
- **字符编码**: `UTF-8`
- **权限要求**: 管理员权限
## 模块列表
### 👥 会员管理 (`/adminapi/member/`)
后台会员管理功能:
- **会员列表** - 获取会员列表,支持分页和搜索
- **会员详情** - 查看会员详细信息
- **创建会员** - 后台创建新会员
- **更新会员** - 修改会员信息
- **删除会员** - 删除会员(软删除)
- **批量操作** - 批量删除、状态更新、等级分配
- **积分管理** - 调整会员积分
- **余额管理** - 调整会员余额
### 🔧 管理员管理 (`/adminapi/admin/`)
系统管理员管理功能:
- **管理员列表** - 获取管理员列表
- **创建管理员** - 创建新的管理员账户
- **更新管理员** - 修改管理员信息
- **删除管理员** - 删除管理员账户
- **权限分配** - 为管理员分配权限
- **登录日志** - 查看管理员登录记录
### 🔐 权限管理 (`/adminapi/rbac/`)
基于角色的访问控制:
- **角色管理** - 角色的增删改查
- **权限管理** - 权限的增删改查
- **角色权限** - 为角色分配权限
- **用户角色** - 为用户分配角色
- **权限验证** - 验证用户权限
### ⚙️ 系统管理 (`/adminapi/system/`)
系统配置管理:
- **菜单管理** - 系统菜单配置
- **系统设置** - 系统参数配置
- **数据字典** - 系统数据字典
- **操作日志** - 系统操作日志
- **系统监控** - 系统运行状态
### 📢 通知管理 (`/adminapi/notice/`)
通知消息管理:
- **消息模板** - 消息模板管理
- **推送记录** - 消息推送历史
- **微信通知** - 微信消息推送
- **短信通知** - 短信消息推送
## 认证流程
### 1. 管理员登录
```http
POST /adminapi/admin/login
Content-Type: application/json
{
"username": "admin",
"password": "admin123",
"captcha": "1234"
}
```
**响应示例**:
```json
{
"code": 200,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 7200,
"admin_info": {
"admin_id": 1,
"username": "admin",
"nickname": "超级管理员",
"role": "super_admin",
"permissions": ["member:list", "member:create", "member:update", "member:delete"]
}
}
}
```
### 2. 获取会员列表
```http
GET /adminapi/member?page=1&limit=10&keyword=test&status=1
Authorization: Bearer <your-jwt-token>
```
**响应示例**:
```json
{
"code": 200,
"message": "获取成功",
"data": {
"list": [
{
"member_id": 1001,
"username": "user@example.com",
"nickname": "用户昵称",
"phone": "13800138000",
"email": "user@example.com",
"status": 1,
"points": 1000,
"balance": 99.99,
"level": {
"level_id": 1,
"level_name": "普通会员"
},
"create_time": 1640995200,
"last_login_time": 1640995200
}
],
"total": 100,
"page": 1,
"limit": 10,
"pages": 10
}
}
```
### 3. 创建会员
```http
POST /adminapi/member
Authorization: Bearer <your-jwt-token>
Content-Type: application/json
{
"username": "newuser@example.com",
"password": "password123",
"nickname": "",
"phone": "13800138001",
"email": "newuser@example.com",
"level_id": 1
}
```
**响应示例**:
```json
{
"code": 201,
"message": "创建成功",
"data": {
"member_id": 1002,
"username": "newuser@example.com",
"nickname": "新用户",
"create_time": 1640995200
}
}
```
## 权限控制
### 权限验证
所有后台 API 都需要验证管理员权限:
```typescript
// 权限装饰器示例
@Roles('admin', 'super_admin')
@UseGuards(JwtAuthGuard, RolesGuard)
@Controller('adminapi/member')
export class MemberController {
// ...
}
```
### 权限级别
| 权限级别 | 说明 | 示例 |
|----------|------|------|
| super_admin | 超级管理员 | 所有权限 |
| admin | 普通管理员 | 部分管理权限 |
| operator | 操作员 | 只读权限 |
### 权限检查
```javascript
// 前端权限检查示例
const checkPermission = (permission) => {
const userPermissions = getUserPermissions();
return userPermissions.includes(permission);
};
// 使用示例
if (checkPermission('member:create')) {
// 显示创建按钮
}
```
## 查询参数
### 通用查询参数
所有列表接口支持以下查询参数:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | number | 否 | 页码,默认 1 |
| limit | number | 否 | 每页数量,默认 10最大 100 |
| keyword | string | 否 | 关键词搜索 |
| status | number | 否 | 状态筛选 |
| start_time | number | 否 | 开始时间(时间戳) |
| end_time | number | 否 | 结束时间(时间戳) |
| sort | string | 否 | 排序字段 |
| order | string | 否 | 排序方向asc/desc |
### 高级查询
支持复杂的查询条件:
```http
GET /adminapi/member?page=1&limit=20&keyword=test&status=1&level_id=2&start_time=1640995200&end_time=1641081600&sort=create_time&order=desc
```
## 批量操作
### 批量删除
```http
POST /adminapi/member/batch-delete
Authorization: Bearer <your-jwt-token>
Content-Type: application/json
{
"member_ids": [1001, 1002, 1003]
}
```
### 批量更新状态
```http
POST /adminapi/member/batch-update-status
Authorization: Bearer <your-jwt-token>
Content-Type: application/json
{
"member_ids": [1001, 1002, 1003],
"status": 0
}
```
### 批量分配等级
```http
POST /adminapi/member/batch-assign-level
Authorization: Bearer <your-jwt-token>
Content-Type: application/json
{
"member_ids": [1001, 1002, 1003],
"level_id": 2
}
```
## 数据导出
### 导出会员列表
```http
GET /adminapi/member/export?format=excel&keyword=test&status=1
Authorization: Bearer <your-jwt-token>
```
**支持格式**:
- Excel (.xlsx)
- CSV (.csv)
- PDF (.pdf)
## 错误处理
### 权限错误
```json
{
"code": 403,
"message": "权限不足",
"data": {
"required_permission": "member:delete",
"current_permissions": ["member:list", "member:view"]
}
}
```
### 参数验证错误
```json
{
"code": 400,
"message": "参数验证失败",
"data": {
"errors": [
{
"field": "username",
"message": "用户名已存在"
},
{
"field": "password",
"message": "密码长度不能少于6位"
}
]
}
}
```
## 操作日志
所有后台操作都会记录操作日志:
```json
{
"log_id": 1001,
"admin_id": 1,
"action": "member:create",
"target": "member",
"target_id": 1002,
"description": "创建会员newuser@example.com",
"ip": "192.168.1.100",
"user_agent": "Mozilla/5.0...",
"create_time": 1640995200
}
```
## 开发建议
### 1. 权限管理
```javascript
// 权限管理工具函数
const PermissionManager = {
// 检查是否有权限
hasPermission(permission) {
const permissions = this.getUserPermissions();
return permissions.includes(permission);
},
// 检查是否有任意一个权限
hasAnyPermission(permissions) {
const userPermissions = this.getUserPermissions();
return permissions.some(p => userPermissions.includes(p));
},
// 检查是否有所有权限
hasAllPermissions(permissions) {
const userPermissions = this.getUserPermissions();
return permissions.every(p => userPermissions.includes(p));
}
};
```
### 2. 请求封装
```javascript
// API 请求封装
const adminApi = {
// 获取会员列表
async getMemberList(params) {
return await request.get('/adminapi/member', { params });
},
// 创建会员
async createMember(data) {
return await request.post('/adminapi/member', data);
},
// 更新会员
async updateMember(id, data) {
return await request.put(`/adminapi/member/${id}`, data);
},
// 删除会员
async deleteMember(id) {
return await request.delete(`/adminapi/member/${id}`);
},
// 批量操作
async batchOperation(action, data) {
return await request.post(`/adminapi/member/batch-${action}`, data);
}
};
```
### 3. 错误处理
```javascript
// 统一错误处理
const handleApiError = (error) => {
if (error.response) {
const { status, data } = error.response;
switch (status) {
case 401:
// Token 过期,跳转登录
router.push('/login');
break;
case 403:
// 权限不足
ElMessage.error('权限不足');
break;
case 429:
// 请求过于频繁
ElMessage.error('请求过于频繁,请稍后再试');
break;
default:
ElMessage.error(data.message || '请求失败');
}
}
};
```
## 测试工具
### Swagger UI
访问 `http://localhost:3000/api/admin` 查看完整的后台 API 文档和在线测试功能。
### Postman 集合
可以导入以下 Postman 集合进行测试:
```json
{
"info": {
"name": "WWJCloud 后台 API",
"description": "后台管理 API 接口集合"
},
"item": [
{
"name": "会员管理",
"item": [
{
"name": "获取会员列表",
"request": {
"method": "GET",
"url": "{{base_url}}/adminapi/member"
}
},
{
"name": "创建会员",
"request": {
"method": "POST",
"url": "{{base_url}}/adminapi/member"
}
}
]
}
]
}
```

View File

@@ -0,0 +1,94 @@
---
title: 前台 API
description: 前台用户访问的 API 接口
---
# 前台 API
::: info 前台 API 说明
前台用户访问的 API 接口,提供用户注册、登录、个人资料管理等功能。
:::
## API 基础信息
- **基础路径**: `/api/`
- **认证方式**: JWT Bearer Token
- **内容类型**: `application/json`
- **字符编码**: `UTF-8`
## 模块列表
::: tip 自动生成
此文档由后端 Swagger 自动生成,包含最新的 API 接口信息。
:::
## 认证流程
### 获取 Token
```http
POST /api/auth/login
Content-Type: application/json
{
"username": "user@example.com",
"password": "password123"
}
```
## 响应格式
所有 API 都遵循统一的响应格式:
```json
{
"code": 200,
"message": "success",
"data": {
// 具体数据
}
}
```
## 错误处理
API 错误响应格式:
```json
{
"code": 400,
"message": "参数错误",
"data": null
}
```
## 状态码说明
| 状态码 | 说明 |
|--------|------|
| 200 | 请求成功 |
| 201 | 创建成功 |
| 400 | 请求参数错误 |
| 401 | 未授权 |
| 403 | 禁止访问 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
## 开发工具
### Swagger UI
访问后端 Swagger UI 查看完整的 API 文档和在线测试功能。
### 在线测试
每个 API 分组都提供 Swagger UI 界面,支持:
- API 文档查看
- 在线测试
- 参数验证
- 响应示例

View File

@@ -0,0 +1,184 @@
---
title: API 总览
description: WWJCloud 框架 API 接口总览
---
# API 总览
::: info API 文档说明
WWJCloud 框架提供完整的 RESTful API 接口,支持前台用户访问和后台管理功能。
:::
## API 分类
### 🎯 前台 API (`/api/`)
前台用户访问的 API 接口,提供用户端功能:
- **会员管理** - 用户注册、登录、个人资料管理
- **认证授权** - JWT 认证、权限验证
- **业务功能** - 各种业务模块的前台接口
### 🔧 后台 API (`/adminapi/`)
后台管理员访问的 API 接口,提供管理功能:
- **会员管理** - 会员列表、详情、状态管理
- **管理员管理** - 管理员账户、权限管理
- **系统管理** - 系统配置、菜单管理、权限管理
## API 访问地址
### 开发环境
```bash
# 前台 API 文档
http://localhost:3000/api/frontend
# 后台 API 文档
http://localhost:3000/api/admin
# 统一 API 文档
http://localhost:3000/api
```
### 生产环境
```bash
# 前台 API 文档
https://your-domain.com/api/frontend
# 后台 API 文档
https://your-domain.com/api/admin
# 统一 API 文档
https://your-domain.com/api
```
## 认证方式
### JWT 认证
所有需要认证的 API 都使用 JWT Token
```http
Authorization: Bearer <your-jwt-token>
```
### 获取 Token
#### 前台用户登录
```http
POST /api/member/login
Content-Type: application/json
{
"username": "user@example.com",
"password": "password123"
}
```
#### 后台管理员登录
```http
POST /adminapi/admin/login
Content-Type: application/json
{
"username": "admin",
"password": "admin123"
}
```
## 响应格式
所有 API 都遵循统一的响应格式:
```json
{
"code": 200,
"message": "success",
"data": {
// 具体数据
}
}
```
## 错误处理
API 错误响应格式:
```json
{
"code": 400,
"message": "参数错误",
"data": null
}
```
## 分页查询
支持分页的 API 使用统一的查询参数:
```http
GET /api/member?page=1&limit=10&sort=create_time&order=desc
```
## 状态码说明
| 状态码 | 说明 |
|--------|------|
| 200 | 请求成功 |
| 201 | 创建成功 |
| 400 | 请求参数错误 |
| 401 | 未授权 |
| 403 | 禁止访问 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
## 开发工具
### Swagger UI
每个 API 分组都提供 Swagger UI 界面,支持:
- API 文档查看
- 在线测试
- 参数验证
- 响应示例
### Postman 集合
可以导入 Postman 集合进行 API 测试:
```bash
# 导出 Swagger JSON
curl http://localhost:3000/api-json > api.json
```
## 版本控制
当前 API 版本:`v1.0.0`
版本控制策略:
- 向后兼容的更新:小版本号递增
- 破坏性更新:大版本号递增
- 通过 URL 路径进行版本控制:`/api/v1/`
## 限流策略
API 访问限流规则:
- **前台 API**1000 次/小时/用户
- **后台 API**5000 次/小时/管理员
- **登录接口**10 次/分钟/IP
## 监控和日志
- **访问日志**:记录所有 API 访问
- **错误日志**:记录 API 错误信息
- **性能监控**API 响应时间监控
- **使用统计**API 调用频率统计

View File

@@ -0,0 +1,242 @@
# 错误码规范
::: info 错误码定义
本文档定义了 wwjcloud 框架的错误码规范,确保错误处理的一致性和可维护性。
:::
## 错误码分类
### 📋 错误码结构
错误码采用分层设计,便于分类和管理:
```typescript
interface ErrorCode {
code: number; // 错误码
message: string; // 错误消息
category: string; // 错误分类
}
```
### 🎯 错误码范围
- **1000-1999**:用户相关错误
- **2000-2999**:权限相关错误
- **3000-3999**:数据相关错误
- **4000-4999**:业务相关错误
- **5000-5999**:系统相关错误
## HTTP 状态码
### ✅ 成功状态码
```typescript
200: 'OK' // 请求成功
201: 'Created' // 资源创建成功
204: 'No Content' // 请求成功,无返回内容
```
### ❌ 客户端错误
```typescript
400: 'Bad Request' // 请求参数错误
401: 'Unauthorized' // 未授权访问
403: 'Forbidden' // 禁止访问
404: 'Not Found' // 资源不存在
409: 'Conflict' // 资源冲突
422: 'Unprocessable Entity' // 请求格式正确但语义错误
```
### 🔧 服务器错误
```typescript
500: 'Internal Server Error' // 服务器内部错误
502: 'Bad Gateway' // 网关错误
503: 'Service Unavailable' // 服务不可用
```
## 业务错误码
### 👤 用户相关错误 (1000-1999)
```typescript
// 用户认证
1001: '用户不存在'
1002: '用户名或密码错误'
1003: '用户已被禁用'
// 用户信息
1010: '用户名已存在'
1011: '邮箱已存在'
1012: '用户名格式不正确'
1013: '邮箱格式不正确'
```
### 🔐 权限相关错误 (2000-2999)
```typescript
// 权限验证
2001: '权限不足'
2002: '角色不存在'
2003: 'Token 无效'
2004: 'Token 已过期'
// 角色管理
2010: '角色名已存在'
2011: '角色已被使用'
```
### 💾 数据相关错误 (3000-3999)
```typescript
// 数据操作
3001: '数据不存在'
3002: '数据已存在'
3003: '数据状态错误'
// 数据库操作
3010: '数据库连接失败'
3011: '数据库查询失败'
```
### 🏢 业务相关错误 (4000-4999)
```typescript
// 会员管理
4001: '会员不存在'
4002: '会员状态错误'
4003: '会员等级不存在'
// 订单管理
4010: '订单不存在'
4011: '订单状态错误'
```
## 错误响应格式
### 📊 标准错误响应
```typescript
interface ErrorResponse {
code: number; // 错误码
message: string; // 错误消息
data: {
error_code: number; // 业务错误码
error_message: string; // 业务错误消息
};
timestamp: number; // 时间戳
}
```
### 📝 错误响应示例
**参数验证错误:**
```json
{
"code": 400,
"message": "请求参数错误",
"data": {
"error_code": 1013,
"error_message": "用户名格式不正确"
},
"timestamp": 1640995200
}
```
**权限不足错误:**
```json
{
"code": 403,
"message": "禁止访问",
"data": {
"error_code": 2001,
"error_message": "权限不足"
},
"timestamp": 1640995200
}
```
## 错误处理实现
### 🔧 业务异常类
```typescript
export class BusinessException extends HttpException {
constructor(
private readonly errorCode: number,
private readonly errorMessage: string,
status: number = 400
) {
super(errorMessage, status);
}
getErrorCode(): number {
return this.errorCode;
}
getErrorMessage(): string {
return this.errorMessage;
}
}
```
### 📝 使用示例
```typescript
@Controller('api/members')
export class MemberController {
@Post()
async createMember(@Body() memberData: CreateMemberDto) {
// 检查用户名是否存在
const existingMember = await this.memberService.findByUsername(memberData.username);
if (existingMember) {
throw new BusinessException(1010, '用户名已存在');
}
// 创建会员
const member = await this.memberService.create(memberData);
return {
code: 200,
message: '创建成功',
data: member,
timestamp: Math.floor(Date.now() / 1000)
};
}
}
```
## 最佳实践
### ✅ 推荐做法
1. **统一错误码**:使用统一的错误码规范
2. **详细错误信息**:提供详细的错误信息
3. **错误分类**:按功能模块分类错误码
4. **错误日志**:记录错误日志便于排查
### ❌ 避免做法
1. **不要暴露敏感信息**:错误信息不要包含敏感数据
2. **不要返回不一致的格式**:保持错误响应格式一致
3. **不要忽略错误处理**:所有错误都要有相应的处理
## 下一步
::: tip 深入学习
1. **查看响应格式规范**:了解统一的响应格式
2. **阅读 API 设计规范**:了解 API 设计原则
3. **参考开发规范**:遵循开发规范
:::
::: warning 注意事项
- 严格遵循错误码规范
- 提供详细的错误信息
- 实现统一的错误处理
- 记录错误日志便于排查
:::

View File

@@ -0,0 +1,223 @@
# 响应格式规范
::: info 统一响应格式
本文档定义了 wwjcloud 框架的统一响应格式,确保所有 API 返回的数据格式一致。
:::
## 响应结构
### 📊 基础响应格式
所有 API 响应都遵循以下统一格式:
```typescript
interface ApiResponse<T = any> {
code: number; // 状态码
message: string; // 消息
data: T; // 数据
timestamp: number; // 时间戳
}
```
## 响应类型
### ✅ 成功响应
**基础成功响应:**
```json
{
"code": 200,
"message": "操作成功",
"data": null,
"timestamp": 1640995200
}
```
**返回单个对象:**
```json
{
"code": 200,
"message": "获取成功",
"data": {
"id": 123,
"username": "john_doe",
"email": "john@example.com",
"status": 1
},
"timestamp": 1640995200
}
```
**返回列表数据:**
```json
{
"code": 200,
"message": "获取成功",
"data": {
"list": [
{
"id": 123,
"username": "john_doe",
"email": "john@example.com"
}
],
"total": 100,
"page": 1,
"size": 10
},
"timestamp": 1640995200
}
```
### ❌ 错误响应
**参数错误:**
```json
{
"code": 400,
"message": "请求参数错误",
"data": null,
"timestamp": 1640995200
}
```
**未授权访问:**
```json
{
"code": 401,
"message": "未授权访问",
"data": null,
"timestamp": 1640995200
}
```
**资源不存在:**
```json
{
"code": 404,
"message": "资源不存在",
"data": null,
"timestamp": 1640995200
}
```
## 状态码规范
### 📋 状态码定义
**成功状态码:**
```typescript
200: '操作成功'
201: '创建成功'
204: '删除成功'
```
**客户端错误:**
```typescript
400: '请求参数错误'
401: '未授权访问'
403: '禁止访问'
404: '资源不存在'
409: '资源冲突'
422: '请求格式正确但语义错误'
```
**服务器错误:**
```typescript
500: '服务器内部错误'
502: '网关错误'
503: '服务不可用'
```
## 分页响应
### 📄 分页格式
**标准分页响应:**
```json
{
"code": 200,
"message": "获取成功",
"data": {
"list": [
{
"id": 123,
"username": "john_doe",
"email": "john@example.com"
}
],
"total": 100,
"page": 1,
"size": 10,
"pages": 10
},
"timestamp": 1640995200
}
```
## 实现示例
### 🔧 Controller 实现
```typescript
@Controller('api/members')
export class MemberController {
constructor(private readonly memberService: MemberService) {}
@Get()
async getMembers(@Query() query: GetMembersDto) {
try {
const result = await this.memberService.findAll(query);
return {
code: 200,
message: '获取成功',
data: result,
timestamp: Math.floor(Date.now() / 1000)
};
} catch (error) {
return {
code: 500,
message: '获取失败',
data: null,
timestamp: Math.floor(Date.now() / 1000)
};
}
}
}
```
## 最佳实践
### ✅ 推荐做法
1. **统一格式**:所有 API 都使用统一的响应格式
2. **状态码规范**:使用标准的 HTTP 状态码
3. **错误处理**:提供详细的错误信息
4. **分页支持**:列表接口支持分页
5. **时间戳**:包含响应时间戳
### ❌ 避免做法
1. **不要暴露敏感信息**:错误信息不要包含敏感数据
2. **不要返回不一致的格式**:保持响应格式一致
3. **不要忽略错误处理**:所有错误都要有相应的响应
## 下一步
::: tip 深入学习
1. **查看错误码规范**:了解错误码定义
2. **阅读 API 设计规范**:了解 API 设计原则
3. **参考开发规范**:遵循开发规范
:::
::: warning 注意事项
- 严格遵循统一的响应格式
- 提供详细的错误信息
- 实现适当的错误处理
:::

View File

@@ -0,0 +1,505 @@
# RESTful API 设计规范
::: info API 设计规范
本文档定义了 wwjcloud 框架的 RESTful API 设计规范,确保 API 的一致性、可读性和可维护性。
:::
## 基本原则
### 🎯 设计原则
- **资源导向**API 应该围绕资源进行设计
- **无状态**:每个请求都应该包含完整的信息
- **统一接口**:使用标准的 HTTP 方法
- **可缓存**:支持缓存机制
- **分层系统**:支持分层架构
### 📝 命名规范
- **URL 使用小写字母**`/api/member/list`
- **单词间使用连字符**`/api/user-profile`
- **避免使用下划线**:不推荐 `/api/user_profile`
- **使用复数形式**`/api/members` 而不是 `/api/member`
## HTTP 方法
### 🔍 GET - 获取资源
**用途:** 获取资源列表或单个资源
```http
#
GET /api/members
#
GET /api/members/123
#
GET /api/members/123/orders
#
GET /api/members?page=1&size=10&status=active
```
**响应示例:**
```json
{
"code": 200,
"message": "获取成功",
"data": {
"list": [...],
"total": 100,
"page": 1,
"size": 10
},
"timestamp": 1640995200
}
```
### POST - 创建资源
**用途:** 创建新资源
```http
#
POST /api/members
#
{
"username": "john_doe",
"email": "john@example.com",
"status": 1
}
```
**响应示例:**
```json
{
"code": 200,
"message": "创建成功",
"data": {
"id": 123,
"username": "john_doe",
"email": "john@example.com",
"status": 1,
"create_time": 1640995200
},
"timestamp": 1640995200
}
```
### ✏️ PUT - 更新资源
**用途:** 完整更新资源
```http
#
PUT /api/members/123
#
{
"username": "john_doe_updated",
"email": "john_updated@example.com",
"status": 1
}
```
**响应示例:**
```json
{
"code": 200,
"message": "更新成功",
"data": {
"id": 123,
"username": "john_doe_updated",
"email": "john_updated@example.com",
"status": 1,
"update_time": 1640995200
},
"timestamp": 1640995200
}
```
### 🔄 PATCH - 部分更新
**用途:** 部分更新资源
```http
#
PATCH /api/members/123
#
{
"status": 0
}
```
**响应示例:**
```json
{
"code": 200,
"message": "更新成功",
"data": {
"id": 123,
"status": 0,
"update_time": 1640995200
},
"timestamp": 1640995200
}
```
### 🗑️ DELETE - 删除资源
**用途:** 删除资源
```http
#
DELETE /api/members/123
#
DELETE /api/members?ids=123,124,125
```
**响应示例:**
```json
{
"code": 200,
"message": "删除成功",
"data": null,
"timestamp": 1640995200
}
```
## URL 设计
### 📋 资源命名
**使用名词而非动词:**
```http
#
GET /api/members
POST /api/members
PUT /api/members/123
DELETE /api/members/123
#
GET /api/getMembers
POST /api/createMember
PUT /api/updateMember
DELETE /api/deleteMember
```
### 🔗 嵌套资源
**表示资源间的关系:**
```http
#
GET /api/members/123/orders
#
GET /api/members/123/orders/456
#
POST /api/members/123/orders
```
### 🔍 查询参数
**用于过滤、排序、分页:**
```http
#
GET /api/members?status=active&type=vip
#
GET /api/members?sort=create_time&order=desc
#
GET /api/members?page=1&size=10
#
GET /api/members?keyword=john
# 使
GET /api/members?status=active&page=1&size=10&sort=create_time&order=desc
```
## 状态码规范
### ✅ 成功状态码
```http
200 OK #
201 Created #
204 No Content #
```
### ❌ 客户端错误
```http
400 Bad Request #
401 Unauthorized # 访
403 Forbidden # 访
404 Not Found #
405 Method Not Allowed #
409 Conflict #
422 Unprocessable Entity #
```
### 🔧 服务器错误
```http
500 Internal Server Error #
502 Bad Gateway #
503 Service Unavailable #
```
## 请求头规范
### 📋 常用请求头
```http
#
Content-Type: application/json
#
Authorization: Bearer <token>
#
Accept: application/json
#
User-Agent: wwjcloud-client/1.0.0
#
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
```
### 🔐 认证头
```http
# JWT Token
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
# API Key
X-API-Key: your-api-key
#
X-Auth-Token: your-auth-token
```
## 响应格式
### 📊 统一响应结构
```typescript
interface ApiResponse<T = any> {
code: number; // 状态码
message: string; // 消息
data: T; // 数据
timestamp: number; // 时间戳
}
```
### 📝 响应示例
**成功响应:**
```json
{
"code": 200,
"message": "操作成功",
"data": {
"id": 123,
"username": "john_doe",
"email": "john@example.com"
},
"timestamp": 1640995200
}
```
**错误响应:**
```json
{
"code": 400,
"message": "请求参数错误",
"data": null,
"timestamp": 1640995200
}
```
**列表响应:**
```json
{
"code": 200,
"message": "获取成功",
"data": {
"list": [
{
"id": 123,
"username": "john_doe",
"email": "john@example.com"
}
],
"total": 100,
"page": 1,
"size": 10
},
"timestamp": 1640995200
}
```
## 版本控制
### 🔢 版本策略
**URL 版本控制:**
```http
# 1
GET /api/v1/members
# 2
GET /api/v2/members
```
**请求头版本控制:**
```http
GET /api/members
Accept: application/vnd.wwjcloud.v1+json
```
### 📋 版本命名
- **主版本**:重大变更,不兼容
- **次版本**:新功能,向后兼容
- **修订版本**Bug 修复,向后兼容
## 错误处理
### 🚨 错误响应格式
```json
{
"code": 400,
"message": "请求参数错误",
"data": {
"errors": [
{
"field": "email",
"message": "邮箱格式不正确"
},
{
"field": "username",
"message": "用户名不能为空"
}
]
},
"timestamp": 1640995200
}
```
### 📝 错误码规范
**业务错误码:**
```typescript
// 成功
200: '操作成功'
201: '创建成功'
// 客户端错误
400: '请求参数错误'
401: '未授权访问'
403: '禁止访问'
404: '资源不存在'
409: '资源冲突'
// 服务器错误
500: '服务器内部错误'
502: '网关错误'
503: '服务不可用'
```
## 最佳实践
### ✅ 推荐做法
1. **使用 HTTPS**:所有 API 都应该使用 HTTPS
2. **参数验证**:严格验证所有输入参数
3. **错误处理**:提供详细的错误信息
4. **文档化**:提供完整的 API 文档
5. **版本控制**:使用版本控制管理 API 变更
6. **限流控制**:实现 API 限流机制
7. **监控日志**:记录 API 调用日志
### ❌ 避免做法
1. **不要使用动词**URL 应该使用名词
2. **不要暴露内部错误**:不要返回敏感的错误信息
3. **不要过度设计**:保持 API 简单易用
4. **不要忽略缓存**:合理使用缓存机制
5. **不要忽略安全**:实现适当的安全措施
## 示例
### 📋 完整的 API 示例
**会员管理 API**
```http
#
GET /api/v1/members?page=1&size=10&status=active
#
GET /api/v1/members/123
#
POST /api/v1/members
Content-Type: application/json
Authorization: Bearer <token>
{
"username": "john_doe",
"email": "john@example.com",
"status": 1
}
#
PUT /api/v1/members/123
Content-Type: application/json
Authorization: Bearer <token>
{
"username": "john_doe_updated",
"email": "john_updated@example.com",
"status": 1
}
#
DELETE /api/v1/members/123
Authorization: Bearer <token>
```
## 下一步
::: tip 深入学习
1. **查看响应格式规范**:了解统一的响应格式
2. **阅读错误码规范**:了解错误码定义
3. **参考开发规范**:遵循开发规范
4. **查看最佳实践**:学习最佳实践
:::
::: warning 注意事项
- 严格遵循 RESTful 设计原则
- 保持 API 的一致性和可读性
- 提供完整的错误处理
- 实现适当的安全措施
:::

View File

@@ -0,0 +1,68 @@
# 开发进度(按日期 & 里程碑)
> 说明本页用于统筹底座与业务改造的实际进度按日期记录按里程碑M1M6分栏。与 `ai/planner.md` 的目标与验收标准对应,便于管理与追踪。
## 时间轴Timeline
| 日期 | 模块/范围 | 主要事项 | 关联里程碑 | 状态 |
|---|---|---|---|---|
| 2025-08-26 | Core 基座 | 统一异常响应、统一成功响应、配置校验方案落地Joi | M1 | 已完成 |
| 2025-08-26 | Database | 事务封装TransactionManager、BaseRepository 分页/过滤、Redis 分布式锁 | M2 | 已完成 |
| 2025-08-26 | Security | `SiteScopeGuard` 多租隔离、`IdempotencyService``RateLimitService``AuditService` | M3 | 已完成 |
| 2025-08-26 | Events/Queues | 事件契约AJV、发布助手、订阅装饰器、事件总线模式配置Outbox/Kafka | M4 | 已完成 |
| 2025-08-26 | Observability | 健康聚合器与指示器DB/Redis/事件/队列/存储、HTTP 指标、/health /metrics 控制器 | M5 | 已完成 |
| 2025-08-26 | Vendor/Storage | `StorageAdapter` 标准、Local 实现、`StorageRegistry`siteId 解析:站点启用>平台默认>local`STORAGE_ADAPTER_FACTORY` Provider | M6 | 已完成 |
| 2025-08-26 | Upload | 服务重构完成,使用 `STORAGE_ADAPTER_FACTORY`,修复所有编译错误 | M6落地示例 | 已完成 |
> 说明:状态枚举建议采用:已完成 / 进行中 / 待开始 / 阻塞。
## 里程碑视图M1M6
### M1 基础通信与契约
- [x] 全局异常过滤:`core/http/filters/http-exception.filter.ts`
- [x] 统一成功响应拦截:`core/http/interceptors/response.interceptor.ts`
- [x] 配置校验Joi`config/schema/validation.ts`
- [x] 应用装配:在 `app.module.ts` 全局注册 `APP_FILTER``APP_INTERCEPTOR`
### M2 事务与数据访问
- [x] 事务封装:`core/database/transaction.manager.ts`
- [x] BaseRepository`core/database/base-repository.ts`(分页/排序/过滤白名单)
- [x] Redis 分布式锁:`core/database/redis-lock.service.ts`
### M3 安全与多租
- [x] 多租站点隔离:`core/security/site-scope.guard.ts`
- [x] 幂等:`core/security/idempotency.service.ts`
- [x] 限流:`core/security/rate-limit.service.ts`
- [x] 审计:`core/audit/audit.service.ts`
### M4 事件与队列
- [x] 事件契约与校验:`core/event-bus/contract.validator.ts``core/event-bus/contracts/*`
- [x] 发布助手:`core/event-bus/publish.helper.ts`
- [x] 订阅装饰器:`core/event-bus/subscribe.decorator.ts`
- [x] 事件总线配置:`config/eventbus.config.ts`
### M5 可观测与稳定性
- [x] 健康聚合器:`core/observability/health/health-aggregator.ts`
- [x] 健康指示器DB/Redis/EventBus/Queue/Storage
- [x] 健康控制器:`core/observability/health/health.controller.ts`
- [x] HTTP 指标:`core/observability/metrics/http-metrics.service.ts``core/observability/metrics/metrics.controller.ts`
### M6 Vendor 外设标准Storage
- [x] 接口:`vendor/storage/interfaces/storage-adapter.ts`
- [x] 适配器:`vendor/storage/adapters/local.adapter.ts`
- [x] Token`vendor/storage/tokens.ts`
- [x] 工厂/注册表:`vendor/storage/providers/registry.ts``vendor/storage/providers/storage.provider.ts`
- [x] 健康检查联动:`core/observability/health/indicators/storage.indicator.ts`
- [x] 示例接线upload`common/upload/upload.service.ts`
## 下一步计划
- [x]`app.module.ts` 中注册:
- [x] 全局异常过滤器(`APP_FILTER` -> `HttpExceptionFilter`
- [x] 统一响应拦截器(`APP_INTERCEPTOR` -> `ResponseInterceptor`
- [x] 确认 `/health``/metrics` 控制器装配
- [ ] `settings/storage` 平台端与站点端 API 最小可用实现与测试
- [ ] `upload` 成功入库 `sys_attachment`(实体+仓储+用例),并发布事件/入队任务(缩略图等)
## 附:参考
- 架构概览:`structure/overview.md`
- 规范/流程/对齐:`ai/index.md``ai/workflow.md``ai/checklists.md``ai/mapping.md``ai/integration.md``ai/planner.md`

View File

@@ -0,0 +1,73 @@
---
title: AI 提示词与执行约束WWJCloud
description: 统一的 AI 协作提示词、上下文提供清单与强制约束,确保回答可执行、改动可控、与架构规划一致。
---
# AI 提示词与执行约束WWJCloud
## 目标
- 回答必须“可执行、可核验、最小改动、可回滚”。
- 严格遵守本项目的领域边界、数据一致性与微服务演进路线。
## 提供上下文(调用 AI 前的必备信息)
- 任务目的与期望产出(代码/文档/脚本/命令)。
- 影响范围(目录/模块/表/接口)。
- 相关文件片段(尽量给出路径与行号)。
- 现状与约束(运行环境、端口、依赖版本、是否允许新依赖)。
- 回滚策略(如仅限编辑文档、不许改表结构、不改公开 API
## 强制约束(回答/改动必须遵守)
- 架构与边界
- 禁跨域直查数据库;跨域仅通过“域 SDK 接口/领域事件”。
- 保持统一 Swagger/docs、/docs-json文档站按前缀/api、/adminapi分组。
- 事件/任务:事件走 Kafka或 Outbox→Kafka任务走 Redis或 Outbox→Worker允许现阶段沿用 DB jobs 作为 Outbox。
- 数据与迁移
- 不重命名/拆分现有表;优先加索引与新增伴随表(如 Outbox
- 新增字段/索引需说明兼容性与回滚方式。
- 安全与网关
- 网关二选一Traefik/Kong作为北向入口东西向留给服务网格Envoy/Istio
- 默认开启 JWT 校验、限流、超时/重试、熔断(如可用)。
- 可观测
- 保留 traceId、site_id核心链路加指标与追踪埋点。
- 代码与风格
- 避免破坏性重构;提交“最小可行改动”。
- 保留原缩进与格式;新增代码遵循项目风格与命名规范。
## 代码与文档编辑规范
- 代码
- 仅在必要文件做“最小范围编辑”;注释解释“为什么改”。
- 新接口/事件需提供类型、示例载荷与兼容策略。
- 新依赖需标注用途、体量与替代方案,默认不引入重量依赖。
- 文档
- 路径引用保持现有规则:`/wwjcloud/...`;侧边栏改动需同步 `zh.mts`
- 新文档放置目录:`admin/docs/src/wwjcloud/project/`
## 决策检查清单(回答前自检)
- 该改动是否违反“禁跨域直查库”?
- 是否影响公开 API/事件契约?若是,是否给出兼容与迁移指引?
- 是否可回滚(仅新增文件/配置、或可逆编辑)?
- 是否与 Roadmap/Plan 一致M0M3 阶段)?
- 是否提供了验证步骤(命令/接口/可观测指标)?
## 通用提示词模板
- 功能开发
- “请在不破坏现有 API 的前提下,为 {domain} 域新增 {feature},产出:
1) 变更文件列表与最小改动2) 新增接口/事件定义(含类型与示例);
3) 单元/集成验证步骤4) 回滚方法。上下文:{files...} 约束:禁跨域直查库、保留 /docs-json。”
- 事件接入
- “为 {domain} 接入事件 `{eventType}`:发布点、订阅方、载荷 schema含 tenantId/idempotencyKey/traceId、Outbox 入队、Kafka 主题、重试/幂等策略、验证步骤。”
- 性能优化
- “分析 {table/query} 的慢查询,提出仅加索引与读模型的优化方案;避免改表/改名;给出索引 DDL 与回滚方案,并提供前后对比验证步骤。”
- 网关与熔断
- “在 {Traefik|Kong} 中为 {route} 启用 JWT、限流、超时/重试、熔断;给出最小配置片段、灰度方案与回滚;不改变后端服务代码。”
- 文档生成
- “基于 `/docs-json` 拉取,更新 `openapi/api/{frontend|adminapi}`;仅路径与侧边栏更新,不改内容。”
## 示例回答应包含
- 变更点清单(文件/行号范围、改动理由)。
- 验证步骤(命令、接口调用、预期输出)。
- 回滚步骤(如何还原文件/配置、撤销索引/发布)。
- 影响评估(性能、安全、兼容性)。
---
以上规范用于约束 AI 在 WWJCloud 项目内的协作行为,确保结果“可用、可控、可演进”。

Some files were not shown because too many files have changed in this diff Show More