Создает экземпляр модели пользовательских данных. Предоставляет унифицированный интерфейс для хранения данных пользователя.
Контекст приложения
Protected_appContextКонтекст приложения.
Объект для хранения параметров запроса. Содержит условия поиска и данные для обновления
Начальный индекс для итерации по данным. Используется при инициализации модели из массива
Состояние модели. Содержит текущие значения всех атрибутов
Static ReadonlyTABLE_NAMEНазвание таблицы для хранения данных пользователей.
Метаданные пользователя. Может содержать любые дополнительные данные о пользователе, такие как:
Устанавливает метаданные пользователя.
Метаданные пользователя
Тип платформы пользователя. Определяет платформу, с которой работает пользователь.
Тип платформы пользователя. Определяет платформу, с которой работает пользователь.
Устанавливает уникальный идентификатор пользователя.
Идентификатор пользователя
Возвращает описания атрибутов модели. Используется для отображения понятных названий полей.
Описания атрибутов
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('Пользователь не найден');
}
Инициализирует модель данными. Преобразует 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
Модель для работы с пользовательскими данными. Предоставляет единый интерфейс для работы с данными пользователей во всех поддерживаемых платформах.
Основные возможности:
Example
Сохранение прогресса пользователя (через addCommand — колбэк фреймворк ожидает):
Example
Работа с разными платформами: