1
import { DeepPartial } from 'utility-types';
3
import { BaseModel } from '@/database/client/core';
4
import { LobeAgentConfig } from '@/types/agent';
5
import { uuid } from '@/utils/uuid';
7
import { DB_Settings, DB_User, DB_UserSchema } from '../schemas/user';
9
class _UserModel extends BaseModel {
11
super('users', DB_UserSchema);
15
getUser = async (): Promise<DB_User & { id: number }> => {
16
const noUser = !(await this.table.count());
18
if (noUser) await this.table.put({ uuid: uuid() });
20
const list = (await this.table.toArray()) as (DB_User & { id: number })[];
25
getAgentConfig = async () => {
26
const user = await this.getUser();
28
return user.settings?.defaultAgent?.config as LobeAgentConfig;
32
create = async (user: DB_User) => {
33
return this.table.put(user);
39
return this.table.clear();
44
async updateSettings(settings: DeepPartial<DB_Settings>) {
45
const user = await this.getUser();
47
return this.update(user.id, { settings: settings as any });
50
async resetSettings() {
51
const user = await this.getUser();
53
return this.update(user.id, { avatar: undefined, settings: undefined });
56
async updateAvatar(avatar: string) {
57
const user = await this.getUser();
59
return this.update(user.id, { avatar });
64
private update = async (id: number, value: DeepPartial<DB_User>) => {
65
return this.table.update(id, value);
69
export const UserModel = new _UserModel();