Возникли вопросы:
1) как лучше управлять тем, что SyncVersionTasks(VersionId) должен тригерить по каждой задаче SyncTaskHistory(TaskId), а после синка истории по всем задачам должен отработать CalculateKPI?
Первую часть на данный момент решил тем, что SyncVersionTasks паблишит по каждой задаче событие TaskSynced с TaskId, а листенер диспатчит в CommandBus комманду SyncTaskHistory(TaksId). Но как завязаться на то, что нужно задиспатчить CalculateKPI именно после того, как подтянется вся история?
2) Пользователю в UI нужна кнопка - обновить KPI, которая влечет за собой выполнение SyncVersionTasks(VersionId) => SyncTaskHistory(TaskId) * N tasks => CalclulateKPI(VersionId).
Как уведомить пользователя, что KPI пересчитан? Пробрасывать по всем коммандам/событиям id пользователя кажется бредовой идеей. Пока вижу вариант:
- отображать пользователю всплывашку - пересчёт KPI запущен
- в редис/кеш писать id пользователя и, что он ждёт пересчёт KPI
- на странице отображать кто, когда запустил пересчёт KPI
- в хендлере CalculateKPI бросать событие KPICalculated, в листенере которого забирать данные из кеша => слать уведомление пользователю => удалять кеш