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() }) }