umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
89 lines (88 loc) • 3.4 kB
TypeScript
/**
* Модуль для работы с данными запросов к базе данных
*
* Предоставляет интерфейсы и классы для:
* - Формирования параметров запросов
* - Парсинга строк запросов
* - Управления данными для вставки и обновления
*/
import { IModelRules } from '../interface/IModel';
/**
* Интерфейс для хранения данных запроса к базе данных.
* Позволяет задавать произвольные поля и их значения
*
* Значения могут быть простыми (строка, число) или объектами с операторами (например, $gt, $in). Формат условий зависит от реализации адаптера — фреймворк не навязывает конкретный диалект.
*
* @example
* ```ts
* const query: IQueryData = {
* id: 1, // Поиск по id = 1
* name: 'John', // Поиск по name = 'John'
* age: { $gt: 18 }, // Поиск по age > 18
* city: { $in: ['Moscow', 'St. Petersburg'] } // Поиск по city в списке
* };
* ```
*/
export interface IQueryData {
/**
* Произвольные поля запроса
* Ключ - название поля в базе данных
* Значение - условие для поиска или значение для обновления
*
* @example
* ```ts
* {
* 'user_id': 123, // Точное совпадение
* 'status': 'active', // Точное совпадение
* 'age': { $gt: 18 }, // Больше чем
* 'tags': { $in: ['a', 'b'] } // В списке значений
* }
* ```
*/
[key: string]: unknown | string | number;
}
/**
* Тип для ключа
*/
export type TKey = string | number | null;
/**
* Структура запроса к базе данных.
*
* Используется всеми методами адаптера (`_select`, `_insert` и др.).
*/
export interface IQuery {
/**
* Условие фильтрации (для SELECT/UPDATE/DELETE)
*/
query: IQueryData | null;
/**
* Данные для вставки или обновления
*/
data: IQueryData | null;
/**
* Название таблиц
*/
tableName: string;
/**
* Имя поля, используемого как первичный ключ (может быть null)
*/
primaryKeyName: TKey;
/**
* Правила валидации модели
*/
rules: IModelRules[];
}
/**
* Парсит строку запроса в объект IQueryData
* Поддерживает формат `field=value` с возможностью экранирования
*
* @example
* ```ts
* const query = QueryData.getQueryData('`id`=1 `name`="John Doe"');
* // Результат: { id: 1, name: 'John Doe' }
* ```
*
* @param str - Строка запроса для парсинга
* @returns Объект с параметрами запроса или null
*/
export declare function getQueryData(str: string): IQueryData | null;