repogen

package
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 22, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

README

RepoGen

Language: EN | RU

repogen renders typed repository code from SQL schema.

CLI

go run ./modules/repogen/cmd/genrepo -schema ./schema.sql -out ./generated/genorderledgerrepo

Common flags:

  • -schema
  • -out
  • -catalog
  • -fk-catalog
  • -method-refs
  • -tables
  • -preset
  • -check
  • -preview

Package Layout

  • cmd/genrepo - CLI entry point.
  • internal/generator/schema - schema parser and dependency resolution.
  • internal/generator/decl - declarative DSL and types.
  • internal/generator/codegen - source generation.
  • wrappers/runtimex - runtime interfaces used by generated code.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DefaultDSLDir

func DefaultDSLDir(baseDir, id string) string

DefaultDSLDir returns the default directory for generated DSL artifacts.

func DefaultDSLPackageName

func DefaultDSLPackageName(id string) string

DefaultDSLPackageName returns the default package for generated DSL artifacts.

func DefaultRepoArtifactPaths

func DefaultRepoArtifactPaths(baseDir, id string) (outDir, catalogPath, fkCatalogPath, methodRefsPath string)

DefaultRepoArtifactPaths returns the default build output layout for a repo job.

func DefaultRepoOutDir

func DefaultRepoOutDir(baseDir, id string) string

DefaultRepoOutDir returns the default directory for generated repository client artifacts.

func DefaultRepoPackageName

func DefaultRepoPackageName(id string) string

DefaultRepoPackageName returns the default package for generated repository client artifacts.

func PackageIdent

func PackageIdent(raw string) string

PackageIdent normalizes an arbitrary identifier into a Go package-friendly name.

Types

type BootstrapBinding

type BootstrapBinding struct {
	// Optional.
	//
	// Target points to bootstrap job ID.
	// Empty is allowed only when project has exactly one bootstrap job.
	//
	// RU: Target указывает на bootstrap job ID.
	// Пустое значение допустимо только если в проекте ровно один bootstrap job.
	Target string
	// Optional.
	//
	// ComponentID overrides component ID inside bootstrap manifest.
	// When empty, runtime uses job ID.
	//
	// RU: ComponentID переопределяет component ID внутри bootstrap manifest.
	// Если поле пустое, runtime использует job ID.
	ComponentID string
}

BootstrapBinding links a generated repo to a bootstrap job for auto-sync. All fields are optional. Use nil Job.Bootstrap to disable bootstrap sync entirely.

RU: BootstrapBinding связывает generated repo с bootstrap job для auto-sync. RU: Все поля опциональны. Используйте nil в Job.Bootstrap, чтобы полностью отключить bootstrap sync.

type BuildConfig

