Files
vector-admin/backend/models/organizationConnection.js
T
timothycarambat 9ab94ac487 Fix need to reload on DB connection
Resolved the requirement for a user page reload on new DB connection. We now can check if sync is required once the connection is saved and marked as valid
2023-10-15 16:08:31 -07:00

108 lines
2.7 KiB
JavaScript

const prisma = require("../utils/prisma");
const OrganizationConnection = {
supportedConnectors: ["chroma", "pinecone", "qdrant", "weaviate"],
writable: ["type", "settings"],
create: async function (
organizationId = 0,
connectionType = "",
connectionSettings = {}
) {
try {
if (!this.supportedConnectors.includes(connectionType))
throw new Error(`Unsupport connector ${connectionType} provided.`);
const connector = await prisma.organization_connections.create({
data: {
organization_id: Number(organizationId),
type: connectionType,
settings: JSON.stringify(connectionSettings),
},
});
if (!connector) {
console.error("FAILED TO CREATE ORGANIZATION_CONNECTION RELATIONSHIP.");
return false;
}
return connector;
} catch (e) {
console.error(e.message);
return null;
}
},
get: async function (clause = {}) {
try {
const connection = await prisma.organization_connections.findFirst({
where: clause,
});
return connection ? { ...connection } : null;
} catch (e) {
console.error(e.message);
return null;
}
},
where: async function (clause = {}, limit = null) {
try {
const connections = await prisma.organization_connections.findMany({
where: clause,
...(limit !== null ? { take: limit } : {}),
});
return connections;
} catch (e) {
console.error(e.message);
return [];
}
},
count: async function (clause = {}) {
try {
const count = await prisma.organization_connections.count({
where: clause,
});
return count;
} catch (e) {
console.error(e.message);
return 0;
}
},
update: async function (id = null, data = {}) {
try {
if (!id) throw new Error("No connector id provided for update");
const validKeys = Object.keys(data).filter((key) =>
this.writable.includes(key)
);
const values = Object.values(data);
if (validKeys.length === 0 || validKeys.length !== values.length)
return { connector: { id }, message: "No valid fields to update!" };
// Assemble update array of only valid changes.
const validUpdates = {};
validKeys.forEach((key) => {
validUpdates[key] = data[key];
});
const updatedConnector = await prisma.organization_connections.update({
where: { id: Number(id) },
data: validUpdates,
});
if (!updatedConnector) {
console.error(message);
return null;
}
return updatedConnector;
} catch (e) {
console.error(e.message);
return null;
}
},
};
module.exports.OrganizationConnection = OrganizationConnection;