migrator

package
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Oct 5, 2023 License: MIT Imports: 16 Imported by: 0

README

Мигратор для баз данных.

Компонент для провидений миграций, основан на пакете https://github.com/golang-migrate/migrate.

В контейнере объектов, доступна ссылка на объект github.com/golang-migrate/migrate/v4/Migrate.

Объект конфигурации.
type Config struct {
	Path string
}

Описание полей:

Поле Описание Значение по умолчанию
Path Путь до директории с миграциями, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --migrator.source
- переменная окружения MIGRATOR_SOURCE
- значение в конфиг файле migrator.source
file://./migrations/${db.driver}

Пакет так же использует объект конфигурации из пакета Клиент для баз данных для подключения к базе данных.

Важно. Мигратор использует контейнер объектов, для получения клиента для базы данных который реализует интерфейс driver.Connector, если пакет Клиент для баз данных используется полноценно, то получение выбранного клиента пройдет автоматически, если используется клиент под определенную СУБД, необходимо в ручную, указать тип клиента в объект конфигурации на этапе конфигурирования приложения.

Все поддерживаемые СУБД перечислены в пакете Клиент для баз данных.

Documentation

Index

Constants

View Source
const (
	PathFieldName = "migrator.source"

	DriverReplacement = "${db.driver}"

	PathDefault = "file://./migrations/" + DriverReplacement
)

Variables

View Source
var Component = &app.Component{
	Dependencies: app.Components{
		table.Component,
	},
	Constructor: func(container container.Container) error {
		return container.Provides(
			NewConfig,
			NewWithConfigurator,
		)
	},
	BindFlags: func(flagSet *pflag.FlagSet, container container.Container) error {
		return container.Invoke(func(config *Config) {
			flagSet.StringVar(&config.Path, PathFieldName, PathDefault, "path to migrations directory")
		})
	},
	Run: func(c container.Container) error {
		closer, err := container.Get[closer.Closer](c)
		if err != nil {
			return err
		}

		migrator, err := container.Get[*migrate.Migrate](c)
		if err != nil {
			return err
		}

		informer, err := container.Get[logger.Informer](c)
		if err != nil {
			return err
		}

		err = migrator.Up()

		if err != nil && err != migrate.ErrNoChange {
			return err
		}

		if err == migrate.ErrNoChange {
			return nil
		}

		version, _, err := migrator.Version()
		if err != nil {
			closer.Close()
			return err
		}

		informer.Infof("migrator: up to '%d' version", version)

		return nil
	},
}

Functions

func New

func New(
	config *Config,
	db client.DataBase,
	informer logger.Informer,
	tableReplacer table.Replacer,
) (*migrate.Migrate, error)

func NewWithConfigurator

func NewWithConfigurator(
	config *Config,
	configurator configurator.Configurator,
	db client.DataBase,
	informer logger.Informer,
	tableReplacer table.Replacer,
) (*migrate.Migrate, error)

Types

type Config

type Config struct {
	Path string
}

func Configuration

func Configuration(config *Config, configurator configurator.Configurator) *Config

func NewConfig

func NewConfig() *Config

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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