refactor(errors): migrate decisions to {code,msg}
This commit is contained in:
+9
-9
@@ -1,7 +1,7 @@
|
||||
import { allow, deny } from "@/lib/decision"
|
||||
import type { ApiDecision } from "@/lib/errors"
|
||||
import { generateId } from "@/lib/id"
|
||||
import { mockReviews, mockUsers } from "@/lib/mock"
|
||||
import { allow, deny } from "@/lib/policy/assert"
|
||||
import type { PolicyDecision } from "@/lib/policy/decision"
|
||||
import type { Review } from "@/lib/types"
|
||||
import { useOrderStore } from "@/store/orders"
|
||||
import { create } from "zustand"
|
||||
@@ -15,7 +15,7 @@ interface SubmitReviewInput {
|
||||
|
||||
interface ReviewState {
|
||||
reviews: Review[]
|
||||
submitReview: (input: SubmitReviewInput) => PolicyDecision
|
||||
submitReview: (input: SubmitReviewInput) => ApiDecision
|
||||
getReviewsByOrder: (orderId: string) => Review[]
|
||||
hasUserReviewed: (orderId: string, userId: string) => boolean
|
||||
}
|
||||
@@ -54,30 +54,30 @@ export const useReviewStore = create<ReviewState>((set, get) => ({
|
||||
get().reviews.some((review) => review.orderId === orderId && review.fromUserId === userId),
|
||||
submitReview: (input) => {
|
||||
if (!input.fromUserId) {
|
||||
return deny("AUTH_REQUIRED", "请先登录")
|
||||
return deny(401, "请先登录")
|
||||
}
|
||||
|
||||
if (!Number.isFinite(input.rating) || input.rating < 1 || input.rating > 5) {
|
||||
return deny("VALIDATION_FAILED", "评分范围应为 1-5")
|
||||
return deny(400, "评分范围应为 1-5")
|
||||
}
|
||||
|
||||
const order = useOrderStore.getState().orders.find((item) => item.id === input.orderId)
|
||||
if (!order) {
|
||||
return deny("NOT_FOUND", "订单不存在")
|
||||
return deny(404, "订单不存在")
|
||||
}
|
||||
|
||||
if (order.status !== "pending_review") {
|
||||
return deny("INVALID_STATUS", "仅待评价订单可提交评价")
|
||||
return deny(400, "仅待评价订单可提交评价")
|
||||
}
|
||||
|
||||
const relation = resolveOrderUser(input.orderId, input.fromUserId)
|
||||
if (!relation) {
|
||||
return deny("NOT_PARTICIPANT", "仅订单参与方可评价")
|
||||
return deny(403, "仅订单参与方可评价")
|
||||
}
|
||||
|
||||
const exists = get().hasUserReviewed(input.orderId, input.fromUserId)
|
||||
if (exists) {
|
||||
return deny("ALREADY_DONE", "该订单已提交过评价")
|
||||
return deny(400, "该订单已提交过评价")
|
||||
}
|
||||
|
||||
const fromUser = resolveUser(input.fromUserId)
|
||||
|
||||
Reference in New Issue
Block a user