type BuildConfig struct {
	// Optional.
	//
	// Disabled turns off final repository build generation for this repo job.
	// Zero value keeps build generation enabled.
	//
	// RU: Disabled выключает генерацию финальных repository-артефактов для этого repo job.
	// Нулевое значение оставляет build generation включённой.
	Disabled bool
	// Optional.
	//
	// OutDir is the output directory for generated repository files.
	// When empty, the runtime uses `<repo dir>/generated/gen<repo-id>repo`.
	//
	// RU: OutDir — директория вывода для generated repository-файлов.
	// Если поле пустое, runtime использует `<repo dir>/generated/gen<repo-id>repo`.
	OutDir string
	// Optional.
	//
	// CatalogPath is the output path for the generated table catalog.
	// When empty, the runtime uses `<repo dir>/generated/gen<repo-id>dsl/catalog_gen.go`.
	//
	// RU: CatalogPath — путь к generated table catalog.
	// Если поле пустое, runtime использует `<repo dir>/generated/gen<repo-id>dsl/catalog_gen.go`.
	CatalogPath string
	// Optional.
	//
	// FKCatalogPath is the output path for the generated FK catalog.
	// When empty, the runtime uses `<repo dir>/generated/gen<repo-id>dsl/fk_catalog_gen.go`.
	//
	// RU: FKCatalogPath — путь к generated FK catalog.
	// Если поле пустое, runtime использует `<repo dir>/generated/gen<repo-id>dsl/fk_catalog_gen.go`.
	FKCatalogPath string
	// Optional.
	//
	// MethodRefsPath is the output path for generated method references.
	// When empty, the runtime uses `<repo dir>/generated/gen<repo-id>dsl/method_refs_gen.go`.
	//
	// RU: MethodRefsPath — путь к generated method refs.
	// Если поле пустое, runtime использует `<repo dir>/generated/gen<repo-id>dsl/method_refs_gen.go`.
	MethodRefsPath string
	// Optional.
	//
	// DSLPackageName is the Go package name used in generated DSL artifacts
	// such as catalog, FK catalog and method refs.
	// When empty, the runtime uses `gen<repo-id>dsl`.
	//
	// RU: DSLPackageName — имя Go package для generated DSL-артефактов
	// вроде catalog, FK catalog и method refs.
	// Если поле пустое, runtime использует `gen<repo-id>dsl`.
	DSLPackageName string
	// Optional.
	//
	// PackageName is the Go package name used in generated repository files.
	// When empty, the runtime uses `gen<repo-id>repo`.
	//
	// RU: PackageName — имя Go package для generated repository-файлов.
	// Если поле пустое, runtime использует `gen<repo-id>repo`.
	PackageName string
	// Optional.
	//
	// Prepared enables prepared-statements generation mode markers.
	//
	// RU: Prepared включает режим generated prepared-statements markers.
	Prepared bool
	// Optional.
	//
	// InputSuffix is appended to generated input DTO types.
	//
	// RU: InputSuffix добавляется к generated input DTO типам.
	InputSuffix string
	// Optional.
	//
	// RowSuffix is appended to generated row/select DTO types.
	//
	// RU: RowSuffix добавляется к generated row/select DTO типам.
	RowSuffix string
	// Optional.
	//
	// ReturningSuffix is appended to generated returning DTO types.
	//
	// RU: ReturningSuffix добавляется к generated returning DTO типам.
	ReturningSuffix string
	// Optional.
	//
	// OpsPackage points to a Go package with user-maintained DSL operations.
	// When empty, the runtime can build schema-only artifacts or use the repo DSL package
	// from the same job when that phase is enabled by the runner.
	//
	// RU: OpsPackage указывает на Go package с пользовательскими DSL-операциями.
	// Если поле пустое, runtime может собирать schema-only артефакты или использовать
	// repo DSL package из того же job, если эта фаза включена runner'ом.
	OpsPackage string
	// Optional.
	//
	// Logging configures privacy rules for generated repository SQL/input/output logging.
	//
	// RU: Logging настраивает privacy-правила для generated repository SQL/input/output logging.
	Logging *LoggingOptions
	// Optional.
	//
	// Bootstrap is deprecated. Use Job.Bootstrap instead.
	//
	// RU: Bootstrap устарел. Используйте Job.Bootstrap.
	Bootstrap *BootstrapBinding
}

BuildConfig controls final repository artifact generation. RU: BuildConfig управляет генерацией финальных repository-артефактов.

All fields are optional. Zero value keeps the build phase enabled with conventional output paths. RU: Все поля опциональны. Нулевое значение оставляет build phase включённой со стандартными путями.

type DSLConfig

type DSLConfig struct {
	// Optional.
	//
	// Disabled turns off scaffold generation for this repo job.
	// Zero value keeps scaffold generation enabled.
	//
	// RU: Disabled выключает scaffold-генерацию для этого repo job.
	// Нулевое значение оставляет scaffold-генерацию включённой.
	Disabled bool
	// Optional.
	//
	// Dir points to the editable scaffold directory near the schema.
	// When empty, the runtime uses BaseDir.
	//
	// RU: Dir указывает на директорию editable scaffold рядом со схемой.
	// Если поле пустое, runtime использует BaseDir.
	Dir string
	// Optional.
	//
	// Package is the Go package name used in scaffold files.
	// When empty and Dir is set, the runtime uses the directory basename.
	//
	// RU: Package — имя Go package для scaffold-файлов.
	// RU: Если поле пустое и задан Dir, runtime использует basename директории.
	Package string
	// Optional.
	//
	// Presets selects which scaffold templates should be generated.
	// When empty, the runtime defaults to `auto`.
	//
	// RU: Presets выбирает, какие scaffold-шаблоны нужно сгенерировать.
	// Если поле пустое, runtime по умолчанию использует `auto`.
	Presets []ScaffoldPreset
	// Optional.
	//
	// Mode controls how scaffold files are written.
	// When empty, the runtime uses `init`.
	//
	// RU: Mode управляет тем, как записываются scaffold-файлы.
	// Если поле пустое, runtime использует `init`.
	Mode ScaffoldMode
}

DSLConfig controls editable DSL scaffold generation. RU: DSLConfig управляет генерацией editable DSL scaffold.

All fields are optional. Zero value keeps the DSL phase enabled and convention-driven. RU: Все поля опциональны. Нулевое значение оставляет DSL phase включённой и convention-driven.

type DependencyPolicy

type DependencyPolicy string

DependencyPolicy controls FK parent expansion when resolving selected tables. RU: DependencyPolicy управляет расширением FK parent tables при выборе набора таблиц.

