refactor(errors): migrate decisions to {code,msg}

This commit is contained in:
zetaloop
2026-02-28 07:21:51 +08:00
parent 4e2ee5be54
commit cc24a0cbc3
23 changed files with 157 additions and 165 deletions
+12 -12
View File
@@ -1,6 +1,6 @@
import type { Actor } from "@/lib/policy/actor"
import { allow, deny, requireAuth } from "@/lib/policy/assert"
import type { PolicyDecision } from "@/lib/policy/decision"
import type { Actor } from "@/lib/actor"
import { allow, deny, requireAuth } from "@/lib/decision"
import type { ApiDecision } from "@/lib/errors"
import type { OrderStatus } from "@/lib/types"
export type OrderAction =
@@ -36,7 +36,7 @@ interface TransitionContext {
}
export interface OrderTransitionResult {
decision: PolicyDecision
decision: ApiDecision
nextStatus?: OrderStatus
sideEffects: OrderTransitionSideEffect[]
}
@@ -77,7 +77,7 @@ function isAutoAction(action: OrderAction): boolean {
return action.startsWith("AUTO_TIMEOUT_")
}
function checkRolePermission(action: OrderAction, actor?: Actor | null): PolicyDecision {
function checkRolePermission(action: OrderAction, actor?: Actor | null): ApiDecision {
if (isAutoAction(action) || (action === "RESOLVE_DISPUTE" && !actor?.userId)) {
return allow()
}
@@ -88,26 +88,26 @@ function checkRolePermission(action: OrderAction, actor?: Actor | null): PolicyD
}
if (!actor) {
return deny("AUTH_REQUIRED", "请先登录")
return deny(401, "请先登录")
}
if (action === "PAY" || action === "CANCEL_PRE_ACCEPT") {
return actor.role === "consumer" ? allow() : deny("ROLE_FORBIDDEN", "仅客户可执行该操作")
return actor.role === "consumer" ? allow() : deny(403, "仅客户可执行该操作")
}
if (action === "ACCEPT") {
return actor.role === "player" || actor.role === "owner"
? allow()
: deny("ROLE_FORBIDDEN", "仅打手或店主可执行该操作")
: deny(403, "仅打手或店主可执行该操作")
}
if (action === "RESOLVE_DISPUTE") {
return actor.role === "owner" ? allow() : deny("ROLE_FORBIDDEN", "仅店主可执行该操作")
return actor.role === "owner" ? allow() : deny(403, "仅店主可执行该操作")
}
return actor.role === "consumer" || actor.role === "player"
? allow()
: deny("ROLE_FORBIDDEN", "当前身份不可执行该操作")
: deny(403, "当前身份不可执行该操作")
}
function buildSideEffects(nextStatus: OrderStatus): OrderTransitionSideEffect[] {
@@ -144,14 +144,14 @@ export function evaluateOrderTransition(context: TransitionContext): OrderTransi
const nextStatus = orderTransitionTable[context.order.status][context.action]
if (!nextStatus) {
return {
decision: deny("INVALID_STATUS", "当前状态不可执行该操作"),
decision: deny(400, "当前状态不可执行该操作"),
sideEffects: [],
}
}
if (nextStatus === context.order.status) {
return {
decision: deny("IDEMPOTENT_NOOP", "状态未变化"),
decision: deny(400, "状态未变化"),
sideEffects: [],
}
}