@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.
74 lines (58 loc) • 2.3 kB
text/typescript
/* eslint-disable sort-keys-fix/sort-keys-fix */
import { LobeChatPluginManifest } from '@lobehub/chat-plugin-sdk';
import { boolean, jsonb, pgTable, primaryKey, text } from 'drizzle-orm/pg-core';
import { DEFAULT_PREFERENCE } from '@/const/user';
import { CustomPluginParams } from '@/types/tool/plugin';
import { timestamps, timestamptz } from './_helpers';
export const users = pgTable('users', {
id: text('id').primaryKey().notNull(),
username: text('username').unique(),
email: text('email'),
avatar: text('avatar'),
phone: text('phone'),
firstName: text('first_name'),
lastName: text('last_name'),
fullName: text('full_name'),
isOnboarded: boolean('is_onboarded').default(false),
// Time user was created in Clerk
clerkCreatedAt: timestamptz('clerk_created_at'),
// Required by nextauth, all null allowed
emailVerifiedAt: timestamptz('email_verified_at'),
preference: jsonb('preference').$defaultFn(() => DEFAULT_PREFERENCE),
...timestamps,
});
export type NewUser = typeof users.$inferInsert;
export type UserItem = typeof users.$inferSelect;
export const userSettings = pgTable('user_settings', {
id: text('id')
.references(() => users.id, { onDelete: 'cascade' })
.primaryKey(),
tts: jsonb('tts'),
hotkey: jsonb('hotkey'),
keyVaults: text('key_vaults'),
general: jsonb('general'),
languageModel: jsonb('language_model'),
systemAgent: jsonb('system_agent'),
defaultAgent: jsonb('default_agent'),
tool: jsonb('tool'),
});
export type UserSettingsItem = typeof userSettings.$inferSelect;
export const userInstalledPlugins = pgTable(
'user_installed_plugins',
{
userId: text('user_id')
.references(() => users.id, { onDelete: 'cascade' })
.notNull(),
identifier: text('identifier').notNull(),
type: text('type', { enum: ['plugin', 'customPlugin'] }).notNull(),
manifest: jsonb('manifest').$type<LobeChatPluginManifest>(),
settings: jsonb('settings'),
customParams: jsonb('custom_params').$type<CustomPluginParams>(),
...timestamps,
},
(self) => ({
id: primaryKey({ columns: [self.userId, self.identifier] }),
}),
);
export type NewInstalledPlugin = typeof userInstalledPlugins.$inferInsert;
export type InstalledPluginItem = typeof userInstalledPlugins.$inferSelect;