const (
	// DependencyRequiredOnly adds only required FK parents.
	//
	// RU: DependencyRequiredOnly добавляет только обязательные FK parent tables.
	DependencyRequiredOnly DependencyPolicy = "required_only"

	// DependencyRequiredAndOptional adds both required and optional FK parents.
	//
	// RU: DependencyRequiredAndOptional добавляет и обязательные, и optional FK parent tables.
	DependencyRequiredAndOptional DependencyPolicy = "required_and_optional"

	// DependencyStrict does not auto-add any parent tables.
	//
	// RU: DependencyStrict не добавляет parent tables автоматически.
	DependencyStrict DependencyPolicy = "strict"

	// DependencyOptionalOnly adds only optional FK parents.
	//
	// RU: DependencyOptionalOnly добавляет только optional FK parent tables.
	DependencyOptionalOnly DependencyPolicy = "optional_only"
)

type Job

type Job struct {
	// Optional.
	//
	// ID is an optional stable job identifier used by TUI and runners.
	// When empty, the runtime derives it from SchemaPath.
	//
	// RU: ID — необязательный стабильный идентификатор job для TUI и runner'ов.
	// Если поле пустое, runtime вычисляет его из SchemaPath.
	ID string

	// Optional.
	//
	// BaseDir points to the repository domain directory that contains `schema.sql`.
	// When set, the runtime can derive SchemaPath, generated output paths, ScaffoldDir
	// and ScaffoldPackage by convention.
	// Can be omitted when SchemaPath is set.
	//
	// RU: BaseDir указывает на директорию домена repository, где лежит `schema.sql`.
	// Если поле задано, runtime может по конвенции вывести SchemaPath, generated output paths,
	// ScaffoldDir и ScaffoldPackage.
	// Можно не задавать, если указан SchemaPath.
	BaseDir string

	// Optional.
	//
	// SchemaPath points to the source SQL schema file.
	// When empty and BaseDir is set, the runtime uses `<BaseDir>/schema.sql`.
	// Can be omitted when BaseDir is set.
	//
	// RU: SchemaPath указывает на исходный SQL schema-файл.
	// Если поле пустое и задан BaseDir, runtime использует `<BaseDir>/schema.sql`.
	// Можно не задавать, если указан BaseDir.
	SchemaPath string

	// Optional.
	//
	// Selection controls which schema tables participate in generation.
	//
	// RU: Selection управляет тем, какие таблицы схемы участвуют в генерации.
	Selection Selection
	// Optional.
	//
	// Bootstrap enables auto-sync into a bootstrap Definition() manifest.
	// Leave nil when this repo should not appear in bootstrap managed inventory.
	//
	// RU: Bootstrap включает auto-sync в bootstrap Definition() manifest.
	// Оставьте nil, если этот repo не должен попадать в bootstrap managed inventory.
	Bootstrap *BootstrapBinding
	// Optional.
	//
	// DSL controls editable DSL scaffold generation.
	// Zero value enables DSL scaffold generation with convention defaults.
	//
	// RU: DSL управляет генерацией editable DSL scaffold.
	// Нулевое значение включает DSL scaffold generation со стандартными значениями.
	DSL DSLConfig
	// Optional.
	//
	// Build controls final repository artifact generation.
	// Zero value enables final build generation with convention defaults.
	//
	// RU: Build управляет генерацией финальных repository-артефактов.
	// Нулевое значение включает финальную build generation со стандартными значениями.
	Build BuildConfig
}

Job describes one repository generation unit driven by a SQL schema. Required: set BaseDir or SchemaPath. BaseDir is the preferred happy path. Optional fields: ID, Selection, Bootstrap, DSL, Build.

RU: Job описывает одну задачу генерации repository-кода на основе SQL-схемы. RU: Обязательно: задайте BaseDir или SchemaPath. BaseDir — предпочтительный happy path. RU: Опциональные поля: ID, Selection, Bootstrap, DSL, Build.

type LoggingOptions

type LoggingOptions struct {
	// Optional.
	//
	// RedactedFields lists JSON object keys that should be redacted in logged input/output payloads.
	// Matching is case-insensitive and ignores punctuation differences such as `_`, `-` and spaces.
	//
	// RU: RedactedFields задаёт список JSON-ключей, которые нужно редактировать в логируемых input/output payloads.
	// RU: Сопоставление нечувствительно к регистру и игнорирует различия в `_`, `-` и пробелах.
	RedactedFields []string
	// Optional.
	//
	// RedactionReplacement overrides the marker value written for redacted fields.
	// When empty, the runtime uses `this field was redacted`.
	//
	// RU: RedactionReplacement переопределяет marker-значение, которое записывается вместо скрытых полей.
	// Если поле пустое, runtime использует `this field was redacted`.
	RedactionReplacement string
}

