Сайт ↗
Разделы документации
Концепции · 0.8.1

Модель приложения: что хранится в манифесте

Как настройки Generator UI превращаются в описание приложения и для чего нужны project.yaml, lock и baseline.

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

В Generator UI вы задаёте сущности, поля, связи и доступ. Admingen сохраняет эти настройки в .admingen/project.yaml. Этот файл называется манифестом: он описывает, какое приложение нужно получить при генерации.

Модель и custom-код можно развивать параллельно. Меняйте типовые возможности через UI, а собственную логику пишите в custom-зонах. Ручная правка сгенерированного Go или React не меняет модель и потому не заменяет настройку в манифесте.

Где менять настройки

В Project settings находятся заголовок проекта и хранилище изображений. Способы запуска, CI и профили окружений находятся в отдельном разделе Deployment. В Content — модули, сущности, поля и связи. Доступ к операциям и условия выдачи записей настраиваются в Entity settings → Access.

Кнопка Finish сохраняет модель. Чтобы обновить файлы приложения, откройте Generate → Preview changes → Generate. Это отдельное действие: сохранение формы не выпускает код и не меняет БД.

Из каких разделов состоит манифест

Ключ Что он описывает
version Контракт проекта. Текущее значение — 0.8.1.
generatorVersion Версию генератора, записанную в проекте. Замена числа сама по себе не обновляет контракт.
project Техническое имя name, заголовок title и путь Go-модуля.
database PostgreSQL и схему базы данных.
auth Аутентификацию, обязательную для поддерживаемого приложения.
modules Именованные группы сущностей и их порядок.
entities Поля, связи, операции CRUD, интерфейс, права и проекции.
generation Технологии backend, интерфейса, API и миграций.
deployment, media Генерацию файлов развёртывания и хранилище изображений.
features, ui Дополнительные поддерживаемые параметры и режим интерфейса.
fieldRenames Явные переименования полей. Этот раздел не показывает, какие SQL-миграции уже применены.

После создания проекта обычную настройку можно выполнять без ручного редактирования YAML. Например, сущность Article из Content сохраняется в таком виде. Это фрагмент, а не полный манифест:

name: Article
kind: persistent
module: content
table: articles
fields:
  - name: id
    type: int
    primaryKey: true
    autoGenerate: identity
  - name: title
    type: string
    required: true

У сущности есть name, вид kind, модуль module, таблица table, поля fields, связи relations, операции crud, доступ access и настройки интерфейса ui. Виртуальная сущность вместо собственной таблицы использует раздел virtual: источник source, выборку select и операции operations. Настройки API и UI не могут включить операцию, которую не поддерживает сама сущность.

Что проверяется перед генерацией

Генератор дополняет модель допустимыми значениями по умолчанию, проверяет типы, имена и ссылки. Этот этап называется нормализацией. Например, два первичных ключа, несовместимый внешний ключ или повторяющийся псевдоним поля остановят обработку. Сообщение укажет, что нужно исправить в модели.

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

Зачем нужны lock и baseline

Манифест хранит текущие настройки. Файл lock хранит контракт и хеши выпущенных файлов — по ним генератор проверяет изменения и владение. baseline содержит точные байты модели последней успешной генерации.

Эти файлы решают разные задачи. Ручное изменение version в lock не переносит старый проект на новый контракт и не обновляет его данные. Автоматическая поддержка старых контрактов не подразумевается.

Как продолжить

Для повседневной работы используйте Generator UI. Подробности форм собраны в Project settings и Content.

CLI позволяет автоматизировать те же операции. Если вы редактируете манифест вручную, после правки тоже нужно проверить модель, план и diff: ручное редактирование не отменяет ограничений генератора.