# 同模块 admin/app 接口分层规范 ## 适用范围 - 同一业务模块同时存在 `admin` 管理端接口和 `app` 用户端接口时,使用本文。 ## 强制规则 - 顶层目录一律按业务模块落点;禁止因为有 `app` 端,就单独新建顶层 `router/app`、`api/v1/app`、`service/app`、`model/app` 来承载 `book`、`order`、`author` 这类业务。 - 同一业务模块的实体仍统一放在 `model/`;只有接口入参、出参和流程按 `admin` / `app` 分开。 - `router/`、`api/v1/`、`service/` 内,`admin` 与 `app` 接口必须分文件或分承载结构体;禁止长期混写在同一个大文件里。 - 可复用逻辑优先下沉到 `service/` 的公共方法;公共逻辑只抽业务共性,不要把 `admin` / `app` 的鉴权、返回、分页口径硬揉成一套。 ## 推荐落点 - 推荐文件名:`_admin.go`、`_app.go`、`enter.go`。 - 示例: - `router/book/book_admin.go` - `router/book/book_app.go` - `api/v1/book/book_admin.go` - `api/v1/book/book_app.go` - `service/book/book_admin.go` - `service/book/book_app.go` - `service/book/book_common.go` - `model/book/book.go` - `model/book/request/book_admin.go` - `model/book/request/book_app.go` - `model/book/response/book_admin.go` - `model/book/response/book_app.go` ## 路由与鉴权 - `admin` 接口默认挂业务 router 的 `PrivateGroup`,走后台 `JWT + Casbin`。 - `app` 公开接口挂 `PublicGroup`。 - `app` 仅登录接口,基于 `PublicGroup` 单独加 `middleware.JWTAuth()`;不要直接挂 `PrivateGroup`。 - 如果 `app` 用户体系不等于 `sys_users`,禁止直接复用后台登录、claims、角色权限链路;必须单独实现用户端认证链路。 ## 禁止事项 - 禁止把“同一业务模块的 app 端接口”误建成独立业务模块。 - 禁止为了省事,把所有 `app` 接口都挂到 `PrivateGroup`,再用后台角色权限去模拟用户端登录态。 - 禁止同一个业务实体在 `model` 层拆出两套重复表结构,仅因接口面向 `admin` / `app` 不同。