|
|
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 }; |
|
|
|