## MODIFIED Requirements ### Requirement: 上架/下架套餐 系统 SHALL 通过 `PATCH /api/admin/packages/:id/shelf` 接口允许不同角色切换套餐上下架状态。**操作目标因调用者角色而不同**:平台/超管修改 `tb_package.shelf_status`(全局状态),代理修改自己的 `tb_shop_package_allocation.shelf_status`(代理独立状态)。只有启用状态的套餐才能上架。 #### Scenario: 平台管理员上架启用的套餐 - **WHEN** 平台/超管将启用且下架的套餐设置为上架 - **THEN** 系统更新 `tb_package.shelf_status=1` #### Scenario: 平台管理员尝试上架禁用的套餐 - **WHEN** 平台/超管尝试上架一个 status=2(禁用)的套餐 - **THEN** 系统返回错误 "禁用的套餐不能上架,请先启用" #### Scenario: 平台管理员下架套餐 - **WHEN** 平台/超管将上架的套餐设置为下架 - **THEN** 系统更新 `tb_package.shelf_status=2`,只影响平台自营渠道 #### Scenario: 代理上架自己分配的套餐 - **GIVEN** 代理拥有该套餐的分配记录,且 `tb_package.status=1`(启用) - **WHEN** 代理调用接口设置 shelf_status=1 - **THEN** 系统更新该代理的 `allocation.shelf_status=1`,不修改 `tb_package.shelf_status` #### Scenario: 代理下架自己分配的套餐 - **GIVEN** 代理拥有该套餐的分配记录,allocation.shelf_status=1 - **WHEN** 代理调用接口设置 shelf_status=2 - **THEN** 系统更新该代理的 `allocation.shelf_status=2`,不影响其他代理 #### Scenario: 代理尝试上架全局禁用的套餐 - **GIVEN** `tb_package.status=2`(禁用) - **WHEN** 代理尝试将 shelf_status 设置为1 - **THEN** 系统返回错误 "套餐已禁用,无法上架" #### Scenario: 代理操作未分配的套餐 - **GIVEN** 代理没有该套餐的分配记录 - **WHEN** 代理调用接口操作该套餐的上下架 - **THEN** 系统返回错误 "该套餐未分配给您,无法操作上下架"