refactor(store): adapt Zustand stores to backend-aligned types

- orders: remove name fields from creation, keep dispatchMode logic
- chat: remove readonly/senderName/senderAvatar references
- reviews: remove fromUserAvatar/toUserId, simplify participant check
- disputes: remove initiatorId/initiatorName from creation
- posts: remove authorRole/quotedPostId, keep linkedOrderId as number
- comments: remove postId from creation
- wallet: use string amounts
This commit is contained in:
zetaloop
2026-04-23 21:15:11 +08:00
parent 4037816998
commit 12284290cc
7 changed files with 28 additions and 125 deletions
+1 -34
View File
@@ -14,7 +14,6 @@ import { useChatStore } from "@/store/chat"
import { useNotificationStore } from "@/store/notifications"
import { usePlayerStore } from "@/store/players"
import { useServiceStore } from "@/store/services"
import { useShopStore } from "@/store/shops"
import { useWalletStore } from "@/store/wallet"
import { create } from "zustand"
@@ -112,22 +111,15 @@ function applyStatus(order: Order, status: OrderStatus): Order {
acceptedAt: order.acceptedAt ?? now,
}
case "pending_close":
return {
...order,
status,
closedAt: order.closedAt ?? now,
}
case "pending_review":
return {
...order,
status,
closedAt: order.closedAt ?? now,
}
case "completed":
return {
...order,
status,
closedAt: order.closedAt ?? now,
completedAt: order.completedAt ?? now,
}
default:
@@ -205,7 +197,7 @@ function notifyOrderStatus(order: Order) {
},
in_progress: {
title: "订单已接单",
content: `${order.playerName} 已开始服务`,
content: `订单 ${order.service.title} 已开始服务`,
},
pending_close: {
title: "订单发起结单",
@@ -332,10 +324,6 @@ export const useOrderStore = create<OrderState>((set, get) => {
return { decision: deny(400, "店铺信息与打手不匹配") }
}
const resolvedShopName = resolvedShopId
? useShopStore.getState().shops.find((item) => item.id === resolvedShopId)?.name
: undefined
const quantity = Number.isFinite(input.quantity) ? Math.floor(input.quantity) : Number.NaN
if (!quantity || quantity < 1) {
return { decision: deny(400, "数量不合法") }
@@ -345,11 +333,8 @@ export const useOrderStore = create<OrderState>((set, get) => {
const order: Order = {
id: generateId("ord"),
consumerId: consumer.id,
consumerName: consumer.nickname,
playerId: player.id,
playerName: player.user.nickname,
shopId: resolvedShopId,
shopName: resolvedShopName,
service,
status: "pending_payment",
totalPrice,
@@ -395,10 +380,6 @@ export const useOrderStore = create<OrderState>((set, get) => {
return { decision: deny(400, "店铺信息与打手不匹配") }
}
const resolvedShopName = resolvedShopId
? useShopStore.getState().shops.find((item) => item.id === resolvedShopId)?.name
: undefined
const quantity = Number.isFinite(input.quantity) ? Math.floor(input.quantity) : Number.NaN
if (!quantity || quantity < 1) {
return { decision: deny(400, "数量不合法") }
@@ -420,11 +401,8 @@ export const useOrderStore = create<OrderState>((set, get) => {
const order: Order = {
id: orderId,
consumerId: consumer.id,
consumerName: consumer.nickname,
playerId: player.id,
playerName: player.user.nickname,
shopId: resolvedShopId,
shopName: resolvedShopName,
service,
status: "pending_accept",
totalPrice,
@@ -465,17 +443,6 @@ useOrderStore.subscribe((state, prevState) => {
const prevOrder = prevState.orders.find((item) => item.id === order.id)
if (!prevOrder || prevOrder.status !== order.status) {
scheduleOrderTimeout(order.id, order.status)
if (order.status === "pending_accept" && order.shopId) {
const shop = useShopStore.getState().shops.find((s) => s.id === order.shopId)
if (shop?.dispatchMode === "auto") {
setTimeout(() => {
const current = useOrderStore.getState().orders.find((o) => o.id === order.id)
if (!current || current.status !== "pending_accept") return
const actor: Actor = { userId: order.playerId, role: "player", shopId: order.shopId }
useOrderStore.getState().acceptOrder(order.id, actor)
}, 3000)
}
}
}
})
prevState.orders.forEach((order) => {