File tree Expand file tree Collapse file tree 1 file changed +20
-18
lines changed
apps/web/client/src/app/api/chat/helpers Expand file tree Collapse file tree 1 file changed +20
-18
lines changed Original file line number Diff line number Diff line change 11import { fromDbMessage , messages , toDbMessage } from "@onlook/db" ;
22import { db } from "@onlook/db/src/client" ;
33import type { ChatMessage } from "@onlook/models" ;
4- import { eq } from "drizzle-orm" ;
4+ import { and , eq , gt } from "drizzle-orm" ;
55import debounce from "lodash/debounce" ;
66
77const 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
3840export const debouncedUpsertMessage = debounce ( upsertMessage , 500 ) ;
You can’t perform that action at this time.
0 commit comments