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.

80 lines (63 loc) 2.35 kB
/* eslint-disable sort-keys-fix/sort-keys-fix */ import { boolean, integer, pgTable, text, uniqueIndex, varchar } from 'drizzle-orm/pg-core'; import { createInsertSchema } from 'drizzle-zod'; import { idGenerator, randomSlug } from '@/database/utils/idGenerator'; import { timestamps } from './_helpers'; import { users } from './user'; // ======= sessionGroups ======= // export const sessionGroups = pgTable( 'session_groups', { id: text('id') .$defaultFn(() => idGenerator('sessionGroups')) .primaryKey(), name: text('name').notNull(), sort: integer('sort'), userId: text('user_id') .references(() => users.id, { onDelete: 'cascade' }) .notNull(), clientId: text('client_id'), ...timestamps, }, (table) => ({ clientIdUnique: uniqueIndex('session_groups_client_id_user_id_unique').on( table.clientId, table.userId, ), }), ); export const insertSessionGroupSchema = createInsertSchema(sessionGroups); export type NewSessionGroup = typeof sessionGroups.$inferInsert; export type SessionGroupItem = typeof sessionGroups.$inferSelect; // ======= sessions ======= // export const sessions = pgTable( 'sessions', { id: text('id') .$defaultFn(() => idGenerator('sessions')) .primaryKey(), slug: varchar('slug', { length: 100 }) .notNull() .$defaultFn(() => randomSlug()), title: text('title'), description: text('description'), avatar: text('avatar'), backgroundColor: text('background_color'), type: text('type', { enum: ['agent', 'group'] }).default('agent'), userId: text('user_id') .references(() => users.id, { onDelete: 'cascade' }) .notNull(), groupId: text('group_id').references(() => sessionGroups.id, { onDelete: 'set null' }), clientId: text('client_id'), pinned: boolean('pinned').default(false), ...timestamps, }, (t) => ({ slugUserIdUnique: uniqueIndex('slug_user_id_unique').on(t.slug, t.userId), clientIdUnique: uniqueIndex('sessions_client_id_user_id_unique').on(t.clientId, t.userId), }), ); export const insertSessionSchema = createInsertSchema(sessions); // export const selectSessionSchema = createSelectSchema(sessions); export type NewSession = typeof sessions.$inferInsert; export type SessionItem = typeof sessions.$inferSelect;