lobe-chat

Форк
0
69 строк · 1.7 Кб
1
import { DeepPartial } from 'utility-types';
2

3
import { BaseModel } from '@/database/client/core';
4
import { LobeAgentConfig } from '@/types/agent';
5
import { uuid } from '@/utils/uuid';
6

7
import { DB_Settings, DB_User, DB_UserSchema } from '../schemas/user';
8

9
class _UserModel extends BaseModel {
10
  constructor() {
11
    super('users', DB_UserSchema);
12
  }
13
  // **************** Query *************** //
14

15
  getUser = async (): Promise<DB_User & { id: number }> => {
16
    const noUser = !(await this.table.count());
17

18
    if (noUser) await this.table.put({ uuid: uuid() });
19

20
    const list = (await this.table.toArray()) as (DB_User & { id: number })[];
21

22
    return list[0];
23
  };
24

25
  getAgentConfig = async () => {
26
    const user = await this.getUser();
27

28
    return user.settings?.defaultAgent?.config as LobeAgentConfig;
29
  };
30
  // **************** Create *************** //
31

32
  create = async (user: DB_User) => {
33
    return this.table.put(user);
34
  };
35

36
  // **************** Delete *************** //
37

38
  clear() {
39
    return this.table.clear();
40
  }
41

42
  // **************** Update *************** //
43

44
  async updateSettings(settings: DeepPartial<DB_Settings>) {
45
    const user = await this.getUser();
46

47
    return this.update(user.id, { settings: settings as any });
48
  }
49

50
  async resetSettings() {
51
    const user = await this.getUser();
52

53
    return this.update(user.id, { avatar: undefined, settings: undefined });
54
  }
55

56
  async updateAvatar(avatar: string) {
57
    const user = await this.getUser();
58

59
    return this.update(user.id, { avatar });
60
  }
61

62
  // **************** Helper *************** //
63

64
  private update = async (id: number, value: DeepPartial<DB_User>) => {
65
    return this.table.update(id, value);
66
  };
67
}
68

69
export const UserModel = new _UserModel();
70

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.