public Task Handle(TicketCreatedEvent @event)
        {
            var createdTicket = new Ticket
            {
                Id               = @event.Ticket.Id,
                Number           = @event.Ticket.Number,
                CreatedDate      = @event.Ticket.CreatedDate,
                TicketCategoryId = @event.Ticket.TicketCategoryId,
                TicketStatus     = @event.Ticket.TicketStatus
            };

            var ticketQueue = _unitOfWork.EmpireQueues.Find(q => q.TicketCategoryId == createdTicket.TicketCategoryId).Single();

            createdTicket.QueueId = ticketQueue.Id;

            _unitOfWork.Tickets.Create(createdTicket);
            ++ticketQueue.ActiveWaitersCount;
            _unitOfWork.EmpireQueues.UpdateQueue(ticketQueue);
            var updateEmpireQueueCommand = new UpdateEmpireQueueCommand(ticketQueue);

            _unitOfWork.SourceEvent(updateEmpireQueueCommand);
            _unitOfWork.BroadcastServerEvent("empire-queue-updated-event", ticketQueue);

            return(Task.CompletedTask);
        }
        public Task Handle(TicketCategoryUpdatedEvent @event)
        {
            var updatedTicketCategory = new TicketCategory
            {
                Id = @event.TicketCategory.Id,
                PriorityCoefficient = @event.TicketCategory.PriorityCoefficient,
                Name = @event.TicketCategory.Name
            };

            _unitOfWork.TicketCategories.UpdateTicketCategory(updatedTicketCategory);

            var selectedQueue = _unitOfWork.EmpireQueues.Find(eq => eq.TicketCategoryId == @event.TicketCategory.Id).SingleOrDefault();

            if (selectedQueue == null)
            {
                return(Task.CompletedTask);
            }

            selectedQueue.QueueWeight = @event.TicketCategory.PriorityCoefficient;
            selectedQueue.Name        = @event.TicketCategory.Name;
            _unitOfWork.EmpireQueues.UpdateQueue(selectedQueue);
            UpdateEmpireQueueCommand updateEmpireQueueCommand = new UpdateEmpireQueueCommand(selectedQueue);

            _unitOfWork.SourceEvent(updateEmpireQueueCommand);
            return(Task.CompletedTask);
        }
        private void StartUpdateEmpireQueueCommand(EmpireQueue empireQueue)
        {
            var updateEmpireQueueCommand = new UpdateEmpireQueueCommand(empireQueue);

            _unitOfWork.SourceEvent(updateEmpireQueueCommand);
        }