Conversations
Workspace API / models/Conversations
models/Conversations
Type Aliases
AppLogger
AppLogger =
Logger|FastifyBaseLogger
Defined in: models/Conversations.ts:30
Logger type for conversation operations (Pino or Fastify logger)
Functions
setRLSContext()
setRLSContext(
client,userId,organizationId):Promise<void>
Defined in: models/Conversations.ts:52
Set RLS session variables for conversation isolation. MUST only be used with a dedicated client (from getClient()).
Parameters
client
any
userId
string
organizationId
string
Returns
Promise<void>
createConversation()
createConversation(
data,client?,log?):Promise<Conversation>
Defined in: models/Conversations.ts:88
Create a new conversation Enforces the 100 conversation cap per user per organization
Parameters
data
client?
any
log?
AppLogger = logger
Returns
Promise<Conversation>
findConversationById()
findConversationById(
conversationId,userId,organizationId):Promise<Conversation|null>
Defined in: models/Conversations.ts:170
Find conversation by ID with ownership check
Parameters
conversationId
string
userId
string
organizationId
string
Returns
Promise<Conversation | null>
findConversationWithSummary()
findConversationWithSummary(
conversationId,userId,organizationId):Promise<ConversationWithSummary|null>
Defined in: models/Conversations.ts:192
Find conversation with summary (message count, last message preview)
Parameters
conversationId
string
userId
string
organizationId
string
Returns
Promise<ConversationWithSummary | null>
findConversationSummaryById()
findConversationSummaryById(
conversationId,userId,organizationId):Promise<ConversationSummaryData|null>
Defined in: models/Conversations.ts:219
Find conversation summary fields for history context
Parameters
conversationId
string
userId
string
organizationId
string
Returns
Promise<ConversationSummaryData | null>
findConversationsByUser()
findConversationsByUser(
filters):Promise<{conversations:ConversationWithSummary[];total:number; }>
Defined in: models/Conversations.ts:249
List conversations for a user in an organization
Parameters
filters
Returns
Promise<{ conversations: ConversationWithSummary[]; total: number; }>
updateConversationTitle()
updateConversationTitle(
conversationId,userId,organizationId,title):Promise<Conversation|null>
Defined in: models/Conversations.ts:312
Update conversation title
Parameters
conversationId
string
userId
string
organizationId
string
title
string
Returns
Promise<Conversation | null>
updateConversation()
updateConversation(
conversationId,userId,organizationId,updateData):Promise<Conversation|null>
Defined in: models/Conversations.ts:336
Update conversation (general update)
Parameters
conversationId
string
userId
string
organizationId
string
updateData
Returns
Promise<Conversation | null>
softDeleteConversation()
softDeleteConversation(
conversationId,userId,organizationId,log):Promise<boolean>
Defined in: models/Conversations.ts:402
Soft delete a conversation
Parameters
conversationId
string
userId
string
organizationId
string
log
AppLogger = logger
Returns
Promise<boolean>
hardDeleteConversation()
hardDeleteConversation(
conversationId,log):Promise<boolean>
Defined in: models/Conversations.ts:434
Hard delete a conversation (for retention purge jobs) WARNING: This permanently deletes the conversation and all messages
Parameters
conversationId
string
log
AppLogger = logger
Returns
Promise<boolean>
countUserConversations()
countUserConversations(
userId,organizationId):Promise<number>
Defined in: models/Conversations.ts:457
Count user conversations in an organization
Parameters
userId
string
organizationId
string
Returns
Promise<number>
generateTitleFromMessage()
generateTitleFromMessage(
content,maxLength):string
Defined in: models/Conversations.ts:474
Auto-generate title from first user message
Parameters
content
string
maxLength
number = 60
Returns
string
createMessage()
createMessage(
data,userId,organizationId,client,log):Promise<Message>
Defined in: models/Conversations.ts:501
Create a new message
Parameters
data
userId
string
organizationId
string
client
any
REQUIRED dedicated client for RLS context. Use getClient() or pass from transaction.
log
AppLogger = logger
Returns
Promise<Message>
createMessageStandalone()
createMessageStandalone(
data,userId,organizationId,log):Promise<Message>
Defined in: models/Conversations.ts:559
Create a new message (standalone, manages its own client)
Parameters
data
userId
string
organizationId
string
log
AppLogger = logger
Returns
Promise<Message>
upsertMessages()
upsertMessages(
conversationId,messages,userId,organizationId,client?,log?):Promise<{upserted:number;conflicts:string[]; }>
Defined in: models/Conversations.ts:577
Upsert messages (for sync endpoint) Uses ON CONFLICT to handle duplicate message IDs
Parameters
conversationId
string
messages
userId
string
organizationId
string
client?
any
log?
AppLogger = logger
Returns
Promise<{ upserted: number; conflicts: string[]; }>
findMessagesByConversation()
findMessagesByConversation(
options,userId,organizationId):Promise<{messages:Message[];hasMore:boolean;nextBefore?:string; }>
Defined in: models/Conversations.ts:713
Find messages by conversation with cursor-based pagination
Parameters
options
userId
string
organizationId
string
Returns
Promise<{ messages: Message[]; hasMore: boolean; nextBefore?: string; }>
deleteMessages()
deleteMessages(
conversationId,messageIds,userId,organizationId,client,log):Promise<number>
Defined in: models/Conversations.ts:774
Delete messages by IDs (for tombstone sync)
Parameters
conversationId
string
messageIds
string[]
userId
string
organizationId
string
client
any
REQUIRED dedicated client for RLS context
log
AppLogger = logger
Returns
Promise<number>
findConversationsForPurge()
findConversationsForPurge(
retentionDays):Promise<string[]>
Defined in: models/Conversations.ts:823
Find conversations ready for hard delete (soft deleted + retention expired)
Parameters
retentionDays
number = 90
Returns
Promise<string[]>
purgeExpiredConversations()
purgeExpiredConversations(
retentionDays,batchSize,log):Promise<number>
Defined in: models/Conversations.ts:837
Purge expired conversations (batch hard delete)
Parameters
retentionDays
number = 90
batchSize
number = 100
log
AppLogger = logger
Returns
Promise<number>