public async Task <ActionResult <Invoice> > Get([FromRoute] int number)
        {
            try
            {
                var request = new GetInvoiceByNumber {
                    Number = number
                };

                var invoice = await _useCases.Invoke <Invoice>(request);

                return(Ok(invoice));
            }
            catch (InvoiceNotFoundException ex)
            {
                _logger.LogError(ex, "Get invoice failure");

                return(NotFound(ex.Message));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error getting invoice");

                while (ex.InnerException != null)
                {
                    ex = ex.InnerException;
                }

                return(StatusCode(500, new { message = ex.Message, details = ex.StackTrace }));
            }
        }
        public async Task <Invoice> Invoke(GetInvoiceByNumber request)
        {
            var invoice = await _repository.GetByNumber(request.Number);

            if (invoice == null)
            {
                throw new InvoiceNotFoundException(request.Number);
            }

            return(invoice);
        }