# Коннектор "Денвик"

<p class="callout success">Реализовано</p>

#### Задача

Обеспечить создание БД и подключение к FastBoard через преднастроенный сценарий интеграции с Денвик.

##### Сценарий работы в Экстракторе:

1. <span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">В интерфейсе пользователь выбирает FastBoard как приёмник данных.</span>
2. <span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">После выбора FastBoard пользователь вставляет ссылку на бэкенд </span><span lang="EN-US" style="mso-bidi-font-size: 12.0pt; line-height: 150%; mso-ansi-language: EN-US;">FastBoard</span><span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">, запускающую процесс подключения. Формат ссылки – адрес вида </span><span lang="EN-US" style="mso-bidi-font-size: 12.0pt; line-height: 150%; mso-ansi-language: EN-US;">fb</span><span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">-</span><span lang="EN-US" style="mso-bidi-font-size: 12.0pt; line-height: 150%; mso-ansi-language: EN-US;">back</span><span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">.</span><span lang="EN-US" style="mso-bidi-font-size: 12.0pt; line-height: 150%; mso-ansi-language: EN-US;">domain</span><span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">.</span><span lang="EN-US" style="mso-bidi-font-size: 12.0pt; line-height: 150%; mso-ansi-language: EN-US;">ru</span>
3. <span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">Кроме ссылки пользователь должен указать свои логин и пароль, а также название коннектора в </span><span lang="EN-US" style="mso-bidi-font-size: 12.0pt; line-height: 150%; mso-ansi-language: EN-US;">FastBoard</span><span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">.</span>
4. <span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">Экстрактор дописывает к адресу путь к </span><span lang="EN-US" style="mso-bidi-font-size: 12.0pt; line-height: 150%; mso-ansi-language: EN-US;">API</span><span style="mso-bidi-font-size: 12.0pt; line-height: 150%;"> и выполняет </span><span lang="EN-US" style="mso-bidi-font-size: 12.0pt; line-height: 150%; mso-ansi-language: EN-US;">POST</span><span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">-запрос на указанный URL с указанием названия коннектора в системе </span><span lang="EN-US" style="mso-bidi-font-size: 12.0pt; line-height: 150%; mso-ansi-language: EN-US;">FastBoard</span><span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">. Данный коннектор будет связывать создаваемую БД с системой, по введенному названию его можно будет найти внутри </span><span lang="EN-US" style="mso-bidi-font-size: 12.0pt; line-height: 150%; mso-ansi-language: EN-US;">FastBoard</span><span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">.</span>
5. <span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">В ответ приходит JSON, содержащий параметры подключения:</span>
6. <span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">Выполняется расшифровка ответа.</span>
7. <span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">Поля подключения к ClickHouse заполняются автоматически.</span>
8. <span style="mso-bidi-font-size: 12.0pt; line-height: 150%;">В результате формируются:</span>
    - БД внутри<span lang="EN-US" style="mso-ansi-language: EN-US;"> ClickHouse</span> <span lang="EN-US" style="mso-ansi-language: EN-US;">FastBoard</span>,
    - коннектор <span lang="EN-US" style="mso-ansi-language: EN-US;">FastBoard</span> к созданной БД
9. Пользователь может обновлять данные БД в Экстракторе, работать с данными через коннектор в <span lang="EN-US" style="mso-ansi-language: EN-US;">FastBoard</span>

#### Требования:

- (DevOps) В отдельном контейнере поднять инстанс КХ
- (DevOps) К этому контейнеру создать права (логин и пароль) на создание БД, дать параметры удаленного доступа (хост и порт посложнее)
- (Backend) Ручка на бэкенде должна быть настроена на инстанс в контейнере

#### Решение

Денвик использует Экстратор 1С для создания подключений к БД. Они могут сами создавать таблицы и выгружать туда данные из 1С. Со стороны FastBoard требуется:

- Создать БД и пользователя в КХ по запросу
- Передать данные для подключения в Экстрактор
- Создать коннектор к новой БД в FastBoard

[![Денвик.png](https://book.winsolutions.ru/uploads/images/gallery/2025-05/scaled-1680-/denvik.png)](https://book.winsolutions.ru/uploads/images/gallery/2025-05/denvik.png)

##### Запрос

В Экстракторе пользователь вводит ссылку на стенд FastBoard, на котором будет создана БД и коннектор к ней. В итоге Экстрактор формирует запрос на создание БД, в котором указан API для создания подключения, например

> https://fastbord-back-front.fb-dev.winsolutions.ru//api/v1/db/create

При этом пользователь передаёт свои логин и пароль на FB, для выдачи доступа. Дальнейшее подключение к БД будет от имени 1С (создаваемый пользователь для базы), а не конкретного пользователя FB.

Вызывается метод со стороны FastBoard: запускаются создание БД, устанавливается полный доступ пользователя к новой БД.

##### Последовательность вызовов

1\. Вызов /api/v1/db/create (или другое название ручки для создания БД)

Метод: POST

Создает ClickHouse-базу данных с уникальным именем и пользователем. Возвращает все необходимые параметры для подключения (см. пример ответа в Экстрактор 1С).

Для каждой новой БД необходимо создавать уникального пользователя и выдавать ему пароль. Эти данные передаются в Экстрактор вместе с данными для подключения.

<p class="callout warning">К названию БД необходимо добавлять префикс (например, dnvc\_)</p>

2\. Вызов /api/v2/source

Метод: POST

Пример запроса:

```json
{
  "name": "string",
  "driver": "clickHouse",
  "database": "string",
  "host": "string",
  "port": xxxx,
  "user": "string",
  "password": "string"
}
```

Все параметры для этого запроса (кроме name) берутся из создания БД и данных пользователя

##### Ответ

Успешный ответ (созданная БД) шифруется и передаётся в Экстрактор. Передаются следующие данные:

- Сервер
- Порт
- Пользователь
- Пароль
- Название БД

Пример ответа в Экстрактор 1С:

```json
{
  "db_name": "string",
  "host": "IP",
  "port": "xxxx",
  "user": "string",
  "password": "string"
}
```