# 🧩 Архитектура управления расширениями

## Общая идея

Система управления расширениями в проекте построена на разделении двух источников данных и их объединении на уровне сервиса:

- AppRegistry — каталог всех доступных в системе расширений (локально, на уровне кода);

- База данных — информация об установленных пользователем расширениях и их конфигурации.

## Источники данных

📦 AppRegistry (~/extensions/extensions.registry.ts)
Это статический реестр всех расширений, которые могут существовать в системе.
Каждое расширение здесь описано через интерфейс IRegistryExtension.
Это как маркетплейс или каталог приложений: они ещё не установлены, но уже доступны.

### Примеры данных:

- schema — Zod-схема для конфигурации;
- title, description, image, tags — мета-описание;
- available — логическое поле;
- readme, instructions — документация (часто асинхронно подгружаемая).

## 🗃 Установленные расширения (из БД)

База данных содержит список расширений, которые были установлены пользователем.

Каждое расширение хранится с данными:

- config — пользовательская конфигурация;
- enabled — включено или нет;
- created_at, updated_at — временные метки;
- name — ключ, по которому связывается с AppRegistry.

## Логика объединения данных

Когда нужно получить информацию об одном или нескольких расширениях (например, в GraphQL API), используется сервис AppManagementService, который выполняет агрегацию данных.

### 🔧 Процесс:

#### Загрузка из AppRegistry:

Через extractAppRegistryData() берутся все доступные расширения.

Каждое расширение дополняется: schema (из Zod → JSON), readme, instructions.

#### Загрузка из базы:

Метод getAppList() возвращает список установленных расширений.

#### Сборка DTO:

Метод buildAppData() объединяет данные из реестра и базы:

Данные из AppRegistry: описание, схема, инструкции и т.д.

Данные из базы: включено ли, конфиг, временные метки.

Возвращается ExtensionDTO — итоговая структура.

#### 📦 ExtensionDTO

Это объект, который уходит наружу (в GraphQL).
Он содержит одновременно:

мета-данные из AppRegistry — описание, теги, инструкции;

статус из БД — установлено ли, включено ли, какие настройки.

## Принцип

AppRegistry — это каталог всех потенциальных расширений, включая документацию и описание.

База данных — это реальные инстансы установленных расширений, с пользовательской конфигурацией.

AppManagementService — это агрегатор, который объединяет оба слоя в единое представление.
