| name | scaffold |
| description | Scaffold — создание нового Go-сервиса из шаблона gold-apisrv. Используй когда нужно завести новый сервис с нуля (репо, структура, Makefile, CI, конфиг, main). |
Scaffold — создание нового Go-сервиса
Создание нового проекта из шаблона vmkteam/gold-apisrv (https://github.com/vmkteam/gold-apisrv).
Триггер
- "создай новый сервис"
- "bootstrap проект"
- "новый API сервер"
Входные данные
Спроси у пользователя:
- Имя проекта (module name, например
reviewsrv, ordersrv)
- Имя бизнес-слоя (может отличаться от проекта, например проект
ordersrv → бизнес-слой orders). По умолчанию = имя проекта без суффикса srv
- Путь куда клонировать (по умолчанию
~/{workspace}/{name}/)
- Порт (по умолчанию 8075)
- База данных (имя и PostgreSQL-схема, по умолчанию имя = проект, схема =
public)
- Нужен ли VT (admin CRUD API, по умолчанию да)
- Нужен ли VFS (файловое хранилище, по умолчанию нет)
Алгоритм
Шаг 1. Клонировать и инициализировать
git clone https://github.com/vmkteam/gold-apisrv.git {path}/{name}
cd {path}/{name}
rm -rf .git
git init
Шаг 2. make init
В шаблоне есть make init который выполняет начальную настройку, включая генерацию Makefile.mk из Makefile.mk.dist. Запустить:
make init
Makefile.mk — локальный конфиг проекта (переменные, пути), подключается из основного Makefile. Находится в .gitignore.
Шаг 3. Переименовать модуль и проект
sed -i '' 's/module apisrv/module {name}/' go.mod
find . -name '*.go' -not -path './vendor/*' -exec sed -i '' 's|"apisrv/|"{name}/|g' {} +
Файлы для правки:
| Файл | Что менять |
|---|
cmd/apisrv/main.go | const appName = "apisrv" → "{name}" |
Makefile | NAME := apisrv → NAME := {name} |
Makefile | PGDATABASE ?= apisrv → PGDATABASE ?= {name} |
Makefile | TEST_PGDATABASE ?= test-apisrv → TEST_PGDATABASE ?= test-{name} |
deployments/Dockerfile | CI_PROJECT_NAME=apisrv → CI_PROJECT_NAME={name} |
cfg/local.toml.dist | Database = "apisrv" → Database = "{name}" |
Шаг 4. Переименовать директории и файлы
mv cmd/apisrv cmd/{name}
mv docs/model/apisrv.mfd docs/model/{name}.mfd
mv docs/apisrv.sql docs/{name}.sql
mv docs/apisrv.pgd docs/{name}.pgd 2>/dev/null
sed -i '' 's/apisrv\.mfd/{name}.mfd/g' Makefile
Шаг 5. Бизнес-слой (если имя отличается от проекта)
Если бизнес-слой называется иначе (например billing вместо order):
mv pkg/apisrv pkg/{domain_name} 2>/dev/null
find . -name '*.go' -not -path './vendor/*' -exec sed -i '' 's|"{name}/pkg/apisrv"|"{name}/pkg/{domain_name}"|g' {} +
Шаг 6. VT (если не нужен)
Если VT не нужен — удалить:
rm -rf pkg/vt/
Шаг 7. Конфигурация
cp cfg/local.toml.dist cfg/local.toml
Обновить в cfg/local.toml:
Port = {port}
Database = "{name}"
EnableVFS = {true/false}
Шаг 8. MFD-файл
В docs/model/{name}.mfd:
<Name>{name}.mfd</Name>
Шаг 9. База данных и сборка
make db
make db-test
make mod
make build
make run
Шаг 10. Проверка
curl http://localhost:{port}/status
curl http://localhost:{port}/v1/rpc/
curl http://localhost:{port}/metrics
Структура нового проекта
{name}/
├── Makefile # основной (include Makefile.mk)
├── Makefile.mk # локальные переменные (gitignored)
├── cmd/{name}/main.go # точка входа
├── pkg/
│ ├── app/ # App, handlers, metrics, config
│ ├── db/ # ORM-модели, репозитории
│ ├── {domain_name}/ # Domain (бизнес-логика, если нужна)
│ ├── rpc/ # Публичный API
│ └── vt/ # Admin API (если нужен)
├── docs/
│ ├── {name}.sql # DDL
│ ├── {name}.pgd # Схема pgDesigner
│ ├── init.sql # seed data
│ ├── patches/ # Миграции (pgmigrator)
│ └── model/{name}.mfd # MFD-схема
├── cfg/
│ ├── local.toml # конфиг (gitignored)
│ └── local.toml.dist # шаблон конфига
├── deployments/Dockerfile
└── go.mod
Работа с БД по стадиям
Стадия "Идея" (нет devel-окружения)
docs/{name}.sql — всегда актуальный. Это source of truth. Миграций нет.
При изменении схемы:
- Редактировать
docs/{name}.pgd → pgdesigner generate → обновить docs/{name}.sql
make db — пересоздать БД с нуля
make mfd-xml && make mfd-model — перегенерировать Go-код
Стадия "Dev" (появился devel)
Нельзя пересоздать БД на devel → появляются миграции в docs/patches/.
При изменении схемы:
- Написать миграцию в
docs/patches/ (/pgmigrator)
- Обновить
docs/{name}.sql (держать в актуальном состоянии)
pgmigrator run на devel
make mfd-xml && make mfd-model
Следующие шаги после scaffold
- Спроектировать схему БД → /pgd
- Сгенерировать SQL →
pgdesigner generate
make db → make mfd-xml → make mfd-model → /mfd
- Добавить RPC-сервисы → /zenrpc
- Добавить VT CRUD (если нужен) → /mfd (
make mfd-vt-rpc NS=...)
- Онбординг в системы → /onboard