- адреса приложения переехали в своё пространство `/app/`, опрос готовности убран целиком: рубеж и причину остановки владелец узнаёт карточкой записи, текст — отдельным адресом названного вида - заведена единая точка отображения доменной ошибки и слой, приводящий к той же форме отказы библиотеки: тело несёт машиночитаемый код рядом с сообщением - у записи появились имя файла отправителя, длительность и размер своими колонками, а у ленты владельца — свой индекс: без него страница сканировала весь архив сервиса
57 lines
3.9 KiB
Go
57 lines
3.9 KiB
Go
// Package migrations — шаги схемы хранилища и имена коллекций, которые они
|
|
// заводят.
|
|
//
|
|
// Схема заводится версионированными шагами, и применённый шаг не переписывается
|
|
// — только новым шагом. Инвариант проекта перенесён дословно: хранилище считает
|
|
// применённое по **имени шага**, а не по пути файла, поэтому имена в
|
|
// `Register` ниже не переносятся и не переименовываются, даже если файл переехал.
|
|
//
|
|
// Шаги лежат своим каталогом, а не файлом внутри пакета репозитория, и причина
|
|
// внешняя: сверка документов ловит изменённый шаг схемы при нетронутом
|
|
// `docs/database.md` по префиксу пути (`.av-dev.toml`, ключ `migrations` секции
|
|
// `[docs]`), а префикс наводится только на каталог. Пока шаги лежали файлом,
|
|
// наводить его
|
|
// было не на что, и проверка молчала на всякой правке схемы.
|
|
package migrations
|
|
|
|
import (
|
|
pbmigrations "github.com/pocketbase/pocketbase/migrations"
|
|
)
|
|
|
|
// Имена коллекций живут здесь, рядом с шагом, который их заводит. Они же — часть
|
|
// пути к файлу в раскладке хранилища и часть адреса ссылки на него, поэтому
|
|
// меняются только новым шагом схемы.
|
|
const (
|
|
FilesCollection = "files"
|
|
// JobsCollection — прежняя коллекция задач. Шаг 202608140002 её удаляет;
|
|
// имя остаётся здесь, потому что на него ссылаются прежние шаги схемы, а
|
|
// применённый шаг не переписывается.
|
|
JobsCollection = "transcribe_jobs"
|
|
// RecordsCollection — аудиозапись, центральная сущность сервиса. Имя в
|
|
// snake_case, как у соседей по схеме: одно исключение разошлось бы молча по
|
|
// константе имён, запросу захвата, правилам панели и запрету удаления.
|
|
RecordsCollection = "audio_records"
|
|
TextsCollection = "texts"
|
|
StructuresCollection = "structures"
|
|
RecognitionsCollection = "recognitions"
|
|
RecordEventsCollection = "record_events"
|
|
TopicsCollection = "topics"
|
|
// UsersCollection заводит не наш шаг, а системный шаг библиотеки. Имя стоит
|
|
// здесь потому, что на него ссылаются и шаги схемы, и проверка предъявителя
|
|
// на приёме: строковый литерал в двух местах разошёлся бы молча.
|
|
UsersCollection = "users"
|
|
)
|
|
|
|
// Шаг регистрируется в списке приложения при загрузке пакета, а накатывает его
|
|
// `apis.Serve` прежде, чем поднять сервер.
|
|
func init() {
|
|
pbmigrations.Register(up202608110001, down202608110001, "202608110001_init.go")
|
|
pbmigrations.Register(up202608120001, down202608120001, "202608120001_oidc_login.go")
|
|
pbmigrations.Register(up202608140001, down202608140001, "202608140001_record_owner.go")
|
|
pbmigrations.Register(up202608140002, down202608140002, "202608140002_record_centric_model.go")
|
|
pbmigrations.Register(up202608140003, down202608140003, "202608140003_owner_required.go")
|
|
pbmigrations.Register(up202608150001, down202608150001, "202608150001_record_contract_columns.go")
|
|
}
|
|
|
|
func ptr[T any](v T) *T { return &v }
|