Appearance
Таб импорта в драйверах
Суть импорта драйвера заключается в том, чтобы загрузить файл .csv, строго оределенного формата для каждого драйвера, распарсить информацию, заключенную в нем, и, на основе этой информации, создать папки и в ней же объекты. Данные объекты, уже на этапе создания привязываются в driverLinks к драйверу в который импортируются. Также действует механизм обновления уже существующих объектов. Обновляться объекты могут, либо id, с обязательным условием, что объект должен находиться в том же ПРОЕКТЕ, либо по name + description, с обязательным условием, что объект находиться в папке с тем же названием что указанно в импортируемом файле. По части создания/обновления объектов, поведение всех видов драйвер-импортов одинаковы. Реализована данная унификация через паттерн стратегий.
Интерфейс стратегии
ts
export interface IImportStrategy {
readonly objectType: EObjectType;
[key: string]: any;
// Фильтрация валидных строк CSV
filterValidRows(data: any[]): any[];
// Маппинг CSV в объект для создания/обновления
mapCSVToObject(params: {
csv: ICSVObject; // Конкретная строка из таблицы, преобразованная в объект
parentId?: string; // id ПАПКИ в которой мы создаем/обновляем объекты
projectId?: string; // id ПРОЕКТА в котором мы создаем объекты
position?: number; // Позиция в дереве. Если ее не указать при создании - ничего не увидим
additionalInfo?: Record<string, any>; // Данные которые находяться вне таблицы. Данные которые нужны для всех объектов. Пример: IP, PORT
currentObject: ConcreteObjectInstance & IHasDriverSettings; // Текущий драйвер
tags: { name: any; id: any }[]; // Теги прошедшие парс
}): any | null;
// Извлечение дополнительной информации из заголовков CSV
extractAdditionalInfo(lines: string[][]): Record<string, any>;
// Опциональные методы - каждый драйвер реализует только то, что нужно
processTags?(data: any[]): Promise<string[]>;
updateDriverData?(params: {
selectedFile: any;
additionalInfo: Record<string, any>;
currentObject: any;
}): Promise<Record<string, any>>;
getMandatoryKeys?(): string[];
}