umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
132 lines (131 loc) • 6.47 kB
TypeScript
import { Base } from '../Base/Base';
import { IQueryData, IQuery, IModelRes, IDatabaseInfo } from '../../../index';
/**
* Тип для данных, которые хранятся в файловой базе данных
*/
export type TFileData = Record<string, Record<string, unknown>>;
/**
* Интерфейс для хранения информации о файле
*
* @interface IFileInfo
*/
export interface IDBFileInfo {
/**
* Содержимое файла в виде строки
*/
data?: TFileData;
/**
* Версия файла.
* Используется время последнего изменения файла в миллисекундах
*/
version: number;
/**
* Идентификатор тайм-аута для легкого сохранения
*/
timeOutId?: ReturnType<typeof setTimeout> | null;
/**
* Идентификатор тайм-аута для строгого сохранения. Необходим для случаев, когда идет постоянная нагрузка на сервер, и нет возможности сохранить информацию в файл.
*/
forceTimeOutId?: ReturnType<typeof setTimeout> | null;
/**
* Определяет было ли произведено чтение файла или нет
*/
isFileRead: boolean;
}
/**
* Интерфейс для хранения всех данных из файловой базы данных
*/
export interface IFileDbInfo extends IDatabaseInfo {
[tableName: string]: IDBFileInfo | undefined;
}
/**
* Тип для кэширования данных из файлов
* Ключ - путь к файлу, значение - информация о файле
*/
export type IDBFileData = {
[key: string]: IDBFileInfo | undefined;
};
/**
* Адаптер для файловой базы данных.
* Стоит использовать только для быстрого старта, либо для приложений, у которых объем базы не будет превышать 250мб.
*/
export declare class FileAdapter extends Base<IFileDbInfo> {
#private;
/**
* Формат базы данных
*/
dbFormat: string;
constructor();
connect(): Promise<boolean> | boolean;
/**
* Сохранение всех данные в базу
* @param tableName Имя таблицы
* @param data Сохраняемые данные
*/
setCachedFileData(tableName: string, data: IDBFileInfo | undefined): void;
/**
* Получение всех данных из базы
* @param tableName Имя таблицы
*/
getCachedFileData(tableName: string): IDBFileInfo;
/**
* Выполняет UPDATE-запрос.
* @param updateData Дополнительная информация для запроса. Содержит сам запроса, а также название таблицы и прочие данные.
*/
_update(updateData: IQuery): boolean;
/**
* Выполняет INSERT-запрос.
* @param insertData Дополнительная информация для запроса. Содержит сам запроса, а также название таблицы и прочие данные.
*/
_insert(insertData: IQuery): boolean;
/**
* Выполняет DELETE-запрос.
* @param removeData Дополнительная информация для запроса. Содержит сам запроса, а также название таблицы и прочие данные.
*/
_remove(removeData: IQuery): boolean;
/**
* Выполняет SELECT-запрос.
*
* ⚠️ Файловый адаптер поддерживает только точное совпадение значений. Условия с операторами (например, $gt, $in) игнорируются.
*
* @param selectData Дополнительная информация для запроса. Содержит информацию о таблице и структуре.
* @param where Сам запрос
* @param isOne Определяет нужно ли вернуть только 1 найденную запись, либо отдать все доступные данные.
*/
_select(selectData: IQuery, where: IQueryData | null, isOne?: boolean): IModelRes;
/**
* Загружает данные таблицы из JSON-файла и кэширует их в памяти.
*
* - При первом обращении читает файл `${tableName}.json` из директории `appConfig.json`.
* - Данные кэшируются с привязкой к времени последнего изменения файла (mtimeMs).
* - Если файл не изменился, возвращаются кэшированные данные.
* - В случае ошибки парсинга делается повторная попытка (защита от гонок записи/чтения).
*
* Формат данных в файле:
* ```json
* {
* "user123": { "name": "Alice", "age": 30 },
* "user456": { "name": "Bob", "age": 25 }
* }
* ```
* где ключ — значение первичного ключа.
* В случае если файла нет, вернутся пустые данные
* @param tableName Имя таблицы (используется как имя файла)
*/
getFileData(tableName: string): TFileData;
/**
* Проверяет, установлено ли соединение с БД.
*/
isConnected(): boolean;
/**
* Закрывает все подключения к файловой БД.
* Все процессы завершаются, и происходит сохранение данных в файл.
*/
destroy(): void;
/**
* Закрывает подключение к определенной таблице.
* При закрытии, все хранящиеся в памяти данные сохраняются в файл.
* @param tableName
*/
close(tableName: string): void;
}