Всем привет!
Сегодня расскажу свою историю использования админ-панели MoonShine в проекте.
Что было? Что случилось? Зачем админ панель?
Есть действующий проект - онлайн-обменник на Laravel. Я прихожу работать с ним в роли основного разработчика проекта.
В проекте достаточно много задач по администрированию: список валют и направлений обмена, клиентов, сделки и т.д. На старте у нас был Telegram-бот с небольшими web-app приложениями и несколько команд в самом боте для управления системой .
Но обменник быстро рос, и стало понятно — одного Telegram-бота недостаточно для управления всей системой. Требовалась полноценная админ-панель с ролевой системой. Возник вопрос - на чём реализовывать?
Почему Moonshine?
Опыт работы с админками уже был, поэтому рассмотрел несколько вариантов:
- Vue JS + TypeScript с нуля
Самый трудозатратный вариант, когда делаем все с нуля, каждый компонент верстается, программируется самостоятельно с нуля (либо почти с нуля). Сильно затратно, долго и вообще запарно, никому не рекомендую. - Vue JS + UI-фреймворк
Берем UI-фреймворк, делаем компонент таблицы и переиспользуем на всех сущностях админ-панели. Намного быстрее чем первый вариант, но нужно тратить время на описание типов/API для каждой сущности. Теряется индивидуальный подход к каждой сущности (что для обычной админ-панели не сильно то и нужно), но остается возможность сильной кастомизации в дальнейшем при необходимости. - Moonshine. Описываем админ-панель грубо говоря конфигом, Moonshine все делает за нас сама. Так же как и во втором варианте у нас теряется индивидуальность, все списки однотипные, но скорость разработки сильно вырастает. Для нашей задачи идеальный вариант — накидать админку быстро и эффективно.
Исходя из задачи "нужно иметь возможность всем этим управлять и побыстрее" - был выбран вариант с Moonshine:
- есть опыт работы с MoonShine, довольно хорошо знаю как устроена админка, поэтому трудозатрат должно быть меньше
- к дизайну требований не было + дизайн Moonshine более чем устраивает. Речи о большой кастомизации проекта не идет
Всё легко и просто?
Сначала — да. Всё шло гладко, пока не понадобилось сильно кастомизировать один из модулей. В нашем случае это была страница редактирования/создания сделки.
В этом модуле почти каждое поле взаимодействует с каким-то другим полем (или сразу с несколькими). И для данной страницы пришлось выделить время, чтобы сделать ее как хотелось — удобно и функционально, так как это основной модуль с которым часто работают. К счастью, в Moonshine "из коробки" идет Alpine.js. И немного вспомнив доку по Alpine - проблему удалось решить довольно быстро.
Что интересного интегрировал?
1. Websocket:
Нужно было обновлять данные в реальном времени: списки, формы редактирования ресурсов — чтобы не допустить параллельного сохранения. Всё интегрировалось без проблем. Позже ребята сделали готовый модуль для MoonShine Rush - жаль что мне он понадобился раньше, а то бы с удовольствием использовал готовое решение, сэкономил бы кучу времени.
2. Google maps:
Как видно выше в модуле сделок есть карта, на которой можно выбрать или просто посмотреть место встречи. Также особых проблем не было. Нашёл похожий пример, доработал поле — и теперь его можно переиспользовать в других местах.
Что имеем?
- На данный момент в админ панели проекта около 37 модулей (ресурсов).
- Сделана админ панель была буквально за пару месяцев, с учетом постоянной параллельно разработки API + поддержке других моментов по проекту.
- Все довольны, разработчик - занимается разработкой, а не постоянным лазанием в БД и правкой каких-то столбцов или выгрузкой импортов. У руководства есть возможность экспортировать список любой сущности и на основе XLS делать какую-то аналитику или что им еще требуется.
Итоги
Выбор MoonShine для создания админ-панели оказался на 100% оправданным. Мы получили готовое решение всего за пару месяцев, несмотря на то, что параллельно велась разработка API и других задач. Быстрая настройка, минимальные трудозатраты и готовые пакеты позволили сконцентрироваться на важных аспектах проекта, а не закапываться в разработку "с нуля".
Если бы я выбрал другие пути реализации админки, то я бы погряз в написании API + типов на фронте + постоянными просьбами что-то править/выгрузить через БД, а не занимался бы архитектурой проекта.
Мой совет: если у вас небольшой проект буквально на 5-10 модулей, не задумываясь берите MoonShine, вы накидаете очень функциональную админку за неделю-две. Дальше когда это будет работать - у вас будет время подумать и прикинуть что делать дальше. Но пока задач, которые я не могу решить с применением MoonShine, не появилось.
Спасибо, если кто-то дочитал! Хороших вам и продуктивных дней!