agents 和 skills 上传

This commit is contained in:
2026-07-01 17:12:46 +08:00
parent aeb4ecfc84
commit 9cbd65f8d7
23 changed files with 1276 additions and 34 deletions
+101
View File
@@ -0,0 +1,101 @@
---
name: dukang-coding
description: >-
Implements Dukang Haoke (杜康好客) features following V2/preV1 coding manuals,
module OWNER boundaries, and shared-types contracts. Use when coding APIs,
pages, Prisma logic, task cards, or fixing bugs in this monorepo.
---
# 杜康好客 · 编码 Skill
## 何时启用
- 实现/修复 `apps/*``server/dukang-api``packages/*` 功能
- 用户给出任务卡 ID 或 @ 本 skill
- **不要**用于纯文档问答(直接读手册即可)
## 会话启动(按序)
1. 确认阶段:preV1 → 读 `杜康好客-preV1编码手册.md`;V2 能力 → 读 V2 手册对应 §
2. 读 [`AGENTS.md`](../../AGENTS.md) OWNER 表 → **只改本 OWNER 路径**
3. 有任务卡 ID → 配合 `dukang-task-card` skill 或查 preV1 §9 / V2 §七
4. UI 任务 → `pages/ROUTE_MAP.md` + 对应 `pages/{端}/` 原型
5. 编码前过一遍下方 Checklist
## 编码前 Checklist
```
- [ ] 任务所属 OWNER 与目标路径已确认
- [ ] API 路径、Guard、表名已从 V2 §六/§五 核对
- [ ] 跨模块需求 → 只 inject 对方 exported Service
- [ ] 新枚举/DTO → packages/shared-types
- [ ] 起购/权益/核销规则 → packages/domain(禁止 Controller 硬编码)
- [ ] preV1 Mock → integrations/*,非业务 Service 内散落 if
```
## 后端(OWNER 模块内)
```
modules/{name}/
├── {name}.module.ts # exports: [XxxService] 唯一出口
├── {name}.controller.ts
├── {name}.service.ts # 仅写本模块 Prisma 表
└── dto/
```
WorkflowDTO → Service(本模块表)→ Controller + Guard → 同步 shared-types。
跨模块示例(允许):
```typescript
// trade.service.ts — OWNER A
constructor(
private readonly benefitService: BenefitService, // from BenefitModule
private readonly catalogService: CatalogService,
) {}
await this.benefitService.grantOnOrderPaid(orderId);
```
跨模块示例(禁止):
```typescript
// redeem.service.ts — ❌ 禁止
await this.prisma.order.update({ ... });
```
## 前端(单 App 内)
1. 路由对照 `pages/ROUTE_MAP.md`
2. `src/lib/api.ts` 统一 fetch + `X-Client-App`
3. 类型从 `@dukang/shared-types` import
4. C 端订单 Tab`all | pending_pay | pending_ship | pending_receive | completed`
## 核心业务(packages/domain
```typescript
const benefitAmount = product.benefitAmount ?? product.price;
// 核销:0 < amount ≤ min(balance, 500)
// 同城 min 2 瓶 / 跨城 min 6 瓶
```
## 核销并发(M3+
- Redis `redeem:token:{token}` EX 300
- 事务 + `user_benefit_coupon.version` 乐观锁
-`user_redeem_record` + `store_payout`(PENDING) + `common_event(BENEFIT_LEDGER, REDEEM)`
## 资源上传
`POST /common/resources/upload-token` → OSS 直传 → `POST /common/resources`
## 完成定义
- 任务卡验收项全部满足
- 无跨模块 Prisma 直写
- `pnpm lint` 无新增错误;domain 相关单测通过
## 延伸阅读
- 模块/表/依赖矩阵:[reference-backend.md](reference-backend.md)
- 页面↔API 速查:[reference-frontend.md](reference-frontend.md)
- preV1 Mock 细节:`dukang-prev1` skill
@@ -0,0 +1,85 @@
# 后端速查(杜康好客 v3.1
> 完整 DDL/API 以 V2 手册 §五/§六 为准。
## API Base
- Prefix: `/api/v1`
- Response: `{ code: 0, message: 'ok', data }`
- JWT: `actorType` + `actorId` + `clientApp`
## clientApp → actorType → 表
| preV1 clientApp | V2 clientApp | actorType | 账号表 |
|-----------------|--------------|-----------|--------|
| USER_H5 | USER_MINI | USER | user_user |
| SHOP_H5 | SHOP_H5 | STORE | store_account |
| PARTNER_H5 | PARTNER_MINI | PARTNER | partner_account |
| — | HQ_MINI | HQ | hq_account |
## Module → API 前缀
| Module | 前缀示例 | OWNER |
|--------|----------|-------|
| iam | `/auth`, `/user` | A |
| catalog | `/catalog`, `/admin/cities`, `/admin/products` | C |
| trade | `/trade`, `/partner/orders`, `/admin/orders` | A |
| benefit | `/benefit` | A |
| store | `/stores`, `/partner/stores`, `/admin/store-audits` | B |
| redeem | `/redeem`, `/shop/redeem` | D |
| settlement | `/settlement`, `/partner/settlement`, `/admin/settlement` | C |
| ops | `/admin/dashboard`, `/admin/reports` | C |
| analytics | `/analytics`, `/promo/touch` | A |
| callbacks | `/callbacks/wechat/pay`, `/callbacks/xfx/delivery` | Lead |
## 表前缀 → Module 写 OWNER
| 前缀 | 示例表 | OWNER Module |
|------|--------|--------------|
| user_ | user_user, user_order, user_benefit_coupon | iam / trade / benefit |
| store_ | store_store, store_account, store_payout | store / iam / settlement |
| partner_ | partner_partner, partner_bill | store(B) / settlement(C) |
| hq_ | hq_account | iam |
| common_ | common_product_item, common_event, common_city | catalog / common |
| log_ | log_third_party, log_user_analytics | 写入方 Module |
**无以下 V1 表**payments、user_order_item、redeem_tokensDB)。
## 关键跨模块调用链
**Mock/真实支付成功**
```
PayProvider → TradeService.handlePaySuccess()
→ BenefitService.grantOnOrderPaid(orderId)
→ OrderDelivery 预创建
→ common_event(ORDER_STATUS)
```
**核销确认**
```
RedeemService.confirm()
→ BenefitService.deduct(couponId)
→ SettlementService.createStorePayout(redeemRecordId)
```
## 禁止依赖(PR 拒绝)
| # | 禁止 |
|---|------|
| F1 | redeem 直写 order |
| F2 | store → trade/benefit |
| F3 | benefit → trade/redeem |
| F4 | trade → redeem |
| F5 | benefit → redeem |
| F6 | catalog → trade/settlement |
| F9 | apps import server 源码 |
## integrationspreV1
| Flag | Provider | 行为 |
|------|----------|------|
| MOCK_SMS=true | sms.mock | 固定码 123456 |
| MOCK_PAY=true | pay.mock | 同步 PAID + 发券 |
| MOCK_DELIVERY_AUTO=true | delivery.mock | BullMQ 自动推进状态 |
@@ -0,0 +1,65 @@
# 前端速查(preV1 三 H5 + admin-web
> 路由事实源:[`pages/ROUTE_MAP.md`](../../../pages/ROUTE_MAP.md)
## App 配置
| App | Filter | Dev | X-Client-App |
|-----|--------|-----|--------------|
| h5-user | @dukang/h5-user | pnpm dev:user | USER_H5 |
| h5-shop | @dukang/h5-shop | pnpm dev:shop | SHOP_H5 |
| h5-partner | @dukang/h5-partner | pnpm dev:partner | PARTNER_H5 |
| admin-web | @dukang/admin-web | pnpm dev:admin | AdminAuth(内部) |
## 共享包
```typescript
import { OrderStatus, ClientApp } from '@dukang/shared-types';
import { PageHeader } from '@dukang/shared-ui';
```
## h5-user 主路由(OWNER A
| Route | 页面 | 关键 API |
|-------|------|----------|
| `/login` | 登录 | POST /auth/sms/send, /auth/login/sms |
| `/` | 首页 | GET /catalog/products |
| `/product/:id` | 详情 | GET /catalog/products/:id |
| `/order/confirm` | 确认订单 | POST /trade/orders/preview, /trade/orders |
| `/pay` | Mock 支付 | POST /trade/orders/:id/pay |
| `/orders` | 5 Taber | GET /trade/orders?tab= |
| `/benefit` | 权益 | GET /benefit/coupons |
| `/redeem` | 出码 | POST /redeem/token |
| `/stores` | 门店 | GET /stores(仅 OPEN |
## h5-shop 主路由(OWNER D
| Route | 页面 | 关键 API |
|-------|------|----------|
| `/login` | 登录 | POST /shop/auth/login/sms |
| `/redeem` | 核销确认 | POST /shop/redeem/confirm |
| `/records` | 核销记录 | GET /shop/redeem/records |
## h5-partner 主路由(OWNER B
| Route | 页面 | 关键 API |
|-------|------|----------|
| `/stores/new` | 录店 | POST /partner/stores |
| `/stores` | 门店管理 | GET /partner/stores |
| `/orders` | 辖区订单 | GET /partner/orders |
| — | Mock 推进配送 | POST /partner/orders/:id/mock-advance-delivery |
## UI 硬约束
- C 端订单 **5 Tab**(含 pending_ship
- 个人中心无会员等级(V1 不做会员体系)
- 清香型 4 SKU 可购;酱香/浓香灰态
- 原型只读:`pages/{端}/*/code.html`,勿改原型目录
## preV1 与 V2 UI 差异
| 项 | preV1 | V2 |
|----|-------|-----|
| C/合伙人载体 | H5 | 微信小程序 |
| 总部 | admin-web 内部 | mini-hq 小程序 |
| 支付页 | Mock 同步成功 | 微信 JSAPI |