- 2026-04-19_schedule-max-participants-required.md (PR #927 / Issue #859) - 2026-04-19_early-bird-plan-product-unique.md (PR #929 / Issue #917) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.2 KiB
2.2 KiB
fix: 小蒙马班期保存 maxParticipants 改为必填字段
服务: hl-product-service-v2 PR: #927 Issue: #859 日期: 2026-04-19 前端是否需要改动: 需要改动(之前允许不传或传 null,现在必须显式传数字;0=不限)
一、背景
测试环境反馈前端保存班期时缺传 maxParticipants 会收到模糊的"违反约束"报错,用户无法分辨是哪个字段出问题。
后端之前 ScheduleSaveReqVO.maxParticipants 只用 @ApiModelProperty(required=true) 做了文档标记,Bean Validation 层未强制校验,结果 null 一路打到 SQL 层才报错。
二、变更接口
| 方法 | 路径 | 变更类型 |
|---|---|---|
| POST | /admin/product/item/{id}/schedule |
请求体字段校验收紧 |
| POST | /admin/product/item/{id}/schedule/batch-create |
同上 |
三、字段约束变化
| 字段 | 之前 | 现在 | 允许值 |
|---|---|---|---|
maxParticipants |
可不传 / null(后端兜底 0) | 必传 | 0=不限;>0=上限人数 |
四、错误响应示例
缺传 maxParticipants
POST /admin/product/item/123/schedule
{
"batchName": "五一特别团",
"departureDate": "2026-05-01",
"adultPrice": 5160,
"childPrice": 4580
}
// 响应(之前是 "数据操作违反约束,请检查输入",歧义)
{
"code": 400,
"message": "最大参与人数不能为空",
"success": false
}
正常请求
POST /admin/product/item/123/schedule
{
"batchName": "五一特别团",
"departureDate": "2026-05-01",
"adultPrice": 5160,
"childPrice": 4580,
"maxParticipants": 30, // 必填
"maxRooms": 15 // 可选,默认取行程最少房间数
}
五、前端改动建议
- 班期创建/编辑表单:
maxParticipants输入框加前端必填校验,避免到后端才被拦下 - 批量创建表单:同上
- 提示文案:如果字段空值,提示"最大参与人数不能为空,0 表示不限人数"
六、兼容性
- 前端原本填写 0 或具体数字的调用方不受影响
- 前端如有"不填=不限"的历史 UX,需改成"显式填 0=不限"
- 后端 Service 层 null→0 兜底代码保留作为双保险,但实际不会再走到