public async Task Handle(TicketPriorityEvent message)
        {
            var ticketTask      = _ticketRepository.Find(message.AggregateRootId.ToString());
            var oldPriorityTask = _priorityRepository.Find(message.FromPriorityId);
            var newPriorityTask = _priorityRepository.Find(message.ToPriorityId);

            await Task.WhenAll(ticketTask, oldPriorityTask, newPriorityTask);

            var ticket      = ticketTask.Result;
            var oldPriority = oldPriorityTask.Result;
            var newPriority = newPriorityTask.Result;

            // Update ticket in ReadModel
            ticket.Priority = newPriority;

            // Add ticket event in ReadModel
            var ticketEvent = new PriorityEventDto(oldPriority, newPriority)
            {
                Id       = Guid.NewGuid().ToString(),
                TicketId = message.AggregateRootId.ToString(),
                Created  = message.Created,
                UserId   = message.UserId.ToString(),
            };

            await Task.WhenAll(
                _websocketEmittor.Emit(new ReduxUpdatePriorityAction(_mapper.Map <TicketPriorityEventViewModel>(ticketEvent))),
                _ticketRepository.Update(ticket),
                _eventRepository.Add(ticketEvent));
        }
        protected override async Task HandleCore(TicketPriorityDomainEvent message)
        {
            var ticketTask      = _ticketRepository.Find(message.AggregateRootId.ToString());
            var oldPriorityTask = _priorityRepository.Find(message.FromPriorityId);
            var newPriorityTask = _priorityRepository.Find(message.ToPriorityId);

            await Task.WhenAll(ticketTask, oldPriorityTask, newPriorityTask);

            var ticket      = ticketTask.Result;
            var oldPriority = oldPriorityTask.Result;
            var newPriority = newPriorityTask.Result;

            // Update ticket in ReadModel
            ticket.Priority = newPriority;

            // Add ticket event in ReadModel
            var ticketEvent = new PriorityEventDto(oldPriority, newPriority)
            {
                Id       = Guid.NewGuid().ToString(),
                TicketId = message.AggregateRootId.ToString(),
                Created  = message.Created,
                UserId   = message.UserId.ToString(),
            };

            await UpdateDb(ticket, ticketEvent);

            await Task.WhenAll(EmitToFrontEnd(ticketEvent), AddOnBus(ticket, ticketEvent));
        }
        public async Task Handle(TicketCreateEvent message)
        {
            var priority = _priorityRepository.Find(message.PriorityId);
            var status   = _statusRepository.Find(message.StatusId);

            await Task.WhenAll(priority, status);

            var ticket = new TicketDto
            {
                Id          = message.AggregateRootId.ToString(),
                Description = message.Description,
                Title       = message.Title,
                Priority    = priority.Result,
                Status      = status.Result,
                Files       = message.Files?.Select(f => new FileDto
                {
                    Id   = f.Id.ToString(),
                    Name = f.Name,
                    Type = f.Type,
                    Size = f.Size
                }).ToList()
            };

            var @event = new CreatedEventDto
            {
                Id       = Guid.NewGuid().ToString(),
                TicketId = message.AggregateRootId.ToString(),
                Created  = message.Created,
                UserId   = message.UserId.ToString(),
            };

            await Task.WhenAll(AddInDb(ticket, @event), EmitToFrontEnd(ticket, @event));
        }