Skip to main content

v1.13.0

Авторизация 

Изменена зависимость регистра в логине пользователя

Теперь логин при авторизации будет приводиться к единому виду. Например: test, Test, TEST — все значения нормализуются к одному значению. Это уменьшает процент "ложных" отказов при входе из-за раскладки/копипаста/привычек набора.

Если в базе исторически существовали учётные записи, отличающиеся только регистром (например, test и Test), система автоматически переименует одну из записей, добавив префикс d1_, d2_ и т.п., чтобы обе учётки остались различимыми и доступными.

Проверка сложности пароля при регистрации пользователя

При регистрации/смене пароля включена политика надёжности: система оценивает пароль и блокирует варианты, которые не проходят минимальный порог безопасности.

Базовые требования: от 8 символов, наличие строчных и прописных букв, а также символов (спецзнаки). При несоответствии правилам возвращается ошибка — пароль не принимается. 

Менеджер проектов

Создание автодокументации по проекту 

Добавлена функция, которая формирует единый файл-отчёт по проекту. Документ собирается из ключевых частей проекта и даёт "снимок" конфигурации: страницы и их параметры/видимость, визуализации, источники данных, модели данных, ограничения RLS и скрипт загрузки. Удобно для ревью, передачи проекта, аудита и быстрого погружения без ручного обхода настроек.

