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

Структура проекта

Модель, backend, admin и API-контракт.

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

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

В .admingen/project.yaml описаны сущности и настройки приложения. Generator UI изменяет эту модель, а Generate обновляет по ней backend, систему администрирования, OpenAPI и миграции схемы.

В дереве показан проект с сущностью Article. У backend и admin отдельные зависимости и сборка. Публичный сайт разрабатывается отдельно и обращается к API как клиент.

Дерево показывает основные пути на примере Article, а не полный список файлов. Набор файлов зависит от модели и возможностей проекта.

Корень твоего проекта

project/
├── .admingen/
│   └── project.yaml           # декларативная модель
├── backend/
│   ├── cmd/                   # точки входа Go
│   │   ├── api/main.go
│   │   └── migrate/main.go
│   ├── internal/              # пакеты приложения
│   │   ├── domain/
│   │   │   └── article.go
│   │   ├── app/ENTITY_NAME/
│   │   │   ├── commands.go
│   │   │   ├── queries.go
│   │   │   └── service.go
│   │   ├── adapters/
│   │   │   ├── http/generated/article_handler.go
│   │   │   └── postgres/generated/article_repository.go
│   │   ├── infrastructure/
│   │   │   ├── database/database.go
│   │   │   └── migrations/migrations.go
│   │   ├── generated/
│   │   │   ├── bootstrap/app.go
│   │   │   └── customcontracts/composition.go
│   │   └── custom/
│   │       ├── app/composition.go
│   │       └── ENTITY_NAME/hooks.go
│   ├── migrations/            # история изменений схемы
│   │   ├── manifest.json
│   │   └── custom/
│   ├── openapi/               # HTTP-контракт
│   │   ├── openapi.yaml
│   │   └── entities/article.yaml
│   └── go.mod
└── admin/
    ├── src/                   # React + TypeScript
    │   ├── main.tsx
    │   ├── app/
    │   │   ├── router.tsx
    │   │   └── providers.tsx
    │   ├── features/ENTITY_NAME/
    │   │   ├── generated/
    │   │   │   ├── model.ts
    │   │   │   ├── form.tsx
    │   │   │   ├── list-page.tsx
    │   │   │   └── ui-extension.tsx
    │   │   └── custom/
    │   │       ├── extension.tsx
    │   │       └── ui-extension.tsx
    │   └── shared/
    │       ├── api/client.ts
    │       └── forms/field-controls.tsx
    ├── custom/vite.ts         # настройки сборки проекта
    └── package.json

Твои доработки размещаются в custom-зонах. Набор остальных файлов зависит от включённых возможностей: например, media и Docker/deployment появляются по настройкам проекта. Сохранение модели, генерация файлов и применение миграций выполняются отдельно.

Декларативная модель

.admingen/project.yaml хранит описание сущностей, полей, связей, доступа и настроек генерации. В нём указано, что должно быть в приложении. Основной способ редактирования — Generator UI; те же изменения можно вносить через CLI. Generate читает модель и строит код. Обратного восстановления модели из исходников приложения нет.

Точки входа Go

В backend/cmd/ находятся исполняемые программы проекта. Например, cmd/api/main.go запускает сборку зависимостей и HTTP-сервер. Благодаря отдельным точкам входа API и служебные команды запускаются независимо.

Пакеты приложения

В backend/internal/ находятся типы сущностей, прикладные сервисы, HTTP/SQL-адаптеры и технические механизмы. Custom-расширения тоже размещены здесь. При этом назначение пакета и право изменять его файлы — разные вещи: направление зависимостей и правила генерации разобраны ниже.

История изменений схемы

В backend/migrations/ хранятся SQL-миграции и их реестр. Generate добавляет новые шаги изменения схемы. Чтобы выполнить их в БД, нужно отдельно запустить мигратор. Уже выпущенная история сохраняется: изменение модели не переписывает прежние миграции.

HTTP-контракт

В backend/openapi/ описаны маршруты API, параметры, тела запросов и ответы. Этот контракт позволяет разработчику сайта или другого клиента подключиться к приложению без изучения внутренних Go-пакетов.

React + TypeScript

В admin/src/ находится система администрирования: маршрутизация, списки, формы и общие элементы управления. Стандартные части обновляются из модели. Рядом с ними, в custom-зонах сущностей, находятся твои компоненты и расширения.

Настройки сборки проекта

Через admin/custom/vite.ts можно дополнить конфигурацию Vite под задачи приложения. Генератор создаёт стартовый файл, только если его ещё нет. После этого файл принадлежит вам, и дальнейший Generate сохраняет внесённые настройки.

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