修复(#21): 禁止通用订单状态写入claimed (#20)

* 修复(#21): 禁止通用订单状态写入claimed

Co-authored-by: multica-agent <github@multica.ai>

* 文档(#21): 补充PR说明

Co-authored-by: multica-agent <github@multica.ai>

---------

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
2026-06-11 02:47:48 -07:00
committed by GitHub
parent de388ac1ef
commit c39bfd39dd
3 changed files with 71 additions and 8 deletions
@@ -15,6 +15,10 @@ import (
queue "github.com/perfect-panel/server/queue/types"
)
const (
orderStatusClaimed = 6
)
type UpdateOrderStatusLogic struct {
logger.Logger
ctx context.Context
@@ -31,8 +35,8 @@ func NewUpdateOrderStatusLogic(ctx context.Context, svcCtx *svc.ServiceContext)
}
func (l *UpdateOrderStatusLogic) UpdateOrderStatus(req *types.UpdateOrderStatusRequest) error {
if req.Status == orderStatusRefunded {
return errors.Wrapf(xerr.NewErrCode(xerr.OrderStatusError), "refund status must use refund order endpoint")
if req.Status == orderStatusClaimed || req.Status == orderStatusRefunded {
return errors.Wrapf(xerr.NewErrCode(xerr.OrderStatusError), "claimed/refund statuses are reserved for internal refund and activation flows")
}
info, err := l.svcCtx.OrderModel.FindOne(l.ctx, req.Id)
@@ -17,11 +17,13 @@ func TestUpdateOrderStatus_RejectsRefundStatus(t *testing.T) {
svcCtx: &svc.ServiceContext{},
}
err := logic.UpdateOrderStatus(&types.UpdateOrderStatusRequest{
Id: 1001,
Status: orderStatusRefunded,
})
if !isErrCode(err, xerr.OrderStatusError) {
t.Fatalf("UpdateOrderStatus error code = %v, want OrderStatusError; raw=%v", errCodeOf(err), err)
for _, status := range []uint8{orderStatusClaimed, orderStatusRefunded} {
err := logic.UpdateOrderStatus(&types.UpdateOrderStatusRequest{
Id: 1001,
Status: status,
})
if !isErrCode(err, xerr.OrderStatusError) {
t.Fatalf("status %d: UpdateOrderStatus error code = %v, want OrderStatusError; raw=%v", status, errCodeOf(err), err)
}
}
}