## iBizSys 网关

    接收前台请求，根据具体请求具体分析在 nacos 查找对应的服务并转发。
    应用的 appData 相关信息由网关层拼装生成。

### 使用到的框架

  1. [nestjs](https://docs.nestjs.cn/)
  2. [fastify](https://www.fastify.io/)

### 目录结构

  ```shell
  |-- configs
  |   |-- app.environment.yaml                   应用配置，app 在打开时会请求此配置到前台
  |   |-- application.config.yaml                网关基本配置(发布)
  |   |-- application.yaml                       网关基本配置
  |   |-- gateway-base.yaml                      转发配置(发布)
  |   |-- gateway.yaml                           转发配置
  |-- docker
  |-- env
  |-- nest-cli.json
  |-- package.json
  |-- pnpm-lock.yaml
  |-- resources                                  静态资源目录，应用打包后放在此文件夹 app 目录下
  |-- src
  |   |-- app.controller.ts                      应用接口
  |   |-- app.module.ts                          应用模块
  |   |-- app.service.ts                         应用服务
  |   |-- config                                 系统基本配置
  |   |-- core
  |   |   |-- constants                          静态参数
  |   |   |-- controller
  |   |   |-- core.module.ts                     核心功能模块
  |   |   |-- database
  |   |   |-- entities
  |   |   |-- interface
  |   |   |-- middleware                         代理中间件
  |   |   |-- module
  |   |   |   |-- auth                           认证模块
  |   |   |   |   |-- auth.controller.ts
  |   |   |   |   |-- auth.module.ts
  |   |   |   |   |-- auth.service.ts
  |   |   |   |   |-- jwt-auth.guard.ts          全局认证拦截器
  |   |   |   |   |-- jwt.strategy.ts
  |   |   |   |-- caching                        缓存
  |   |   |   |-- code-list                      代码表
  |   |   |   |-- dynamic                        多实例动态模型转发
  |   |   |   |-- ibiz-config
  |   |   |   |-- ibiz-ou
  |   |   |   |-- ibiz-util
  |   |   |   |-- workflow                       工作流转发
  |   |   |-- service
  |   |   |   |-- gateway                        nacos 转发地址计算服务
  |   |   |   |-- nacos                          nacos 服务
  |   |   |   |-- net                            网络请求
  |   |   |-- utils
  |   |-- environment                            一些固定配置参数，不可修改
  |   |-- main.ts
  |   |-- modules                                所有实体模块，一个实体一个模块
  |   |-- user.module.ts                         用于补充自定义扩展
  |-- tsconfig.json
  ```

### 基本接口

1. 基本功能接口转发

    | 接口                             | 描述                         |
    | :-------------------------------- | :---------------------------- |
    | /v7/login                        | 登录                         |
    | /v7/logout                       | 登出                         |
    | /v7/refreshToken                 | 刷新认证信息                 |
    | /uaa/getbydcsystem/:dcsystem     | 根据中心系统标识获取用户信息 |
    | /dictionaries/codelist/:codename | 代码表                       |
    | /wfcore/\*\*                     | 工作流                       |

2. 全局代理直接转发接口

    | 接口                             | 描述         |
    | :-------------------------------- | :------------ |
    | dynamodel                        | 动态模型实例 |
    | configs                          | 配置         |
    | sysorganizations                 | ou           |
    | ibizutil                         | 工具接口     |

3. 其余均为实体具体实体对应的转发。

### nacos 说明

  1. nacos 转发域请看 nacos-gateway.yaml 文件。

  2. 参数说明

      ```yaml
      # 定义的程序内使用的 nacos 转发的 scope
      loginv7:
        # 当前 scope 在 nacos 中需要映射的服务名称
        serviceId: ibizrt4ebsx-rt4ebsx
      ```

  3. 使用示例

      ```typescript
      import { Controller } from '@nestjs/common';
      import { NetService, ControllerBase } from '@/core';

      @Controller()
      export class XxxController {
        /**
         * 初始化转发 nacos loginv7 域的服务。
         * 在使用此请求转发时，将请求转发至 nacos loginv7 所对应的服务
         */
        protected readonly http: NetService = new NetService('loginv7');
      }
      ```

### 使用 vscode 进行代码调试

  1. 使用 vscode 打开网关项目根目录

  2. 打开 vscode 运行与调试分页

  3. 点击 `显示所有自动调试配置` 按钮

  4. 选择 `Node.js`

  5. 选择 `Run Script: start:debug app_xxx`

  6. 程序开始运行，可以进行调试

  7. 示例:

      ![vscode_debug](./resources/doc/images/vscode_debug.gif)

### 用户扩展

  如需自定义扩展，编写具体模块后注册入 user.module.ts 即可。
  具体写法请看 [nestjs](https://docs.nestjs.cn/) 官网。