lib/db/queries.ts using Drizzle ORM.
User queries
getUser
Retrieve a user by email address.User email address
ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:44-53
createUser
Create a new user account.User email address
Plain text password (will be hashed)
ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:55-63
createGuestUser
Create a temporary guest user account.- Email:
guest-{timestamp} - Password: Random UUID (hashed)
{ id: string, email: string }
Throws: ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:65-80
Chat queries
saveChat
Create a new chat conversation.Chat UUID
Owner user ID
Chat title
"public" or "private"ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:82-104
getChatById
Retrieve a chat by ID.Chat UUID
null if not found
Throws: ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:232-243
getChatsByUserId
Retrieve paginated chats for a user.User ID
Number of chats to return
Chat ID to start after (forward pagination)
Chat ID to end before (backward pagination)
{ chats: Chat[], hasMore: boolean }
Throws: ChatbotError("bad_request:database") or ChatbotError("not_found:database") if cursor chat not found
From lib/db/queries.ts:156-230
Pagination logic
deleteChatById
Delete a chat and all associated data.Chat UUID
ChatbotError("bad_request:database") on failure
Deletes in order:
- All votes for the chat
- All messages in the chat
- All stream records
- The chat itself
lib/db/queries.ts:106-123
deleteAllChatsByUserId
Delete all chats for a user.User ID
{ deletedCount: number }
Throws: ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:125-154
updateChatTitleById
Update a chat’s title.Chat UUID
New title
lib/db/queries.ts:518-531
updateChatVisibilityById
Update a chat’s visibility.Chat UUID
"public" or "private"ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:501-516
Message queries
saveMessages
Save multiple messages to the database.Array of messages to save
ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:245-251
getMessagesByChatId
Retrieve all messages for a chat.Chat UUID
createdAt (ascending)
Throws: ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:267-280
getMessageById
Retrieve a specific message by ID.Message UUID
ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:450-459
updateMessage
Update a message’s parts.Message UUID
New message parts
ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:253-265
deleteMessagesByChatIdAfterTimestamp
Delete messages created after a specific time.Chat UUID
Delete messages created on or after this time
ChatbotError("bad_request:database") on failure
Also deletes associated votes for those messages.
From lib/db/queries.ts:461-499
getMessageCountByUserId
Get count of user messages within a time window.User ID
Time window in hours (e.g., 24 for last 24 hours)
ChatbotError("bad_request:database") on failure
Used for rate limiting.
From lib/db/queries.ts:533-565
Vote queries
voteMessage
Create or update a vote on a message.Chat UUID
Message UUID
"up" or "down"ChatbotError("bad_request:database") on failure
Logic:
- If vote exists: Update
isUpvotedfield - If vote doesn’t exist: Insert new vote
lib/db/queries.ts:282-311
getVotesByChatId
Retrieve all votes for a chat.Chat UUID
ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:313-322
Document queries
saveDocument
Save a new document version.Document UUID
Document title
"text" | "code" | "image" | "sheet"Document content
Owner user ID
ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:324-352
getDocumentsById
Retrieve all versions of a document.Document UUID
createdAt (ascending)
Throws: ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:354-369
getDocumentById
Retrieve the latest version of a document.Document UUID
undefined
Throws: ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:371-386
deleteDocumentsByIdAfterTimestamp
Delete document versions created after a timestamp.Document UUID
Delete versions created after this time
ChatbotError("bad_request:database") on failure
Also deletes associated suggestions.
From lib/db/queries.ts:388-415
Suggestion queries
saveSuggestions
Save multiple suggestions.Array of suggestions to save
ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:417-429
getSuggestionsByDocumentId
Retrieve all suggestions for a document.Document UUID
ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:432-448
Stream queries
createStreamId
Create a resumable stream record.Stream UUID
Associated chat UUID
ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:567-584
getStreamIdsByChatId
Retrieve all stream IDs for a chat.Chat UUID
ChatbotError("bad_request:database") on failure
From lib/db/queries.ts:586-602
Error handling
All query functions use consistent error handling:updateChatTitleById: Logs warning instead of throwing- Pagination queries: May throw
ChatbotError("not_found:database")if cursor chat not found
Database connection
Fromlib/db/queries.ts:41-42:
Requires
POSTGRES_URL environment variable to be set.