приём и чтение записей сведены к одному контракту приложения
- адреса приложения переехали в своё пространство `/app/`, опрос готовности убран целиком: рубеж и причину остановки владелец узнаёт карточкой записи, текст — отдельным адресом названного вида - заведена единая точка отображения доменной ошибки и слой, приводящий к той же форме отказы библиотеки: тело несёт машиночитаемый код рядом с сообщением - у записи появились имя файла отправителя, длительность и размер своими колонками, а у ленты владельца — свой индекс: без него страница сканировала весь архив сервиса
This commit is contained in:
@@ -76,6 +76,59 @@ func StageByName(name string) (Stage, bool) {
|
||||
return Stage{}, false
|
||||
}
|
||||
|
||||
// ListFilter — состояние записи, по которому её отбирает список приложения.
|
||||
//
|
||||
// Состояний три, а не два, и это не педантизм. Остановленная запись не в работе
|
||||
// и не завершена: при отборе надвое она выпала бы из обеих половин — исчезла бы
|
||||
// из списка при любом значении отбора, — хотя ради неё человек список и
|
||||
// открывает.
|
||||
type ListFilter string
|
||||
|
||||
const (
|
||||
// ListFilterWorking — запись идёт по конвейеру.
|
||||
ListFilterWorking ListFilter = "working"
|
||||
// ListFilterHalted — запись остановлена признаком.
|
||||
ListFilterHalted ListFilter = "halted"
|
||||
// ListFilterDone — запись прошла конвейер.
|
||||
ListFilterDone ListFilter = "done"
|
||||
)
|
||||
|
||||
// ParseListFilter узнаёт состояние отбора по его имени. Второе значение ложно у
|
||||
// имени, которого в перечне нет: такой отбор — негодный ввод, а не пустая
|
||||
// выборка.
|
||||
func ParseListFilter(v string) (ListFilter, bool) {
|
||||
switch ListFilter(v) {
|
||||
case ListFilterWorking, ListFilterHalted, ListFilterDone:
|
||||
return ListFilter(v), true
|
||||
}
|
||||
return "", false
|
||||
}
|
||||
|
||||
// TerminalStages — рубежи, из которых запись в работу не берут.
|
||||
//
|
||||
// Выводится из дескриптора наравне с WorkingStages: отбор списка — очередной
|
||||
// потребитель словаря рубежей, и перечислять их у него строкой запроса нельзя.
|
||||
// Рубеж, добавленный конвейером, иначе молча поменял бы состав всех трёх
|
||||
// состояний отбора.
|
||||
func TerminalStages() []Stage {
|
||||
out := make([]Stage, 0, len(stages))
|
||||
for _, s := range stages {
|
||||
if s.Terminal {
|
||||
out = append(out, s)
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// StageNames разворачивает рубежи в их имена — для запроса к хранилищу.
|
||||
func StageNames(list []Stage) []string {
|
||||
out := make([]string, 0, len(list))
|
||||
for _, s := range list {
|
||||
out = append(out, s.Name)
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// StuckLimits — пределы простоя, приходящие из настроек.
|
||||
type StuckLimits struct {
|
||||
// Own — предел на своей работе.
|
||||
|
||||
Reference in New Issue
Block a user