Files
TakeoutSaaS.Docs/Document/16_仓库拆分与子模块使用说明.md

80 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 仓库拆分与子模块使用说明
> 目的:将 AdminApi 与 TenantApi 解耦,减少多租户对管理端的影响;同时沉淀共享基础库与文档运维资产,便于复用与独立发布。
## 1. 仓库划分
- **TakeoutSaaS.AdminApi**:管理后台 API运营/客服/平台管理),允许跨租户查询(以路由 `tenantId` 作为单租户操作入口)。
- **TakeoutSaaS.TenantApi**:租户端 APIMiniApi/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
```