refactor(errors): migrate decisions to {code,msg}
This commit is contained in:
+12
-12
@@ -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: [],
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user