Skip to content

Commit a946b7a

Browse files
committed
saving
1 parent 387dfa6 commit a946b7a

File tree

1 file changed

+20
-18
lines changed
  • apps/web/client/src/app/api/chat/helpers

1 file changed

+20
-18
lines changed

apps/web/client/src/app/api/chat/helpers/message.ts

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { fromDbMessage, messages, toDbMessage } from "@onlook/db";
22
import { db } from "@onlook/db/src/client";
33
import type { ChatMessage } from "@onlook/models";
4-
import { eq } from "drizzle-orm";
4+
import { and, eq, gt } from "drizzle-orm";
55
import debounce from "lodash/debounce";
66

77
const upsertMessage = async ({
@@ -13,26 +13,28 @@ const upsertMessage = async ({
1313
conversationId: string;
1414
message: ChatMessage;
1515
}) => {
16-
console.log('upsertMessage', id, conversationId);
1716
const dbMessage = toDbMessage(message, conversationId);
18-
const [updatedMessage] = await db
19-
.insert(messages)
20-
.values({
21-
...dbMessage,
22-
id,
23-
})
24-
.onConflictDoUpdate({
25-
target: [messages.id],
26-
set: {
17+
return await db.transaction(async (tx) => {
18+
// Remove messages newer than the updated message
19+
await tx.delete(messages).where(and(
20+
eq(messages.conversationId, conversationId),
21+
gt(messages.createdAt, dbMessage?.createdAt ?? new Date()),
22+
));
23+
const [updatedMessage] = await tx
24+
.insert(messages)
25+
.values({
2726
...dbMessage,
2827
id,
29-
},
30-
}).returning();
31-
32-
if (!updatedMessage) {
33-
throw new Error('Message not updated');
34-
}
35-
return updatedMessage;
28+
})
29+
.onConflictDoUpdate({
30+
target: [messages.id],
31+
set: {
32+
...dbMessage,
33+
id,
34+
},
35+
}).returning();
36+
return updatedMessage;
37+
});
3638
};
3739

3840
export const debouncedUpsertMessage = debounce(upsertMessage, 500);

0 commit comments

Comments
 (0)