UNPKG

umbot

Version:

Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф

139 lines (138 loc) 4.44 kB
/** * Модуль базовых интерфейсов для моделей данных * * Определяет основные типы и интерфейсы для: * - Валидации данных * - Обработки результатов запросов * - Работы с правилами моделей */ /** * Типы данных для валидации полей модели * * @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>;