- шаги PocketBase переехали из файла в пакет internal/adapter/repo/pocketbase/migrations, файл на шаг с именем зарегистрированного шага; туда же имена коллекций, срок сессии — в provider.go - ключ migrations в docs/.docs.json наведён на этот каталог: прежнее значение указывало на несуществующий migrations/, и шаг гейта проходил зелёным при всякой правке схемы - app.go подключает пакет шагов явным пустым импортом: пропавшая ссылка на константы унесла бы регистрацию, и хранилище поднялось бы без коллекций
39 lines
2.2 KiB
Go
39 lines
2.2 KiB
Go
package pocketbase
|
|
|
|
import (
|
|
"github.com/pocketbase/pocketbase/core"
|
|
|
|
"git.vakhrushev.me/av/transcriber/internal/adapter/repo/pocketbase/migrations"
|
|
)
|
|
|
|
// BindPanelRules подчиняет правку задачи в панели тем же правилам перехода, что
|
|
// и правку из кода.
|
|
//
|
|
// Панель — вход в задачу наравне с конвейером, а не окно просмотра: ради правки
|
|
// она и покупалась, мёртвая задача оживляется сменой состояния. Но правка полем
|
|
// идёт мимо кода, который чистит служебные поля прошлого состояния, и владелец,
|
|
// «вернувший задачу в работу», получил бы задачу с прежним признаком захвата
|
|
// (захвату она не выдастся до конца срока) и с числом попыток на пределе (умрёт
|
|
// от первого же отказа). Узнать об этом ему неоткуда.
|
|
//
|
|
// Хук стоит на правке **запросом**, а не на всяком сохранении записи. Модельное
|
|
// событие не различает, кто пишет, и срабатывало бы на каждом переходе
|
|
// конвейера: тогда задержка, поставленная шагом вместе со сменой состояния,
|
|
// стиралась бы тем же сохранением, а число попыток мёртвой задачи — которое
|
|
// переход хранит намеренно — приходило бы владельцу нулём.
|
|
func BindPanelRules(app core.App) {
|
|
app.OnRecordUpdateRequest(migrations.JobsCollection).BindFunc(func(e *core.RecordRequestEvent) error {
|
|
original := e.Record.Original()
|
|
if original == nil || original.GetString("state") == e.Record.GetString("state") {
|
|
return e.Next()
|
|
}
|
|
|
|
e.Record.Set("acquisition_id", "")
|
|
e.Record.Set("acquire_time", "")
|
|
e.Record.Set("delay_time", "")
|
|
e.Record.Set("attempts", 0)
|
|
|
|
return e.Next()
|
|
})
|
|
}
|