- база своя: два пула, захват одним UPDATE ... RETURNING, шаги схемы на goose под файловым замком, одна миграция начальной схемы вместо семи прежних - транспорт переписан на net/http: свои слои, свой ограничитель частоты, отдача файла с проверкой владельца; панель /_/ и пространство /api/ исчезли - по находкам ревью: журнал не пишет путь под корнем приложения, ключ бюджета читается справа налево, узнавание известного идёт читающим пулом
37 lines
2.1 KiB
Go
37 lines
2.1 KiB
Go
// Package migrations — шаги схемы базы.
|
|
//
|
|
// Шаг лежит своим файлом, имя файла начинается версией, и **применённый шаг не
|
|
// переписывается** — только новым файлом. Инвариант проекта держится так же, как
|
|
// держался прежде: изменение схемы это новый шаг, а не правка уехавшего.
|
|
//
|
|
// Шаги лежат отдельным каталогом, а не файлом внутри пакета хранилища, по
|
|
// внешней причине: сверка документов ловит изменённый шаг схемы при нетронутом
|
|
// `docs/database.md` по префиксу пути (`.av-dev.toml`, ключ `migrations` секции
|
|
// `[docs]`), а префикс наводится только на каталог.
|
|
//
|
|
// Регистрация идёт **перечнем**, а не глобальным списком библиотеки: провайдер
|
|
// заводится в точке входа и получает этот перечень доводом, поэтому два
|
|
// провайдера в одном процессе — например, сервис и проверка — не спорят за общее
|
|
// состояние.
|
|
package migrations
|
|
|
|
import (
|
|
"github.com/pressly/goose/v3"
|
|
)
|
|
|
|
// All — шаги схемы в порядке версий.
|
|
//
|
|
// Порядок исхода от порядка этого перечня не зависит: библиотека сортирует шаги
|
|
// по версии сама. Перечень собран ради того, чтобы шаг, добавленный файлом и
|
|
// забытый здесь, не оказался незамеченным: незарегистрированный шаг не
|
|
// накатывается вовсе.
|
|
func All() []*goose.Migration {
|
|
return []*goose.Migration{
|
|
goose.NewGoMigration(
|
|
202608220002,
|
|
&goose.GoFunc{RunTx: up202608220002},
|
|
&goose.GoFunc{RunTx: down202608220002},
|
|
),
|
|
}
|
|
}
|