public void PublishCreditApprovedEvent(CreditApprovedEvent @event)
        {
            var message = JsonConvert.SerializeObject(@event);
            var headers = new Dictionary <string, object>();

            headers.Add("type", "CreditApprovedEvent");

            _publisher.Publish(message: message, routingKey: "customer.events", headers);
        }
        public async Task Handle(CreditApprovedEvent @event)
        {
            Console.WriteLine("CreditApprovedEvent");

            // get order by id
            var order = await _orderService.GetOrderById(@event.OrderId);

            // update status to approved
            order.Status = "APPROVED";

            // save order
            await _orderService.UpdateOrderById(@event.OrderId, order);
        }
        public async Task Handle(OrderCreatedEvent @event)
        {
            // get customer by id (service)
            var customer = await _customerService.GetCustomerById(@event.CustomerId);

            if (customer != null)
            {
                // check if total credit <= available credit (method)
                if (customer.AvailableCredit >= @event.TotalCredit)
                {
                    // TODO remove totalCredit from AvailableCredit.

                    var creditApprovedEvent = new CreditApprovedEvent
                                              (
                        id: Guid.NewGuid(),
                        timeStamp: DateTime.Now,
                        orderId: @event.OrderId
                                              );

                    // send approved event
                    _publisher.PublishCreditApprovedEvent(creditApprovedEvent);
                }
                else
                {
                    var creditRejectedEvent = new CreditRejectedEvent
                                              (
                        id: Guid.NewGuid(),
                        timeStamp: DateTime.Now,
                        orderId: @event.OrderId
                                              );

                    // send rejected event
                    _publisher.PublishCreditRejectedEvent(creditRejectedEvent);
                }
            }
            else
            {
                Console.WriteLine($"Customer with {@event.CustomerId} does not exist!");
            }
        }