Документ собирается по разделам (в фиксированном порядке), чтобы его можно было читать как техпаспорт проекта

  • Страницы проекта — список страниц, размеры, фон (ссылка), видимость (скрыто/открыто), ограничения на уровне страницы (PLS) и ID.
  • Визуализации проекта — по каждой странице отдельная таблица с виджетами: тип, название, координаты/слой (Z), размеры, видимость, блокировка, ID, модель данных и итоговый SQL (или отметка про виртуальные дан

  • Источники данных — список источников, подключённые таблицы, статус задания на обновление (активно/неактивно) и расписание (cron-строка).

  • Модели данных — связи внутри каждой модели: таблица/поле → тип join → таблица/поле.

  • Ограничения RLS — правила, субъект (пользователь/группа), на какие модели распространяется, переменные/значения и статус (активно/неактивно).

  • Скрипт загрузки — фиксируется текущая логика загрузки данных проекта.

Доступ к автодокументации открыт только ролям Админ и Разработчик.

Описание версии проекта

В версии проекта появилось поле для короткого описания изменений — чтобы история была читаемой не только по дате/автору, но и по смыслу. Комментарий отображается в списке версий и помогает быстрее понять, что именно менялось при откате/анализе изменений. 

Редактировать/создавать комментарий может только автор изменений (кнопка доступна только ему). Если автор у версии не указан — возможность оставить комментарий доступна пользователям с правами управления проектом. Текст показывается в строке ограниченно, полный — во всплывающей подсказке. 

Уведомление об окончании лицензии

При входе в систему показывается предупреждение, если до окончания лицензии (в т.ч. "на публикации") осталось меньше 15 дней. Это снижает риск внезапной остановки работы из-за просроченного ключа и заранее направляет пользователя к правильному действию (продление/обращение к администратору). 

Дополнительно в карточке/ячейке пользователя отображается роль и количество дней до окончания, а при критическом сроке появляется заметный индикатор с тултипом. 

Редирект скопированного/перемещенного проекта в указанный поток

После копирования или перемещения система автоматически перенаправляет пользователя в указанный поток.

Конструктор дашбордов 

Экспорт проекта в PDF

Добавлена выгрузка проекта в единый PDF-файл (в том числе из нескольких страниц). Система формирует PDF последовательно по страницам проекта, сохраняя реальные размеры каждой страницы

Для контроля источника выгрузки на первой странице файла фиксируются логин пользователя и дата/время экспорта (водяным знаком). Готовый файл сохраняется на устройство, а при необходимости может быть отправлен на указанную почту.

Опция отправки на почту доступна для пользователя, чей email внесен в сведения об учетной записи. 

Режим презентации при просмотре проекта

Добавлен режим презентации для просмотра дашборда в формате "слайдов" — с полноэкранным отображением и автопереключением страниц.

  • Запуск/остановка: на верхней панели справа (рядом с профилем/чатом) доступна кнопка Play для запуска и Stop для завершения режима.

  • Настройка интервала: при запуске задаётся время между переходами в секундах (по умолчанию 60 сек). Интервал один общий для всего показа — нельзя задавать разное время для разных страниц.

  • Последовательность страниц: страницы переключаются строго по порядку в проекте. Управлять сценарием показа можно только перестановкой страниц в структуре проекта.

  • Логика таймера: при переходе на другую страницу (включая ручной) отсчёт таймера начинается заново, чтобы переключения были предсказуемыми.

  • Доступность: режим доступен в том числе для роли Зритель и при активации переводит просмотр в полноэкранный режим.

Авторефреш страницы 

Добавлено автообновление данных без перезагрузки UI: по таймеру выполняется запрос данных через стандартный запрос get_data. Интервал задаётся в секундах, минимально допустимый — 60 сек (если указать меньше — значение автоматически поднимается до 60). 

Автообновление синхронизировано с пользовательскими действиями: при любом ручном обновлении данных (например, фильтрация/смена параметров) таймер сбрасывается, чтобы не накладывать запросы друг на друга.

Диспетчер данных

Коннектор к Битрикс 

Добавлен источник Bitrix24, чтобы забирать данные из вашей системы и использовать их в проектах без ручных выгрузок и промежуточных файлов. Поддерживаются основные сущности CRM (Сделки, Лиды, Контакты, Компании, Коммерческие предложения), а также данные из Задач и список бизнес-процессов

Подключение работает через вебхук Bitrix24: вы указываете URL подключения, после чего система проверяет доступ, даёт тестовое подключение и предпросмотр результата — можно увидеть, какие данные вернутся, прежде чем создавать источник. 

Важно про ограничения Bitrix24: у API есть лимиты по частоте запросов и по "ресурсоёмкости" отдельных методов. Поэтому загрузка выполняется пакетами и с контролем темпа, а при превышении лимита система возвращает понятную ошибку по коду Bitrix (например, Query_limit_exceeded)

Многопоточная загрузка

Пр

Доблема

Для реализации многопоточности для ускорения загрузки данных необходимо определить поле, по которому будет происходить разделение на потоки. Поле должно содержать только уникальные данные – это и необходимо определять в рамках этого решения.

Цель минимум – ускорить импорт больших файлов (от 1 млн строк) в реализации на Go как минимум в 2 раза по сравнению с загрузкой на node.js

Цель максимум – реализовать загрузку файла объёмом 2+ млрд строк менее чем за 1 час

Бэкенд

Поиск подходящих столбцов – [ЭНДПОИНТ_ПЕРВЫЙ_ПОИСК]

Node.js формирует список задач из SQL-запроса в скрипте загрузки и отправляет их на Go (POST /v1/find-unique-columns). Go-сервис:

  • Парсит все таблицы
  • Оставляет только "простые" (без подзапросов, join, union) – отмечает как "неподходящие"
  • Исключает таблицы, у которых меньше 100 000 записей – отмечает как "неподходящие"
  • Выполняет "исключающий" поиск – определяет столбец который точно подойдёт по метаданным и группировкам:
    • Если столбец является полностью уникальным (задано условие в СУБД), то он подходит
    • Рассматриваются также наборы из нескольких столбцов: набор из всех столбцов, участвующих в группировке, всегда будет уникальным
  • Собирает IndexList из точно подходящих столбцов (Specify = False) и остальных столбцов (Specify = True) и возвращает в node.js

Node.js возвращает список таблиц и столбцов (вместе с их типами данных) на фронт (разделяя подходящие и неподходящие)

Сохранение списка настроек – [ЭНДПОИНТ_СОХРАНЕНИЕ_НАСТРОЕК] 

Для данного проекта записываются все полученные флаги. В запросе на запуск скрипта POST /v1/execute передаются настройки для каждой таблицы:

  • isMultithreading
  • isFullColumnCheck
  • Список столбцов для разделения
    • При нажатии на кнопку выполняется проверка скрипта на сохранение:
      • Если скрипт не сохранен появляется модальное окно
        • Название окна: "Управление потоками"
        • Текст:  "Обнаружены несохраненные изменения в скрипте загрузки. Для разделения скрипта на потоки необходжимо сохранить все изменения"
        • Кнопка "Сохранить" – при нажатии выполняет стандартный PUT 
          https://fastboard-front-dev.fb-dev.winsolutions.ru/back/api/v1/script, после которого выполняется проверка на существование сохраненных настроек
        • Кнопка "Отменить" – при нажатии возвращает пользователя в скрипт загрузки без сохранения и без открытия следующего окна
      • Если скрипт сохранен, то выполняется проверка на существование сохраненных настроек
    • Проверка на существование сохраненных настроек:

        Запуск скрипта в несколько потоков

        При запуске скрипта для каждой таблицы, у которой флаг isMultithreading = True должна выполняться многопоточная загрузка данных по:

        • Столбцу, указанному пользователем в настройках 
        • Столбцу, определенному при полном поиске подходящих столбцов

        Если столбец не указан и не найден, то выполняется однопоточная загрузка

        Ручной запуск и запуск по CRON-заданию имеют свои (различающиеся друг от друга) настройки многопоточности! Необходимо для ручного запуска брать свой набор настроек, а для CRON-задания свой (или грузить в один поток, если для CRON-задания не было отдельно настроено правило многопоточной загрузки)


        для
        Фускоронтенд

        Кнопка "Настройкия импорта":

        Распбольших ожена:

        бъёмов
        • Рядом с кнопками "Сохраниных (файлы оть скрипт"1 имлн "Запустить скрипт"
        • В настройк и крупные тахблицы). CRON-Система разбивает загрузку на параллельные части и собирает результат в одну таблицу — это сокращает время ожидания ви моделает регульярномые окне, вызываемом при нажатии на кнопку "Обновлениея на больших данных" практичными. 

          Ключевой принцип: чтобы делить данные на потоки безопасно, нужно поле (или набор полей), по которому строки однозначно разделяются между потоками. Перед запуском система анализирует таблицы и предлагает подходящие столбцы для разделения (а где это невозможно — помечает как неподходящее). 

          Дальше вы сквыбираете вариант:

          • использовать рекомендованное поле/набор полей,

          • либо оставить как есть — тогда загрузки

          • а
          • В настрпойках CRON-заданияёт в модальин пом токне, вызывдля этой таемом в панебли администратора

          Действие:цы.

      Автокомплит в REST API

      В редакторе REST API появился автокомплит для типовых параметров в body. Это ускоряет сборку запросов и снижает ошибки в названиях ключей — особенно когда запросы собираются вручную. 

      Примеры подсказок, которые теперь подставляются из списка:

      • авторизация и токены: access_token, authorization, token, refresh_token, client_id, client_secret

      • пагинация/лимиты: limit, offset, page, page_size

      • фильтры/сортировка: filter, where, sort, order

      • идентификаторы/метаданные: id, user_id, request_id, created_at, updated_at


      Пагинация источников в скрипте загрузки 

      Баги и мелкие фичи

      Выбор типа календаря

      СВ настройках календаря добавлена секция «Тип» с переключателем «Компактный / Расширенный». Это возвращает водзможность использовать компактный вид после внедрения новой версии календаря, мыи терпозволяем компактную веыбрсию. 
      Предлагаю добавить вформат отображенастройки секцию "Тип",я под зандалогиичу с (круговой
      Image
      В секции будет переключение "Компактный" икалиендарь vs расширенный" календарь).

      По умолчанию "установлен «Компактный

      Компактный

    Image
    Расширенный 
    Image
    »
    .

    СПроздверка уникальности имени источника с названием, которое уже используется (поменяй название)

    Пр

    Добавлема

    1. В окне импорта нельзя создать источник, если существует другой источник с данным названием
    2. При попытке выполнить это действие с учётки разработчика, у которого нет доступа к существующим файлам, появляется некорректная ошибка "У вас нет прав читать данный источник" 

    P.S. по всей видимости, сначала выполняется проверка уникальности на существозваниея при создании источника. на фронСисте (посколькума заранее проса на бэк нве отправляется, есзанято ли источник доступен)мя, а если истпочник не найден зыв списке загруженных, то кидается запрос на бэк, который возвращает пошибку. Возможно, имеет смысл всегда отправлятный резуль все зтапросы нат проверку на бэк, и, если нет доступа, предлагать юзеру перезаписать существующий источник

    Решение

    Расположение: Скрипт загрузки → Создать подключение → Файл

    ТриггерОтветственныйДействие
    Пользователь ввел текст в поле ввода "Название подключения". Прошла 1 секунда после завершения вводаФРОНТ

    Выполняем проверку наличия источника с таким же названием на фронте:

    • Е

      если на фронте найден источник с таким именем уже существует и доступеназванием, то покальзыоваем системнлю — отображается сообщение: (ошибку) "«Источник с таким именем уже существует"»;

    • Иначе отправляем запрос на проверку на бэк GET /api/v2/source/check-source-name/{name}
    Пришел запрос на проверку наличия источника GET /api/v2/source/check-source-name/{name}БЭК

    Выполняем проверку наличия источника с таким же названием на бэкенде:

    • Если на бэке найден источник существует, но у пользователя нет праким жев наз его просмотр/редактированием, — отображается псообщерниедаём: на фронт ошибку "«Источник с таким именем уже существует, но у Ввас недостаточно прав на его просмотр и редактирование"
    • ».

    • Иначе ничего не возвращаем
    Пришёл ответ с бэкенда с ошибкой "Источник с таким именем уже существует, но у Вас недостаточно прав на его просмотр и редактирование"ФРОНТПоказываем системное сообщение (ошибку) "Источник с таким именем уже существует, но у Вас недостаточно прав на его просмотр и редактирование"
    Пользователь нажал кнопку "Создать"ФРОНТ

    Выполняем проверку наличия источника с таким же названием на фронте:

    • Если на фронте найден источник с таким же названием, то показываем системное сообщение (ошибку) "Источник с таким именем уже существует"
    • Иначе отправляем запрос на создание источника POST /api/v2/source
    Пришёл запрос на создание источника POST /api/v2/sourceБЭК

    Выполняем проверку наличия источника с таким же названием на бэкенде:

    • Если на бэке найден источник с таким же названием, то передаём на фронт ошибку "Источник с таким именем уже существует, но у Вас недостаточно прав на его просмотр и редактирование"
    • Иначе создаём источник

    НЕ ВНЕСЛА:

    Объединение запросов по get_data (+SSE на node.js)