umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
139 lines (138 loc) • 4.44 kB
TypeScript
/**
* Модуль базовых интерфейсов для моделей данных
*
* Определяет основные типы и интерфейсы для:
* - Валидации данных
* - Обработки результатов запросов
* - Работы с правилами моделей
*/
/**
* Типы данных для валидации полей модели
*
* @example
* ```ts
* const type: TModelRulesType = 'string'; // для текстовых полей
* const type: TModelRulesType = 'integer'; // для целых чисел
* const type: TModelRulesType = 'date'; // для дат
* const type: TModelRulesType = 'bool'; // для булевых значений
* ```
*/
export type TModelRulesType = 'text' | 'string' | 'integer' | 'date' | 'int' | 'bool';
export interface IDataValue {
[key: string]: unknown;
}
/**
* Интерфейс для описания правил валидации полей модели
*
* @example
* ```ts
* const rules: IModelRules = {
* name: ['username', 'nickname'],
* type: 'string',
* max: 50
* };
*
* const dateRule: IModelRules = {
* name: ['birthDate', 'createdAt'],
* type: 'date'
* };
* ```
*/
export interface IModelRules {
/**
* Массив названий полей, к которым применяются правила
*
* @example
* ```ts
* name: ['username', 'email'] // правила применяются к полям username и email
* ```
*/
name: string[];
/**
* Тип данных поля.
* Определяет формат и правила валидации
*
* @example
* ```ts
* type: 'string' // текстовое поле
* type: 'integer' // целочисленное поле
* ```
*/
type: TModelRulesType;
/**
* Максимальное значение для поля.
* Используется для ограничения длины строковых полей
*
* @example
* ```ts
* max: 100 // максимальная длина строки 100 символов
* ```
*/
max?: number;
}
/**
* Интерфейс для описания результата выполнения операции с моделью
*
* @example
* ```ts
* // Успешный результат
* const success: IModelRes = {
* status: true,
* data: { id: 1, name: 'John' }
* };
*
* // Результат с ошибкой
* const error: IModelRes = {
* status: false,
* error: 'User not found'
* };
* ```
*/
export interface IModelRes<TModelData = IDataValue> {
/**
* Статус выполнения операции
* true - операция выполнена успешно
* false - произошла ошибка
*/
status: boolean;
/**
* Сообщение об ошибке
* Присутствует только при status = false
*
* @example
* ```ts
* error: 'Invalid input data'
* error: 'Database connection failed'
* ```
*/
error?: string | Error;
/**
* Результат выполнения операции.
* Присутствует только при status = true.
* Может содержать любые данные в зависимости от операции
*
* @example
* ```ts
* data: { id: 1, name: 'John' } // результат запроса пользователя
* data: [1, 2, 3] // список идентификаторов
* ```
*/
data?: TModelData | TModelData[];
}
/**
* Тип функции обратного вызова для выполнения запросов к базе данных
*
* @example
* ```ts
* const queryCallback: TQueryCb = async (client, db) => {
* const collection = db.collection('users');
* const result = await collection.find({}).toArray();
* return { status: true, data: result };
* };
* ```
*
* @param client - Клиент MongoDB для выполнения запросов
* @param db - Экземпляр базы данных MongoDB
* @returns Promise с результатом выполнения запроса
*/
export type TQueryCb<TClient = unknown, TDB = unknown> = (client: TClient, db: TDB) => Promise<IModelRes>;