- internal/model: единый источник статусов задачи (Status, TraceStatus, машина переходов), без зависимости от storage. - internal/storage: совместимый мост (type Status = model.Status, re-export констант) — внешний код не меняется. - internal/events: шина событий (fan-out, блокирующий Publish с гарантией порядка), события задач/трейсов, отдельная логовая шина + LogWriter, Publisher/NilPublisher для внедрения в Core/Worker. - docs/ui-spec.md: спецификация десктопного UI (Fyne).
20 lines
928 B
Go
20 lines
928 B
Go
package events
|
||
|
||
// Publisher — минимальный интерфейс для встраивания шины в Core/Worker/Analyst.
|
||
//
|
||
// Core публикует доменные события через него; конкретная шина подставляется
|
||
// при сборке приложения. На время тестов или до создания UI можно
|
||
// использовать NilPublisher — безопасную no-op реализацию.
|
||
type Publisher interface {
|
||
Publish(e Event)
|
||
}
|
||
|
||
// NilPublisher — no-op издатель, чтобы компоненты могли работать без UI.
|
||
type NilPublisher struct{}
|
||
|
||
// Publish ничего не делает (совместимо с Publisher).
|
||
func (NilPublisher) Publish(Event) {}
|
||
|
||
// CompileTime-проверка: *Bus реализует Publisher.
|
||
var _ Publisher = (*Bus)(nil)
|
||
var _ Publisher = NilPublisher{} |