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
+7 -39
View File
@@ -14,10 +14,6 @@ function resolveAvatar(_userId: string) {
return ""
}
function shouldReadonly(status: Order["status"]) {
return status === "pending_review" || status === "completed" || status === "cancelled"
}
export const useChatStore = create<ChatState>((set, get) => ({
sessions: [],
messages: [],
@@ -26,17 +22,8 @@ export const useChatStore = create<ChatState>((set, get) => ({
(session) => session.type === "order" && session.orderId === order.id,
)
const readonly = shouldReadonly(order.status)
if (existing) {
if (existing.readonly !== readonly) {
set((state) => ({
sessions: state.sessions.map((session) =>
session.id === existing.id ? { ...session, readonly } : session,
),
}))
}
return get().sessions.find((session) => session.id === existing.id) ?? existing
return existing
}
const session: ChatSession = {
@@ -46,17 +33,16 @@ export const useChatStore = create<ChatState>((set, get) => ({
participants: [
{
id: order.consumerId,
name: order.consumerName,
nickname: "",
avatar: resolveAvatar(order.consumerId),
},
{
id: order.playerId,
name: order.playerName,
nickname: "",
avatar: resolveAvatar(order.playerId),
},
],
unreadCount: 0,
readonly,
}
set((state) => ({
@@ -69,7 +55,7 @@ export const useChatStore = create<ChatState>((set, get) => ({
const text = content.trim()
if (!text) return
const session = get().sessions.find((item) => item.id === sessionId)
if (!session || session.readonly) return
if (!session) return
const sender = session.participants.find((participant) => participant.id === actorId)
if (!sender) return
@@ -79,8 +65,6 @@ export const useChatStore = create<ChatState>((set, get) => ({
id: generateId("msg"),
sessionId,
senderId: actorId,
senderName: sender.name,
senderAvatar: sender.avatar,
type: "text",
content: text,
createdAt: now,
@@ -88,22 +72,14 @@ export const useChatStore = create<ChatState>((set, get) => ({
set((state) => ({
messages: [...state.messages, message],
sessions: state.sessions.map((session) =>
session.id === sessionId
? {
...session,
lastMessage: text,
lastMessageAt: now,
}
: session,
),
sessions: state.sessions.map((s) => (s.id === sessionId ? { ...s, lastMessage: text } : s)),
}))
},
sendImageMessage: (sessionId, actorId, imageUrl) => {
const content = imageUrl.trim()
if (!content) return
const session = get().sessions.find((item) => item.id === sessionId)
if (!session || session.readonly) return
if (!session) return
const sender = session.participants.find((participant) => participant.id === actorId)
if (!sender) return
@@ -113,8 +89,6 @@ export const useChatStore = create<ChatState>((set, get) => ({
id: generateId("msg"),
sessionId,
senderId: actorId,
senderName: sender.name,
senderAvatar: sender.avatar,
type: "image",
content,
createdAt: now,
@@ -123,13 +97,7 @@ export const useChatStore = create<ChatState>((set, get) => ({
set((state) => ({
messages: [...state.messages, message],
sessions: state.sessions.map((item) =>
item.id === sessionId
? {
...item,
lastMessage: "[图片]",
lastMessageAt: now,
}
: item,
item.id === sessionId ? { ...item, lastMessage: "[图片]" } : item,
),
}))
},