LoggingOptions controls privacy rules for generated repository logging.

RU: LoggingOptions управляет privacy-правилами для generated repository logging.

All fields are optional.

type ScaffoldMode

type ScaffoldMode string

ScaffoldMode controls editable ops scaffold write behavior.

RU: ScaffoldMode управляет режимом записи editable ops scaffold.

const (
	// ScaffoldInit creates scaffold files only when they do not exist yet.
	//
	// RU: ScaffoldInit создаёт scaffold-файлы только если их ещё нет.
	ScaffoldInit ScaffoldMode = "init"
	// ScaffoldSync updates only autogenerated scaffold blocks and preserves manual sections.
	//
	// RU: ScaffoldSync обновляет только autogenerated-блоки scaffold и сохраняет ручные секции.
	ScaffoldSync ScaffoldMode = "sync"
	// ScaffoldForce fully rewrites scaffold files.
	//
	// RU: ScaffoldForce полностью перезаписывает scaffold-файлы.
	ScaffoldForce ScaffoldMode = "force"
)

type ScaffoldPreset

type ScaffoldPreset string

ScaffoldPreset controls which operation templates are scaffolded.

RU: ScaffoldPreset управляет тем, какие шаблоны операций попадают в scaffold.

const (
	// ScaffoldAuto generates an opinionated baseline based on the inferred table kind.
	//
	// RU: ScaffoldAuto генерирует opinionated baseline на основе автоматически определённого типа таблицы.
	ScaffoldAuto ScaffoldPreset = "auto"

	// ScaffoldCRUD generates Create/Get/List/Update/Delete templates.
	//
	// RU: ScaffoldCRUD генерирует шаблоны Create/Get/List/Update/Delete.
	ScaffoldCRUD ScaffoldPreset = "crud"

	// ScaffoldSearch generates filter, sort and keyset-search templates.
	//
	// RU: ScaffoldSearch генерирует шаблоны фильтрации, сортировки и keyset-search.
	ScaffoldSearch ScaffoldPreset = "search"

	// ScaffoldAnalytics generates count/sum/avg/group-by analytics templates.
	//
	// RU: ScaffoldAnalytics генерирует шаблоны аналитики count/sum/avg/group-by.
	ScaffoldAnalytics ScaffoldPreset = "analytics"

	// ScaffoldTimeline generates event/feed-style templates based on FK links.
	//
	// RU: ScaffoldTimeline генерирует event/feed шаблоны на основе FK-связей.
	ScaffoldTimeline ScaffoldPreset = "timeline"
)

type Selection

type Selection struct {
	// Optional.
	//
	// Tables explicitly selects root tables for generation.
	//
	// RU: Tables явно задаёт корневые таблицы для генерации.
	Tables []string
	// Optional.
	//
	// Preset selects root tables when Tables is empty.
	//
	// When both Tables and Preset are empty, the runtime passes no table selector and the
	// generator keeps its default behavior: include all tables.
	//
	// RU: Preset выбирает корневые таблицы, когда Tables не заданы.
	// Если Tables и Preset пустые, runtime не передаёт селектор таблиц, и генератор
	// сохраняет поведение по умолчанию: включает все таблицы.
	Preset TablePreset
	// Optional.
	//
	// DependencyPolicy controls FK-based dependency expansion for selected tables.
	// When empty, the runtime uses `required_only`.
	//
	// RU: DependencyPolicy управляет FK-based расширением зависимостей для выбранных таблиц.
	// Если поле пустое, runtime использует `required_only`.
	DependencyPolicy DependencyPolicy
}

Selection controls which schema tables participate in generation. RU: Selection управляет тем, какие таблицы схемы участвуют в генерации.

All fields are optional. RU: Все поля опциональны.

type TablePreset

type TablePreset string

TablePreset controls the default table root selection when explicit Tables are not set. RU: TablePreset управляет выбором корневых таблиц по умолчанию, если Tables не заданы явно.

const (
	// TablePresetAll selects all schema tables.
	//
	// RU: TablePresetAll выбирает все таблицы схемы.
	TablePresetAll TablePreset = "all"
	// TablePresetRoots selects dependency roots.
	//
	// RU: TablePresetRoots выбирает корни графа зависимостей.
	TablePresetRoots TablePreset = "roots"
	// TablePresetLeaves selects dependency leaves.
	//
	// RU: TablePresetLeaves выбирает листья графа зависимостей.
	TablePresetLeaves TablePreset = "leaves"
)

Directories

Path Synopsis
cmd
genrepo command
internal
wrappers

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL