You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.0 KiB

11 months ago
  1. const prisma = require("../utils/prisma");
  2. const { Document } = require("./documents");
  3. const DocumentVectors = {
  4. bulkInsert: async function (vectorRecords = []) {
  5. if (vectorRecords.length === 0) return;
  6. try {
  7. const inserts = [];
  8. vectorRecords.forEach((record) => {
  9. inserts.push(
  10. prisma.document_vectors.create({
  11. data: {
  12. docId: record.docId,
  13. vectorId: record.vectorId,
  14. },
  15. })
  16. );
  17. });
  18. await prisma.$transaction(inserts);
  19. return { documentsInserted: inserts.length };
  20. } catch (error) {
  21. console.error("Bulk insert failed", error);
  22. return { documentsInserted: 0 };
  23. }
  24. },
  25. where: async function (clause = {}, limit) {
  26. try {
  27. const results = await prisma.document_vectors.findMany({
  28. where: clause,
  29. take: limit || undefined,
  30. });
  31. return results;
  32. } catch (error) {
  33. console.error("Where query failed", error);
  34. return [];
  35. }
  36. },
  37. deleteForWorkspace: async function (workspaceId) {
  38. const documents = await Document.forWorkspace(workspaceId);
  39. const docIds = [...new Set(documents.map((doc) => doc.docId))];
  40. try {
  41. await prisma.document_vectors.deleteMany({
  42. where: { docId: { in: docIds } },
  43. });
  44. return true;
  45. } catch (error) {
  46. console.error("Delete for workspace failed", error);
  47. return false;
  48. }
  49. },
  50. deleteIds: async function (ids = []) {
  51. try {
  52. await prisma.document_vectors.deleteMany({
  53. where: { id: { in: ids } },
  54. });
  55. return true;
  56. } catch (error) {
  57. console.error("Delete IDs failed", error);
  58. return false;
  59. }
  60. },
  61. delete: async function (clause = {}) {
  62. try {
  63. await prisma.document_vectors.deleteMany({ where: clause });
  64. return true;
  65. } catch (error) {
  66. console.error("Delete failed", error);
  67. return false;
  68. }
  69. },
  70. };
  71. module.exports = { DocumentVectors };