Merge commit 'a0ee3a21cd01229a555384ad5e1f4b3ccdcdd620' into dev_jacy
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: 杜康好客 NestJS 后端编码规范
|
||||
globs: server/**/*.ts
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# 后端规范
|
||||
|
||||
## 模块目录
|
||||
|
||||
```
|
||||
server/dukang-api/src/
|
||||
├── modules/{iam,trade,benefit,catalog,store,redeem,settlement,ops,analytics,health}/
|
||||
├── common/{guards,decorators,interceptors,filters,prisma,redis}/
|
||||
├── integrations/{pay,sms,delivery}/
|
||||
└── jobs/
|
||||
```
|
||||
|
||||
## 新接口流程
|
||||
|
||||
1. 在 **OWNER 模块** 建 `dto/`、`*.service.ts`、`*.controller.ts`
|
||||
2. Service 只写本模块 Prisma 表
|
||||
3. 跨域 inject 其他 Module 的 exported Service
|
||||
4. Controller 加对应 Guard(`JwtAuthGuard`、`PhoneVerifiedGuard` 等)
|
||||
5. 响应 `{ code: 0, message: 'ok', data }`
|
||||
6. 同步 `packages/shared-types`
|
||||
|
||||
## Controller 示例
|
||||
|
||||
```typescript
|
||||
@Controller('trade/orders')
|
||||
@UseGuards(JwtAuthGuard)
|
||||
export class TradeController {
|
||||
constructor(private readonly tradeService: TradeService) {}
|
||||
}
|
||||
```
|
||||
|
||||
## 鉴权路由前缀
|
||||
|
||||
| 端 | 前缀 |
|
||||
|----|------|
|
||||
| C 端 | `/auth`, `/user`, `/catalog`, `/trade`, `/benefit`, `/redeem`, `/stores` |
|
||||
| 门店 | `/shop/auth`, `/shop/redeem`, `/shop/store` |
|
||||
| 合伙人 | `/partner/*` |
|
||||
| 总部 | `/admin/*` |
|
||||
|
||||
## 数据约定
|
||||
|
||||
- 埋点 → `log_user_analytics`;业务审计 → `common_event`
|
||||
- 支付 → `log_third_party` + `user_order.pay_*`(无 payments 表)
|
||||
- 核销码 → Redis 5min(无 DB 表)
|
||||
@@ -1,16 +1,27 @@
|
||||
---
|
||||
description: 杜康好客全局约束 — 文档优先级、OWNER 边界、禁止跨模块直写表
|
||||
description: 杜康好客全局约束 — Monorepo 布局、文档优先级、2 人 OWNER 边界
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# 杜康好客 · 核心规则
|
||||
|
||||
## Monorepo 布局
|
||||
|
||||
- `apps/` — preV1:`h5-user`、`h5-shop`、`h5-partner`、`admin-web`
|
||||
- `packages/` — `shared-types`、`domain`、`shared-ui`
|
||||
- `server/dukang-api/` — NestJS 单体 API
|
||||
- `pages/` — UI 原型(**只读参照**)
|
||||
|
||||
> V2 目标为 Taro 四端(`mini-user` 等),编码以 **当前实际目录** 为准。
|
||||
|
||||
## 文档
|
||||
|
||||
- 业务事实源:`杜康好客-V2编码手册.md`
|
||||
- preV1 裁剪:`杜康好客-preV1编码手册.md`
|
||||
- 协作:`conventions.md` · AI 入口:`AGENTS.md`
|
||||
|
||||
**禁止**:编码时修改业务规则;需求变更只改 V2 手册。
|
||||
|
||||
## 边界(2 人团队)
|
||||
|
||||
| 负责人 | 路径 |
|
||||
@@ -19,13 +30,20 @@ alwaysApply: true
|
||||
| 刘京尧 | `apps/h5-partner/`, `apps/h5-shop/`, `modules/{store,redeem}/` |
|
||||
|
||||
- 跨模块只 inject **exported Service**,禁止 `prisma` 写他人表
|
||||
- `apps/*` 禁止 import `server/*`
|
||||
- `apps/*` 禁止 import `server/*` 或其他 app
|
||||
- Mock 只在 `integrations/*`,不在业务 Service 散落
|
||||
|
||||
## 共享契约
|
||||
|
||||
- 枚举/DTO → `packages/shared-types`
|
||||
- 纯规则 → `packages/domain`
|
||||
- 纯规则 → `packages/domain`(无 IO)
|
||||
|
||||
## 核心业务常量
|
||||
|
||||
- 权益额 = `benefit_amount ?? price`
|
||||
- 核销:0 < amount ≤ min(balance, **500**)
|
||||
- 订单 Tab:`all | pending_pay | pending_ship | pending_receive | completed`
|
||||
- API:`/api/v1`,响应 `{ code, message, data }`
|
||||
|
||||
## 提交
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
description: 三端 H5 + admin-web 前端边界与 API 请求规范
|
||||
globs: apps/**/*.{ts,tsx}
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# 前端 App 规则
|
||||
|
||||
## 隔离
|
||||
|
||||
- 禁止 import 其他 `apps/*` 或 `server/*`
|
||||
- 类型从 `@dukang/shared-types`;组件从 `@dukang/shared-ui`
|
||||
|
||||
## 请求
|
||||
|
||||
- Base: `/api/v1`
|
||||
- Headers: `Authorization`, `X-Client-App`(USER_H5 | SHOP_H5 | PARTNER_H5)
|
||||
|
||||
## UI 约束
|
||||
|
||||
- C 端订单 **5 Tab**(含 pending_ship)
|
||||
- 门店列表仅展示 `OPEN` 状态
|
||||
- 原型 `pages/` 只读参照,不在此目录改业务代码
|
||||
|
||||
## App 归属(2 人团队)
|
||||
|
||||
| App | 负责人 | 勿改他端页面 |
|
||||
|-----|--------|--------------|
|
||||
| h5-user | jacy-dukang | shop 核销、partner 录店 |
|
||||
| h5-shop | 刘京尧 | user 出码、admin 报表 |
|
||||
| h5-partner | 刘京尧 | user 下单、admin 开城 |
|
||||
| admin-web | jacy-dukang | 非 V2 小程序规格 |
|
||||
|
||||
路由对照:`pages/ROUTE_MAP.md`
|
||||
@@ -0,0 +1,53 @@
|
||||
---
|
||||
description: 杜康好客前端 H5 / Admin 编码规范与 OWNER 边界
|
||||
globs: apps/**/*.{tsx,ts}
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# 前端规范
|
||||
|
||||
## 目录约定
|
||||
|
||||
```
|
||||
src/
|
||||
├── components/ # PascalCase(AppToast.tsx)
|
||||
├── pages/ # *Page.tsx
|
||||
├── layouts/ # *Layout.tsx
|
||||
├── contexts/ # *Context.tsx
|
||||
├── lib/ # kebab-case(api.ts, client-location.ts)
|
||||
├── App.tsx
|
||||
└── main.tsx
|
||||
```
|
||||
|
||||
## 四 App
|
||||
|
||||
| App | 端口 | 负责人 | 样式 | X-Client-App |
|
||||
|-----|------|--------|------|--------------|
|
||||
| h5-user | 5173 | jacy-dukang | shared-ui tokens | USER_H5 |
|
||||
| h5-shop | 5174 | 刘京尧 | shared-ui tokens | SHOP_H5 |
|
||||
| h5-partner | 5175 | 刘京尧 | shared-ui tokens | PARTNER_H5 |
|
||||
| admin-web | 5175 | jacy-dukang | Ant Design 5 | HQ_WEB |
|
||||
|
||||
> h5-partner 与 admin-web 勿同时 dev。H5 三端用 `@dukang/shared-ui`;admin-web 独立 Ant Design。
|
||||
|
||||
## 隔离与请求
|
||||
|
||||
- 禁止 import 其他 `apps/*` 或 `server/*`
|
||||
- 类型从 `@dukang/shared-types` import
|
||||
- Base: `/api/v1`;Headers: `Authorization` + `X-Client-App`
|
||||
- Vite dev 代理 `/api` → `localhost:3000`
|
||||
|
||||
## UI 约束
|
||||
|
||||
- C 端订单 **5 Tab**(含 pending_ship)
|
||||
- 门店列表仅 `OPEN` 状态
|
||||
- 原型 `pages/` 只读;路由对照 `pages/ROUTE_MAP.md`
|
||||
|
||||
## App 归属(勿改他端)
|
||||
|
||||
| App | 勿改 |
|
||||
|-----|------|
|
||||
| h5-user | shop 核销、partner 录店 |
|
||||
| h5-shop | user 出码、admin 报表 |
|
||||
| h5-partner | user 下单、admin 开城 |
|
||||
| admin-web | 非 V2 小程序规格 |
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
description: Git 提交与 PR 协作规范
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# Git 规范
|
||||
|
||||
## 提交格式
|
||||
|
||||
Conventional Commits,scope = 端或模块名:
|
||||
|
||||
```
|
||||
feat(trade): add order preview API
|
||||
fix(redeem): enforce 500 yuan cap
|
||||
chore(shared-types): add OrderStatus enum
|
||||
```
|
||||
|
||||
## 禁止提交
|
||||
|
||||
- `.env`、`.env.local` 等敏感配置
|
||||
- `node_modules/`、`dist/`(已在 .gitignore)
|
||||
|
||||
## PR 与 Review
|
||||
|
||||
- feature 分支 + 小步 PR
|
||||
- 跨模块改动需相关双 Owner Review
|
||||
- Prisma 迁移必须多 Owner Review
|
||||
|
||||
## Agent 行为
|
||||
|
||||
- **仅用户明确要求时** 才执行 git commit / push
|
||||
- 不 amend 已推送的 commit,不 force push main/master
|
||||
@@ -1,16 +1,25 @@
|
||||
---
|
||||
description: packages 共享契约 — shared-types 与 domain 变更策略
|
||||
globs: packages/**/*
|
||||
description: 杜康好客共享包(shared-types / domain / shared-ui)规范
|
||||
globs: packages/**/*.{ts,tsx}
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# packages 规则
|
||||
# 共享包规范
|
||||
|
||||
## 包职责
|
||||
|
||||
| 包 | 用途 | 约束 |
|
||||
|----|------|------|
|
||||
| `@dukang/shared-types` | DTO、枚举、错误码、JWT Payload | 前后端唯一契约 |
|
||||
| `@dukang/domain` | 纯函数业务规则 | **禁止 IO**,含 Vitest 单测 |
|
||||
| `@dukang/shared-ui` | H5 共享组件 + `tokens.css` | 仅 H5 三端使用 |
|
||||
|
||||
## shared-types
|
||||
|
||||
- 前后端唯一 DTO/枚举来源
|
||||
- 枚举用 `SCREAMING_SNAKE_CASE`(如 `OrderStatus.PENDING_PAY`)
|
||||
- API Tab 查询用 snake_case(`pending_pay`)
|
||||
- **加法优先**:新字段 optional;删除/改名先 deprecated
|
||||
- 改 API 必须同步 V2 手册 §六
|
||||
- 改 API 必须同步 V2 手册 §六 与 shared-types
|
||||
|
||||
## domain
|
||||
|
||||
@@ -18,11 +27,17 @@ alwaysApply: false
|
||||
- 起购 2/6 瓶、权益 `benefitAmount ?? price`、核销 ¥500 上限在此实现
|
||||
- 变更必须有单元测试
|
||||
|
||||
```typescript
|
||||
const benefitAmount = product.benefitAmount ?? product.price;
|
||||
// 同城起购 2 瓶 / 跨城 6 瓶
|
||||
// 核销上限 ¥500
|
||||
```
|
||||
|
||||
## shared-ui
|
||||
|
||||
- 跨 App 组件;禁止 import 特定 App 代码
|
||||
- 设计令牌与 preV1 三 H5 共用
|
||||
- admin-web 使用 Ant Design,不引用 shared-ui
|
||||
|
||||
## 破坏性改动
|
||||
|
||||
需通知 jacy-dukang 与 刘京尧(若影响 partner/shop API)并在 PR 说明影响面。
|
||||
需通知 **jacy-dukang** 与 **刘京尧**(若影响 partner/shop API)并在 PR 说明影响面。Prisma 迁移需双方 Review(涉及 store/redeem 表时)。
|
||||
|
||||
Reference in New Issue
Block a user