umbot - v2.0.8
    Preparing search index...

    Class UsersData

    Модель для работы с пользовательскими данными. Предоставляет единый интерфейс для работы с данными пользователей во всех поддерживаемых платформах.

    UsersData

    Сохранение прогресса пользователя:

    class GameController extends BotController {
    public async action(intentName: string): Promise<void> {
    // Загрузка данных пользователя
    const userData = new UsersData();
    userData.userId = this.userId;

    // Если есть сохраненные данные - загружаем их
    if (await userData.getOne()) {
    const progress = userData.data.progress || 0;
    this.text = `Ваш текущий прогресс: ${progress}%`;
    } else {
    // Создаем новые данные
    userData.data = { progress: 0 };
    userData.meta = { firstVisit: new Date() };
    await userData.save();
    this.text = 'Добро пожаловать в игру!';
    }
    }
    }

    Работа с разными платформами:

    const userData = new UsersData();

    // Для Алисы
    userData.type = UsersData.T_ALISA;

    // Для Telegram
    userData.type = UsersData.T_TELEGRAM;

    // Автоматическое определение типа из mmApp
    userData.type = mmApp.appType === 'alisa'
    ? UsersData.T_ALISA
    : UsersData.T_TELEGRAM;

    Hierarchy (View Summary)

    Index

    Constructors

    • Создает экземпляр модели пользовательских данных. Инициализирует все поля значениями по умолчанию.

      Returns UsersData

      const userData = new UsersData();
      userData.userId = 'user123';
      userData.type = UsersData.T_TELEGRAM;

    Properties

    TABLE_NAME: "UsersData" = 'UsersData'

    Название таблицы для хранения данных пользователей.

    T_ALISA: 0

    Тип платформы: Яндекс.Алиса

    T_VK: 1

    Тип платформы: ВКонтакте

    T_TELEGRAM: 2

    Тип платформы: Telegram

    T_VIBER: 3

    Тип платформы: Viber

    T_MARUSIA: 4

    Тип платформы: Маруся

    T_SMART_APP: 5

    Тип платформы: Сбер SmartApp

    T_USER_APP: 512

    Тип платформы: Пользовательское приложение

    userId: null | string | number

    Уникальный идентификатор пользователя. Может быть строкой или числом в зависимости от платформы.

    "123456789" для Telegram, 123456789 для VK
    
    meta: any

    Метаданные пользователя. Может содержать любые дополнительные данные о пользователе, такие как:

    • Статистика использования
    • Временные метки
    • Настройки пользователя
    • Дополнительная информация

    При сохранении в БД автоматически преобразуется в JSON строку

    data: any

    Основные данные пользователя. Содержит основное состояние пользователя, например:

    • Прогресс в игре
    • Сохраненные настройки
    • История действий
    • Другие пользовательские данные

    При сохранении в БД автоматически преобразуется в JSON строку

    type: number

    Тип платформы пользователя. Определяет платформу, с которой работает пользователь.

    T_ALISA, T_VK, T_TELEGRAM и другие константы типов

    Возможные значения:

    • T_ALISA (0) - Яндекс.Алиса
    • T_VK (1) - ВКонтакте
    • T_TELEGRAM (2) - Telegram
    • T_VIBER (3) - Viber
    • T_MARUSIA (4) - Маруся
    • T_SMART_APP (5) - Сбер SmartApp
    • T_USER_APP (512) - Пользовательское приложение

    Контроллер для работы с базой данных Используется для выполнения запросов и управления данными

    // Получение данных через контроллер
    const result = await this.dbController.select(
    { where: { id: 1 } },
    true
    );
    queryData: QueryData

    Объект для хранения параметров запроса Содержит условия поиска и данные для обновления

    // Установка параметров запроса
    this.queryData.setQuery({ id: 1 });
    this.queryData.setData({ name: 'John' });
    startIndex: number = 0

    Начальный индекс для итерации по данным Используется при инициализации модели из массива

    state: Partial<TState> = {}

    Состояние модели Содержит текущие значения всех атрибутов

    // Установка значений
    this.state.username = 'John';
    this.state.age = 25;

    // Получение значений
    console.log(this.state.username);

    Methods

    • Возвращает название таблицы/файла для хранения данных.

      Returns string

      Название таблицы для хранения данных пользователей

    • Ищет одну запись в хранилище по текущим параметрам.

      Returns Promise<boolean>

      true, если запись найдена

      const userData = new UsersData();
      userData.userId = 'user123';
      if (await userData.getOne()) {
      console.log('Пользователь найден:', userData.data);
      } else {
      console.log('Пользователь не найден');
      }
    • Валидирует значения перед сохранением. Преобразует объекты meta и data в JSON при сохранении в БД.

      Returns void

      Если данные не прошли валидацию

      userData.meta = { lastVisit: new Date() };
      userData.data = { progress: 75 };
      userData.validate(); // meta и data будут преобразованы в JSON
    • Инициализирует модель данными. Преобразует JSON строки meta и data в объекты при загрузке из БД.

      Parameters

      • data: any

        Данные для инициализации

      Returns void

      • При парсинге data, ошибки игнорируются для обеспечения обратной совместимости
      • Парсинг происходит только если включено сохранение в БД (mmApp.isSaveDb === true)
      const userData = new UsersData();
      userData.init({
      userId: 'user123',
      meta: '{"lastVisit":"2024-03-20T12:00:00Z"}',
      data: '{"progress":75}',
      type: UsersData.T_TELEGRAM
      });
      console.log(userData.meta.lastVisit); // Date object
      console.log(userData.data.progress); // 75
    • Проверяет состояние подключения к базе данных

      Returns Promise<boolean>

      Promise - true если подключение активно

      const isConnected = await model.isConnected();
      if (isConnected) {
      // Выполнение операций с базой данных
      }
    • Экранирует специальные символы в строке

      Parameters

      • text: string | number

        Текст для экранирования

      Returns string

      Экранированная строка

      const safe = model.escapeString("O'Connor");
      
    • Определяет имя первичного ключа таблицы Ищет поле с меткой 'id' или 'ID'

      Returns null | string | number

      Имя первичного ключа или null

    • Выполняет поиск записи по первичному ключу

      Returns Promise<IModelRes>

      Promise с результатом запроса

      const result = await model.selectOne();
      if (result.status) {
      model.init(result.data);
      }
    • Сохраняет данные модели в базу данных Если запись существует - обновляет, иначе создает новую

      Parameters

      • isNew: boolean = false

        Флаг создания новой записи

      Returns Promise<any>

      Promise с результатом операции

      model.state.name = 'John';
      await model.save(); // Обновление существующей записи
      await model.save(true); // Создание новой записи
    • Обновляет существующую запись в базе данных

      Returns Promise<any>

      Promise с результатом операции

      model.state.name = 'John';
      await model.update();
    • Добавляет новую запись в базу данных

      Returns Promise<any>

      Promise с результатом операции

      model.state.name = 'John';
      await model.add();
    • Удаляет запись из базы данных

      Returns Promise<boolean>

      Promise - true если удаление успешно

      await model.remove();
      
    • Выполняет произвольный запрос к базе данных

      Parameters

      • where: any = '1'

        Условия запроса

      • isOne: boolean = false

        Флаг выборки одной записи

      Returns Promise<IModelRes>

      Promise с результатом запроса

      const result = await model.where(
      { age: { $gt: 18 } },
      false
      );
    • Выполняет запрос с выборкой одной записи

      Parameters

      • where: any = '1'

        Условия запроса

      Returns Promise<boolean>

      Promise - true если запись найдена

      const found = await model.whereOne({ id: 1 });
      if (found) {
      console.log('Record found');
      }
    • Выполняет произвольный запрос к базе данных

      Parameters

      • callback: TQueryCb

        Функция обратного вызова для выполнения запроса

      Returns any

      Результат выполнения запроса

      const result = await model.query(async (client, db) => {
      const collection = db.collection('users');
      return await collection.aggregate([
      { $match: { age: { $gt: 18 } } },
      { $group: { _id: '$city', count: { $sum: 1 } } }
      ]).toArray();
      });