@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.
71 lines (56 loc) • 2.09 kB
text/typescript
import { and, asc, desc, eq } from 'drizzle-orm/expressions';
import { LobeChatDatabase } from '@/database/type';
import { idGenerator } from '@/database/utils/idGenerator';
import { SessionGroupItem, sessionGroups } from '../schemas';
export class SessionGroupModel {
private userId: string;
private db: LobeChatDatabase;
constructor(db: LobeChatDatabase, userId: string) {
this.userId = userId;
this.db = db;
}
create = async (params: { name: string; sort?: number }) => {
const [result] = await this.db
.insert(sessionGroups)
.values({ ...params, id: this.genId(), userId: this.userId })
.returning();
return result;
};
delete = async (id: string) => {
return this.db
.delete(sessionGroups)
.where(and(eq(sessionGroups.id, id), eq(sessionGroups.userId, this.userId)));
};
deleteAll = async () => {
return this.db.delete(sessionGroups).where(eq(sessionGroups.userId, this.userId));
};
query = async () => {
return this.db.query.sessionGroups.findMany({
orderBy: [asc(sessionGroups.sort), desc(sessionGroups.createdAt)],
where: eq(sessionGroups.userId, this.userId),
});
};
findById = async (id: string) => {
return this.db.query.sessionGroups.findFirst({
where: and(eq(sessionGroups.id, id), eq(sessionGroups.userId, this.userId)),
});
};
update = async (id: string, value: Partial<SessionGroupItem>) => {
return this.db
.update(sessionGroups)
.set({ ...value, updatedAt: new Date() })
.where(and(eq(sessionGroups.id, id), eq(sessionGroups.userId, this.userId)));
};
updateOrder = async (sortMap: { id: string; sort: number }[]) => {
await this.db.transaction(async (tx) => {
const updates = sortMap.map(({ id, sort }) => {
return tx
.update(sessionGroups)
.set({ sort, updatedAt: new Date() })
.where(and(eq(sessionGroups.id, id), eq(sessionGroups.userId, this.userId)));
});
await Promise.all(updates);
});
};
private genId = () => idGenerator('sessionGroups');
}