private async Task <bool> UpdateOrderStatus(WompiWebhook webhook)
        {
            var   spec  = new OrderByReferenceSpecification(webhook.data.transaction.reference);
            Order order = await _unitOfWork.Repository <Order>().GetEntityWithSpec(spec);

            switch (webhook.data.transaction.status)
            {
            case "APPROVED":
                order.Status = OrderStatus.Approved;
                break;

            case "DECLINED":
                order.Status = OrderStatus.Declined;
                break;

            case "VOIDED":
                order.Status = OrderStatus.Voided;
                break;

            case "ERROR":
                order.Status = OrderStatus.Error;
                break;
            }

            _unitOfWork.Repository <Order>().Update(order);

            var result = await _unitOfWork.Complete();

            return(order == null);
        }
        public async Task <string> GenerateReferenceOrderAsync()
        {
            Random       random          = new Random();
            const string validCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
            const int    lengthReference = 30;

            string randomReference;
            Order  orderByReference = null;

            do
            {
                randomReference = new string(Enumerable.Repeat(validCharacters, lengthReference)
                                             .Select(s => s[random.Next(s.Length)]).ToArray());

                var spec = new OrderByReferenceSpecification(randomReference);

                orderByReference = await _unitOfWork.Repository <Order>()
                                   .GetEntityWithSpec(spec);
            } while (orderByReference != null);

            return(randomReference);
        }