UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

94 lines (78 loc) 2.82 kB
import { and, desc, eq, inArray } from 'drizzle-orm/expressions'; import { LobeChatDatabase } from '@/database/type'; import { KnowledgeBaseItem } from '@/types/knowledgeBase'; import { NewKnowledgeBase, knowledgeBaseFiles, knowledgeBases } from '../schemas'; export class KnowledgeBaseModel { private userId: string; private db: LobeChatDatabase; constructor(db: LobeChatDatabase, userId: string) { this.userId = userId; this.db = db; } // create create = async (params: Omit<NewKnowledgeBase, 'userId'>) => { const [result] = await this.db .insert(knowledgeBases) .values({ ...params, userId: this.userId }) .returning(); return result; }; addFilesToKnowledgeBase = async (id: string, fileIds: string[]) => { return this.db .insert(knowledgeBaseFiles) .values(fileIds.map((fileId) => ({ fileId, knowledgeBaseId: id, userId: this.userId }))) .returning(); }; // delete delete = async (id: string) => { return this.db .delete(knowledgeBases) .where(and(eq(knowledgeBases.id, id), eq(knowledgeBases.userId, this.userId))); }; deleteAll = async () => { return this.db.delete(knowledgeBases).where(eq(knowledgeBases.userId, this.userId)); }; removeFilesFromKnowledgeBase = async (knowledgeBaseId: string, ids: string[]) => { return this.db.delete(knowledgeBaseFiles).where( and( eq(knowledgeBaseFiles.knowledgeBaseId, knowledgeBaseId), inArray(knowledgeBaseFiles.fileId, ids), // eq(knowledgeBaseFiles.userId, this.userId), ), ); }; // query query = async () => { const data = await this.db .select({ avatar: knowledgeBases.avatar, createdAt: knowledgeBases.createdAt, description: knowledgeBases.description, id: knowledgeBases.id, isPublic: knowledgeBases.isPublic, name: knowledgeBases.name, settings: knowledgeBases.settings, type: knowledgeBases.type, updatedAt: knowledgeBases.updatedAt, }) .from(knowledgeBases) .where(eq(knowledgeBases.userId, this.userId)) .orderBy(desc(knowledgeBases.updatedAt)); return data as KnowledgeBaseItem[]; }; findById = async (id: string) => { return this.db.query.knowledgeBases.findFirst({ where: and(eq(knowledgeBases.id, id), eq(knowledgeBases.userId, this.userId)), }); }; // update update = async (id: string, value: Partial<KnowledgeBaseItem>) => this.db .update(knowledgeBases) .set({ ...value, updatedAt: new Date() }) .where(and(eq(knowledgeBases.id, id), eq(knowledgeBases.userId, this.userId))); static findById = async (db: LobeChatDatabase, id: string) => db.query.knowledgeBases.findFirst({ where: eq(knowledgeBases.id, id), }); }