Архитектура · 0.8.1

Собственный код и точки расширения

Hooks, зависимости, маршруты и свои компоненты.

На этой странице

ENTITY_NAME в пути — placeholder каталога вашей сущности, например product для Product; EntityName — её тип в коде. Подставьте фактические имена своего проекта. Примеры Article ниже показывают отдельную сущность, а не обязательный модуль любого приложения.

Архитектурный слой определяет назначение кода, а правила владения — кто изменяет файл. Например, domain, app и adapters могут обновляться генератором, даже если в пути нет папки generated.

Контракт расширения находится в сгенерированном коде, твоя реализация — в custom. При сборке они подключаются друг к другу. Поэтому доработки не нужно вставлять в generated-файлы и повторять после каждого Generate.

Backend: hooks и подключение зависимостей

ENTITY_NAME/hooks.go реализует интерфейс Hooks: Before/After Create и Update, BeforeDelete, AfterList и AfterGetByID. В этих точках сценария можно добавлять проверки, преобразования и интеграции.

Через custom/app/composition.go и контракты generated/customcontracts/ подключаются зависимости проекта. Для своих маршрутов предусмотрены custom/app/routes.go и RegisterRoutes. Custom-код также должен соблюдать границы слоёв и проверять серверную авторизацию там, где это требуется.

Frontend: дополнение или полная замена

Для отдельной ячейки, действия, элемента формы или обёртки используй точечное расширение. Остальная форма продолжит строиться из модели. Если нужна полностью своя страница, подключи PageOverride: тогда её содержимое и поведение целиком поддерживаешь ты.

Стартовые custom-файлы создаются только при отсутствии. Дальнейший Generate их сохраняет, но не адаптирует к новому контракту. После изменения модели проверь совместимость своих расширений: неизменность файла не гарантирует, что код продолжит работать.

Один проект, параллельные изменения

Например, в Generator UI ты добавляешь Article.summary и фильтр по status. Одновременно в custom-коде разрабатываешь действие для статьи и проверки BeforeCreate/BeforeUpdate.

После Preview и Generate стандартная форма получит новое поле, если ты его не переопределил, а backend — обновлённую модель. Custom-файлы сохранятся. Затем примени необходимые миграции, проверь совместимость расширений с новым контрактом и обнови приложение.

Практические руководства