protected NotFoundObjectResult NotFound(string errorMessage = null)
        {
            var response = new ApiErrorResponse
            {
                ErrorCode = ErrorCodes.NotFound,
                Error     = errorMessage ?? DefaultNotFoundErrorMessage,
            };

            return(new NotFoundObjectResult(response));
        }
        protected BadRequestObjectResult BadRequest(string errorMessage)
        {
            var body = new ApiErrorResponse
            {
                Error = errorMessage,
            };

            var res = new BadRequestObjectResult(body);

            return(res);
        }
        /// <summary>
        /// Returns a <see cref="ApiErrorResponse"/> containing the validation error messages.
        /// Status code is <see cref="HttpStatusCode.BadRequest"/>.
        /// </summary>
        protected IActionResult ValidationFailed(IList <ValidationResult> validationResult)
        {
            var errorMessages = validationResult.Select(x => x.ErrorMessage).ToList();
            var body          = new ApiErrorResponse
            {
                ErrorCode = ErrorCodes.InvalidRequest,
                Error     = errorMessages.Count == 1 ? errorMessages[0] : null,
                Errors    = errorMessages.Count > 1 ? errorMessages : null
            };

            Logger.LogInformation("Validation failed: {message}", errorMessages);

            return(new BadRequestObjectResult(body));
        }
        /// <summary>
        /// Indicates that application failed with an specific <see cref="HttpStatusCode"/>.
        /// The response body will be of type <see cref="ApiErrorResponse"/>.
        /// </summary>
        protected IActionResult Failed(HttpStatusCode statusCode, string errorMessage, string errorCode)
        {
            Logger.LogWarning(errorMessage);

            var errorResponse = new ApiErrorResponse
            {
                ErrorCode = errorCode,
                Error     = errorMessage,
            };

            var result = new ObjectResult(errorResponse)
            {
                StatusCode = (int)statusCode,
            };

            return(result);
        }
        /// <summary>
        /// Indicates that the request has failed, returning status code 500.
        /// The response body will be of type <see cref="ApiErrorResponse"/>.
        /// </summary>
        protected IActionResult Failed(string message, Exception ex)
        {
            Logger.LogError(ex, message);

            var errorResponse = new ApiErrorResponse
            {
                ErrorCode = ErrorCodes.InternalServerError,
                Error     = message,
            };

            var result = new ObjectResult(errorResponse)
            {
                StatusCode = (int)HttpStatusCode.InternalServerError,
            };

            return(result);
        }