UNPKG

umbot

Version:

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

132 lines (131 loc) 6.47 kB
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; }