Focus: часть 2 или как мы управляем данными
На связи Миша Дадаев, techlead АЭРО, и мы продолжаем рассказывать про нашу админку Focus.
Примеры реализации задач
Давайте рассмотрим работу системы на примере с некоторыми из сервисов Focus, например: delivery, content и catalog. Ниже по каждому сервису обозначены желаемые действия по управлению данными:
Для реализации заявленных функций нам потребуются установить плагины согласно схеме ниже. Важно отметить, что плагин media может как использоваться в качестве самостоятельного хранилища файлов, так и взаимодействовать с другими плагина сервиса. Например, если необходимо к баннеру загрузить изображение.
Итак, чтобы сервис подключился к Focus админ, необходимо выполнить 2 условия:
- Должен быть реализован healthcheck GET /api/v1/admin/health/check
- На сервис должен быть установлен хотя бы один плагин
Конфигурация
В случае сервиса delivery, устанавливаем плагин configurations, и в результате появляются необходимые эндпоинты. Подобным же образом потребуется установить плагины для каждого сервиса. Далее, через задание переменных окружения, нужно внести информацию о сервисе в конфигурацию admin-connector, чтобы он понимал как с ними работать.
Например, мы хотим управлять тремя настройками доставки: e-mail для обратной связи, количество дней хранения заказа в ПВЗ и максимальный вес посылки в килограммах. В терминах Focus Admin группа этих трех настроек и является конфигурацией.
После этого можно редактировать все значения конфигурации в едином окне.
Меню и медиа
Следующим шагом для сервиса контент устанавливаем плагин menu, где создаем тип меню и добавляем нужные нам пункты. Можно создавать множество разных меню, вкладывать пункты друг в друга и задавать для них дополнительные опции (например, цвет). Еще одним простым и понятным плагином является media. Он интегрируется с s3-совместимым хранилищем и позволяет производить операции с файлами и папками.
Модели
Плагин модели позволяет дать доступ к управлению данными в таблицах баз данных, к которым мы захотим его выдать. С помощью этого плагина можно также сделать сортировку в списке элементов и выдать доступ только к выборочным колонкам. Это позволяет управлять записями в таблицах совершенно разных сервисов:
- загружать баннеры в контентном сервисе;
- редактировать популярные местоположения в сервисе гео;
- управлять SEO-описаниями для разделов в сервисе каталог
- и т.д.
Теги позволяют хранить meta-информацию о полях структуры прямо в коде, не используя никакие персистентные хранилища. Дополнительным бонусом является то, что свой тег без особых усилий может написать любой разработчик. Мы решили, что будем использовать тег focus, который будет хранить информацию о настройках полей в CMS.
Давайте представим, что у нас есть структура brand со следующими полями:
- id
- название
- символьный код
- логотип
- текстовое описание
В коде сервиса, написанного на Go, она может выглядеть следующим образом:
Чтобы данными этой структуры можно было работать в Focus, нужно добавить настройки полей, используя тег focus
Пример для нашей бренд зоны с использованием тега focus будет выглядеть так:
Как показано в примере, для части полей можно выставить специальную настройку — disabled. В этом случае просматривать значение поля в Focus можно, а вот изменять значение не получится. Данный прием полезен, когда записи загружаются из внешнего источника, и мы хотим позволить изменять только дополнительные поля.
Другим полезным значением являются настройки “-” и hidden:list — первая полностью скрывает поле из админ-панели, а вторая скрывает из списка.
Чтобы управлять тем, как Focus будет отображать поле используется настройка view. Если ее не указывать, Focus будет опираться на тип поля. В нашем примере мы хотим, чтобы поле Content редактировалось через визуальный редактор view = editorJs. Более подробно обо всех возможных настройках тега focus можно почитать на странице документации.
В итоге мы получаем следующий интерфейс управления в админ-панели:
Естественно, бывает, что перечисленного функционала недостаточно, но Focus — это расширяемая система, расширение которой происходит за счета разработки новых плагинов на backend и на frontend. За основу обычно можно взять функционал плагина модели и дописать кастомную логику.
Сейчас основное количество плагинов написано на Golang — этот язык программирования мы чаще всего используем при разработке проектов на сервисной архитектуре. Однако, backend может быть переписан на другой технологический стек (например C#), при этом frontend остается без изменений.
Вместо заключения
При разработке Focus Admin мы стремились к тому, чтобы наша система представляла собой уникальное решение на рынке, полностью закрывающее потребности наших клиентов по части управления контентом на сайте. Наша CMS имеет несколько отличительных особенностей:
- Универсальность. Это коробочное решение, подходящее для любого проекта;
- Гибкость. Если требуется специфический контент для сайта, то можно разработать под него кастомный плагин;
- Скорость внедрения. Поскольку Focus это low-code система, управлять контентом и настраивать модель сайта можно за считанные минуты;
- Мультиязычность. Focus работает с любым языком программирования;
- Безграничность. У CMS нет лимита по кол-ву подключенных сервисов.
На текущий момент проект находится в стадии активного развития. Мы стараемся постоянно делать его удобнее, стабильнее и функциональнее. Несмотря на то, что проект еще молодой, он уже позволяет закрывать 70-80% потребностей по администрированию данными проекта, при этом экономя достаточное количество ресурсов разработки.