コード例 #1
0
        public Task Consume(ConsumeContext <CreateConcertCommand> context)
        {
            CreateConcertCommand command = context.Message;

            Logger.LogInformation($"Processing command Create concert: Maximum number of tickets:{command.MaximumNumberOfTickets}, Place: {command.Place}, Title: {command.Title} - started. ");

            try
            {
                Concert concert = ConcertFactory.Create(command.Place, command.MaximumNumberOfTickets, command.Date, command.Title, ConcertRepository.GetNextId());

                ConcertRepository.Add(concert);

                foreach (var @event in concert.Changes)
                {
                    var publisher = EventHandlerFactory.CreatePublisher(@event);
                    publisher.Publish(@event, context);
                }

                Logger.LogInformation($"Processing command Create concert: Maximum number of tickets:{command.MaximumNumberOfTickets}, Place: {command.Place}, Title: {command.Title} - finished successfully. ");
            }
            catch (IntialTicketsCapacityNotSet ticketsCapacityNotSetException)
            {
                Logger.LogError($"{ticketsCapacityNotSetException.Message}. Can not execute command Create concert: Maximum number of tickets:{command.MaximumNumberOfTickets}, Place: {command.Place}, Title: {command.Title}.Command rejected. ");
            }
            return(Task.CompletedTask);
        }
        public Task Consume(ConsumeContext <BuyConcertTicketsCommand> context)
        {
            BuyConcertTicketsCommand command = context.Message;

            Logger.LogInformation($"Processing command Buy concert tickets: Tickets to buy:{command.NumberOfTicketsToBuy}, User id: {command.UserId}, Concert id: {command.ConcertId} - started. ");

            try
            {
                /// kod unutar try bloka bi trebao da ide u poseban hendler
                Concert concert;

                if (!ConcertRepository.TryFindBy(command.ConcertId, out concert))
                {
                    return(Task.CompletedTask);
                }

                concert.BuyTickets(command.NumberOfTicketsToBuy, command.UserId);

                ConcertRepository.Save(concert);

                foreach (var @event in concert.Changes)
                {
                    var handler = EventHandlerFactory.CreatePublisher(@event);
                    handler.Publish(@event, context);
                }

                Logger.LogInformation($"Processing command Buy concert tickets: Tickets to buy:{command.NumberOfTicketsToBuy}, User id: {command.UserId}, Concert id: {command.ConcertId} - finished succesfully. ");
            } catch (MaximumNumberOfTicketsReached ticketsReachedException)
            {
                Logger.LogError($"{ticketsReachedException.Message}. Can not execute command Buy concert tickets: Tickets to buy:{command.NumberOfTicketsToBuy}, User id: {command.UserId}, Concert id: {command.ConcertId}.Command rejected. ");
            }
            return(Task.CompletedTask);
        }