# 仓库拆分与子模块使用说明 > 目的:将 AdminApi 与 TenantApi 解耦,减少多租户对管理端的影响;同时沉淀共享基础库与文档运维资产,便于复用与独立发布。 ## 1. 仓库划分 - **TakeoutSaaS.AdminApi**:管理后台 API(运营/客服/平台管理),允许跨租户查询(以路由 `tenantId` 作为单租户操作入口)。 - **TakeoutSaaS.TenantApi**:租户端 API(MiniApi/UserApi),强制租户隔离,面向小程序/用户端。 - **TakeoutSaaS.Gateway**:YARP 反向代理网关(路由、CORS、限流、可观测性)。 - **TakeoutSaaS.BuildingBlocks**:共享基础组件库(`Shared.Abstractions` / `Shared.Kernel` / `Shared.Web`)。 - **TakeoutSaaS.Docs**:文档与运维资产(架构、边界、部署、脚本等)。 ## 2. 子模块策略 - **AdminApi** 通过 `git submodule` 引入: - `TakeoutSaaS.BuildingBlocks` → `TakeoutSaaS.BuildingBlocks/` - `TakeoutSaaS.Docs` → `TakeoutSaaS.Docs/` - **TenantApi** 通过 `git submodule` 引入: - `TakeoutSaaS.BuildingBlocks` → `TakeoutSaaS.BuildingBlocks/` - `TakeoutSaaS.Docs` → `TakeoutSaaS.Docs/` - **Gateway** 保持独立仓库:不以子模块形式挂回 AdminApi/TenantApi(避免耦合与引用链)。 ## 3. 克隆与初始化 ### 3.1 新克隆(推荐) ```bash # AdminApi git clone --recurse-submodules -b dev git@github.com:msumshk/TakeoutSaaS.AdminApi.git # TenantApi git clone --recurse-submodules -b dev git@github.com:msumshk/TakeoutSaaS.TenantApi.git # Gateway git clone -b dev git@github.com:msumshk/TakeoutSaaS.Gateway.git ``` ### 3.2 已有仓库补齐子模块 ```bash git submodule update --init --recursive ``` ## 4. 子模块更新流程(推荐) > 原则:**子模块自身先提交**,再由宿主仓库提交“子模块指针变更”。 ### 4.1 更新 Docs/BuildingBlocks 内容 1. 进入子模块目录(如 `TakeoutSaaS.Docs/`),正常 `git add/commit/push`。 2. 回到宿主仓库根目录,提交子模块引用更新: - `git add TakeoutSaaS.Docs` - `git commit -m "docs: 更新文档子模块引用"` 3. 其他成员拉取宿主仓库后执行: - `git submodule update --init --recursive` ### 4.2 拉取子模块最新 dev(可选) ```bash git submodule update --remote --merge ``` > 注意:`--remote` 会移动子模块引用,需要在宿主仓库提交。 ## 5. 常用运行入口 ```bash # AdminApi(在 TakeoutSaaS.AdminApi 仓库根目录) dotnet run --project src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj # TenantApi - MiniApi(在 TakeoutSaaS.TenantApi 仓库根目录) dotnet run --project src/Api/TakeoutSaaS.MiniApi/TakeoutSaaS.MiniApi.csproj # TenantApi - UserApi(在 TakeoutSaaS.TenantApi 仓库根目录) dotnet run --project src/Api/TakeoutSaaS.UserApi/TakeoutSaaS.UserApi.csproj # Gateway(在 TakeoutSaaS.Gateway 仓库根目录) dotnet run --project TakeoutSaaS.ApiGateway.csproj ```