refactor(api): add adapter layer for order/chat/review/dispute writes

This commit is contained in:
zetaloop
2026-02-23 11:04:16 +08:00
parent 1dfcd3927d
commit 8e62b15403
10 changed files with 258 additions and 98 deletions
+12 -12
View File
@@ -3,18 +3,12 @@ import { generateId } from "@/lib/id"
import { mockChatMessages, mockChatSessions, mockUsers } from "@/lib/mock"
import type { ChatMessage, ChatSession, Order } from "@/lib/types"
interface Sender {
id: string
name: string
avatar: string
}
interface ChatState {
sessions: ChatSession[]
messages: ChatMessage[]
ensureOrderSession: (order: Order) => ChatSession
sendTextMessage: (sessionId: string, sender: Sender, content: string) => void
sendImageMessage: (sessionId: string, sender: Sender, imageUrl: string) => void
sendTextMessage: (sessionId: string, actorId: string, content: string) => void
sendImageMessage: (sessionId: string, actorId: string, imageUrl: string) => void
}
function resolveAvatar(userId: string) {
@@ -72,17 +66,20 @@ export const useChatStore = create<ChatState>((set, get) => ({
return session
},
sendTextMessage: (sessionId, sender, content) => {
sendTextMessage: (sessionId, actorId, content) => {
const text = content.trim()
if (!text) return
const session = get().sessions.find((item) => item.id === sessionId)
if (!session || session.readonly) return
const sender = session.participants.find((participant) => participant.id === actorId)
if (!sender) return
const now = new Date().toISOString()
const message: ChatMessage = {
id: generateId("msg"),
sessionId,
senderId: sender.id,
senderId: actorId,
senderName: sender.name,
senderAvatar: sender.avatar,
type: "text",
@@ -103,17 +100,20 @@ export const useChatStore = create<ChatState>((set, get) => ({
),
}))
},
sendImageMessage: (sessionId, sender, imageUrl) => {
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
const sender = session.participants.find((participant) => participant.id === actorId)
if (!sender) return
const now = new Date().toISOString()
const message: ChatMessage = {
id: generateId("msg"),
sessionId,
senderId: sender.id,
senderId: actorId,
senderName: sender.name,
senderAvatar: sender.avatar,
type: "image",