feat: implement chat persistence with MongoDB
- Add full chat persistence to database (conversations and messages) - Implement MongoChatRepository with cursor-based pagination - Add getConversations/getConversation endpoints in ChatController - Save user and assistant messages in ChatService.processMessage() - Track respondedAction (confirm/reject) on proposed event messages - Load existing messages on chat screen mount - Add addMessages() bulk action and chatMessageToMessageData() helper to ChatStore - Add RespondedAction type and UpdateMessageDTO to shared types
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { create } from "zustand";
|
||||
import { ProposedEventChange } from "@caldav/shared";
|
||||
import { ChatMessage, ProposedEventChange } from "@caldav/shared";
|
||||
|
||||
type BubbleSide = "left" | "right";
|
||||
|
||||
@@ -14,6 +14,7 @@ export type MessageData = {
|
||||
|
||||
interface ChatState {
|
||||
messages: MessageData[];
|
||||
addMessages: (messages: MessageData[]) => void;
|
||||
addMessage: (message: MessageData) => void;
|
||||
updateMessage: (id: string, updates: Partial<MessageData>) => void;
|
||||
clearMessages: () => void;
|
||||
@@ -21,6 +22,9 @@ interface ChatState {
|
||||
|
||||
export const useChatStore = create<ChatState>((set) => ({
|
||||
messages: [],
|
||||
addMessages(messages) {
|
||||
set((state) => ({messages: [...state.messages, ...messages]}))
|
||||
},
|
||||
addMessage: (message: MessageData) => {
|
||||
set((state) => ({ messages: [...state.messages, message] }));
|
||||
},
|
||||
@@ -35,3 +39,15 @@ export const useChatStore = create<ChatState>((set) => ({
|
||||
set({ messages: [] });
|
||||
},
|
||||
}));
|
||||
|
||||
// Helper to convert server ChatMessage to client MessageData
|
||||
export function chatMessageToMessageData(msg: ChatMessage): MessageData {
|
||||
return {
|
||||
id: msg.id,
|
||||
side: msg.sender === "assistant" ? "left" : "right",
|
||||
content: msg.content,
|
||||
proposedChange: msg.proposedChange,
|
||||
respondedAction: msg.respondedAction,
|
||||
conversationId: msg.conversationId,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
export { useAuthStore } from "./AuthStore";
|
||||
export { useChatStore, type MessageData } from "./ChatStore";
|
||||
export { useChatStore, chatMessageToMessageData, type MessageData } from "./ChatStore";
|
||||
export { useEventsStore } from "./EventsStore";
|
||||
|
||||
Reference in New Issue
Block a user