feat(events): EventBus + domain-модель статусов
- 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).
This commit is contained in:
20
internal/events/publisher.go
Normal file
20
internal/events/publisher.go
Normal file
@@ -0,0 +1,20 @@
|
||||
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{}
|
||||
Reference in New Issue
Block a user