| const prisma = require("../utils/prisma"); |
| const { safeJSONStringify } = require("../utils/helpers/chat/responses"); |
|
|
| const WorkspaceChats = { |
| new: async function ({ |
| workspaceId, |
| prompt, |
| response = {}, |
| user = null, |
| threadId = null, |
| include = true, |
| apiSessionId = null, |
| }) { |
| try { |
| const chat = await prisma.workspace_chats.create({ |
| data: { |
| workspaceId, |
| prompt, |
| response: safeJSONStringify(response), |
| user_id: user?.id || null, |
| thread_id: threadId, |
| api_session_id: apiSessionId, |
| include, |
| }, |
| }); |
| return { chat, message: null }; |
| } catch (error) { |
| console.error(error.message); |
| return { chat: null, message: error.message }; |
| } |
| }, |
|
|
| forWorkspaceByUser: async function ( |
| workspaceId = null, |
| userId = null, |
| limit = null, |
| orderBy = null |
| ) { |
| if (!workspaceId || !userId) return []; |
| try { |
| const chats = await prisma.workspace_chats.findMany({ |
| where: { |
| workspaceId, |
| user_id: userId, |
| thread_id: null, |
| api_session_id: null, |
| include: true, |
| }, |
| ...(limit !== null ? { take: limit } : {}), |
| ...(orderBy !== null ? { orderBy } : { orderBy: { id: "asc" } }), |
| }); |
| return chats; |
| } catch (error) { |
| console.error(error.message); |
| return []; |
| } |
| }, |
|
|
| forWorkspaceByApiSessionId: async function ( |
| workspaceId = null, |
| apiSessionId = null, |
| limit = null, |
| orderBy = null |
| ) { |
| if (!workspaceId || !apiSessionId) return []; |
| try { |
| const chats = await prisma.workspace_chats.findMany({ |
| where: { |
| workspaceId, |
| user_id: null, |
| api_session_id: String(apiSessionId), |
| thread_id: null, |
| }, |
| ...(limit !== null ? { take: limit } : {}), |
| ...(orderBy !== null ? { orderBy } : { orderBy: { id: "asc" } }), |
| }); |
| return chats; |
| } catch (error) { |
| console.error(error.message); |
| return []; |
| } |
| }, |
|
|
| forWorkspace: async function ( |
| workspaceId = null, |
| limit = null, |
| orderBy = null |
| ) { |
| if (!workspaceId) return []; |
| try { |
| const chats = await prisma.workspace_chats.findMany({ |
| where: { |
| workspaceId, |
| thread_id: null, |
| api_session_id: null, |
| include: true, |
| }, |
| ...(limit !== null ? { take: limit } : {}), |
| ...(orderBy !== null ? { orderBy } : { orderBy: { id: "asc" } }), |
| }); |
| return chats; |
| } catch (error) { |
| console.error(error.message); |
| return []; |
| } |
| }, |
|
|
| |
| |
| |
| markHistoryInvalid: async function (workspaceId = null, user = null) { |
| if (!workspaceId) return; |
| try { |
| await prisma.workspace_chats.updateMany({ |
| where: { |
| workspaceId, |
| user_id: user?.id, |
| thread_id: null, |
| }, |
| data: { |
| include: false, |
| }, |
| }); |
| return; |
| } catch (error) { |
| console.error(error.message); |
| } |
| }, |
|
|
| |
| |
| |
| markThreadHistoryInvalid: async function ( |
| workspaceId = null, |
| user = null, |
| threadId = null |
| ) { |
| if (!workspaceId || !threadId) return; |
| try { |
| await prisma.workspace_chats.updateMany({ |
| where: { |
| workspaceId, |
| thread_id: threadId, |
| user_id: user?.id, |
| }, |
| data: { |
| include: false, |
| }, |
| }); |
| return; |
| } catch (error) { |
| console.error(error.message); |
| } |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| markThreadHistoryInvalidV2: async function (whereClause = {}) { |
| if (!whereClause) return; |
| try { |
| await prisma.workspace_chats.updateMany({ |
| where: whereClause, |
| data: { |
| include: false, |
| }, |
| }); |
| return; |
| } catch (error) { |
| console.error(error.message); |
| } |
| }, |
|
|
| get: async function (clause = {}, limit = null, orderBy = null) { |
| try { |
| const chat = await prisma.workspace_chats.findFirst({ |
| where: clause, |
| ...(limit !== null ? { take: limit } : {}), |
| ...(orderBy !== null ? { orderBy } : {}), |
| }); |
| return chat || null; |
| } catch (error) { |
| console.error(error.message); |
| return null; |
| } |
| }, |
|
|
| delete: async function (clause = {}) { |
| try { |
| await prisma.workspace_chats.deleteMany({ |
| where: clause, |
| }); |
| return true; |
| } catch (error) { |
| console.error(error.message); |
| return false; |
| } |
| }, |
|
|
| where: async function ( |
| clause = {}, |
| limit = null, |
| orderBy = null, |
| offset = null |
| ) { |
| try { |
| const chats = await prisma.workspace_chats.findMany({ |
| where: clause, |
| ...(limit !== null ? { take: limit } : {}), |
| ...(offset !== null ? { skip: offset } : {}), |
| ...(orderBy !== null ? { orderBy } : {}), |
| }); |
| return chats; |
| } catch (error) { |
| console.error(error.message); |
| return []; |
| } |
| }, |
|
|
| count: async function (clause = {}) { |
| try { |
| const count = await prisma.workspace_chats.count({ |
| where: clause, |
| }); |
| return count; |
| } catch (error) { |
| console.error(error.message); |
| return 0; |
| } |
| }, |
|
|
| whereWithData: async function ( |
| clause = {}, |
| limit = null, |
| offset = null, |
| orderBy = null |
| ) { |
| const { Workspace } = require("./workspace"); |
| const { User } = require("./user"); |
|
|
| try { |
| const results = await this.where(clause, limit, orderBy, offset); |
|
|
| for (const res of results) { |
| const workspace = await Workspace.get({ id: res.workspaceId }); |
| res.workspace = workspace |
| ? { name: workspace.name, slug: workspace.slug } |
| : { name: "deleted workspace", slug: null }; |
|
|
| const user = res.user_id ? await User.get({ id: res.user_id }) : null; |
| res.user = user |
| ? { username: user.username } |
| : { username: res.api_session_id !== null ? "API" : "unknown user" }; |
| } |
|
|
| return results; |
| } catch (error) { |
| console.error(error.message); |
| return []; |
| } |
| }, |
| updateFeedbackScore: async function (chatId = null, feedbackScore = null) { |
| if (!chatId) return; |
| try { |
| await prisma.workspace_chats.update({ |
| where: { |
| id: Number(chatId), |
| }, |
| data: { |
| feedbackScore: |
| feedbackScore === null ? null : Number(feedbackScore) === 1, |
| }, |
| }); |
| return; |
| } catch (error) { |
| console.error(error.message); |
| } |
| }, |
|
|
| |
| |
| |
| _update: async function (id = null, data = {}) { |
| if (!id) throw new Error("No workspace chat id provided for update"); |
|
|
| try { |
| await prisma.workspace_chats.update({ |
| where: { id }, |
| data, |
| }); |
| return true; |
| } catch (error) { |
| console.error(error.message); |
| return false; |
| } |
| }, |
| bulkCreate: async function (chatsData) { |
| |
| |
| try { |
| const createdChats = []; |
| for (const chatData of chatsData) { |
| const chat = await prisma.workspace_chats.create({ |
| data: chatData, |
| }); |
| createdChats.push(chat); |
| } |
| return { chats: createdChats, message: null }; |
| } catch (error) { |
| console.error(error.message); |
| return { chats: null, message: error.message }; |
| } |
| }, |
| }; |
|
|
| module.exports = { WorkspaceChats }; |
|
|