@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.
77 lines (66 loc) • 2.12 kB
text/typescript
import { z } from 'zod';
import { SessionGroupModel } from '@/database/models/sessionGroup';
import { insertSessionGroupSchema } from '@/database/schemas';
import { authedProcedure, router } from '@/libs/trpc/lambda';
import { serverDatabase } from '@/libs/trpc/lambda/middleware';
import { SessionGroupItem } from '@/types/session';
const sessionProcedure = authedProcedure.use(serverDatabase).use(async (opts) => {
const { ctx } = opts;
return opts.next({
ctx: {
sessionGroupModel: new SessionGroupModel(ctx.serverDB, ctx.userId),
},
});
});
export const sessionGroupRouter = router({
createSessionGroup: sessionProcedure
.input(
z.object({
name: z.string(),
sort: z.number().optional(),
}),
)
.mutation(async ({ input, ctx }) => {
const data = await ctx.sessionGroupModel.create({
name: input.name,
sort: input.sort,
});
return data?.id;
}),
getSessionGroup: sessionProcedure.query(async ({ ctx }): Promise<SessionGroupItem[]> => {
return ctx.sessionGroupModel.query() as any;
}),
removeAllSessionGroups: sessionProcedure.mutation(async ({ ctx }) => {
return ctx.sessionGroupModel.deleteAll();
}),
removeSessionGroup: sessionProcedure
.input(z.object({ id: z.string(), removeChildren: z.boolean().optional() }))
.mutation(async ({ input, ctx }) => {
return ctx.sessionGroupModel.delete(input.id);
}),
updateSessionGroup: sessionProcedure
.input(
z.object({
id: z.string(),
value: insertSessionGroupSchema.partial(),
}),
)
.mutation(async ({ input, ctx }) => {
return ctx.sessionGroupModel.update(input.id, input.value);
}),
updateSessionGroupOrder: sessionProcedure
.input(
z.object({
sortMap: z.array(
z.object({
id: z.string(),
sort: z.number(),
}),
),
}),
)
.mutation(async ({ input, ctx }) => {
return ctx.sessionGroupModel.updateOrder(input.sortMap);
}),
});
export type SessionGroupRouter = typeof sessionGroupRouter;