Метаданные пользователя. Может содержать любые дополнительные данные о пользователе, такие как:
Устанавливает метаданные пользователя.
Метаданные пользователя
Тип платформы пользователя. Определяет платформу, с которой работает пользователь.
Тип платформы пользователя. Определяет платформу, с которой работает пользователь.
Устанавливает уникальный идентификатор пользователя.
Идентификатор пользователя
Создает экземпляр модели пользовательских данных. Предоставляет унифицированный интерфейс для хранения данных пользователя.
Контекст приложения
Возвращает описания атрибутов модели. Используется для отображения понятных названий полей.
Описания атрибутов
ProtectedgetIdПервичный ключ таблицы — userId.
Ищет одну запись в хранилище по первичному ключу userId (platform/meta в поиске не участвуют — фильтруйте результат сами при необходимости).
true, если запись найдена
const userData = new UsersData(appContext);
userData.userId = 'user123';
if (await userData.getOne()) {
// data может быть string | Record<string,unknown> | null | undefined:
// сужаем тип перед чтением полей
const progress = (userData.data as Record<string, unknown>)?.progress;
console.log('Пользователь найден, прогресс:', progress);
} else {
console.log('Пользователь не найден');
}
ProtectedgetUniqueKeysuserId уникален только в пределах платформы: пользователь Telegram 42 и пользователь VK 42 — разные люди, поэтому платформа входит в ключ записи.
Поле платформы как часть ключа записи
Инициализирует модель данными. Преобразует JSON строки meta и data в объекты при загрузке из БД.
const userData = new UsersData(appContext);
userData.init({
userId: 'user123',
meta: '{"lastVisit":"2024-03-20T12:00:00Z"}',
data: '{"progress":75}',
platform: T_TELEGRAM
});
// init() распарсила JSON-строки meta и data в объекты
console.log((userData.meta as { lastVisit?: string }).lastVisit); // строка '2024-03-20T12:00:00Z' (JSON.parse не создаёт Date)
console.log(userData.data.progress); // 75
Выполняет произвольный запрос к базе данных
Типы client/db зависят от подключённого адаптера БД —
для MongoAdapter это MongoClient и Db из драйвера mongodb.
Для FileAdapter _query не реализован — метод вернёт null.
Функция обратного вызова для выполнения запроса
Результат выполнения запроса
import type { MongoClient, Db } from 'mongodb';
const result = await model.query(async (client: MongoClient, db: Db) => {
const collection = db.collection('users');
return await collection.aggregate([
{ $match: { age: { $gt: 18 } } },
{ $group: { _id: '$city', count: { $sum: 1 } } }
]).toArray();
});
Сохраняет данные модели в базу данных Если запись существует - обновляет, иначе создает новую
Флаг создания новой записи
Promise с результатом операции
Выполняет поиск записи по первичному ключу
Promise с результатом запроса
Возвращает название таблицы/файла для хранения данных.
Название таблицы для хранения данных пользователей
Валидирует значения перед сохранением. Преобразует объекты meta и data в JSON при сохранении в БД.
Выполняет произвольный запрос к базе данных
Условия запроса
Флаг выборки одной записи
Promise с результатом запроса
Выполняет запрос с выборкой одной записи
Условия запроса
Promise
Protected_appContextКонтекст приложения.
Объект для хранения параметров запроса. Содержит условия поиска и данные для обновления
Начальный индекс для итерации по данным. Используется при инициализации модели из массива
Состояние модели. Содержит текущие значения всех атрибутов
Static ReadonlyTABLE_NAMEНазвание таблицы для хранения данных пользователей.
Модель для работы с пользовательскими данными. Предоставляет единый интерфейс для работы с данными пользователей во всех поддерживаемых платформах.
Основные возможности:
Example
Сохранение прогресса пользователя (через addCommand — колбэк фреймворк ожидает):
Example
Работа с разными платформами: