public async Task <ActionResult <ConfigResult> > GetConfig()
        {
            var maintResult = healthcheck.GetMaintenanceState();

            if (!maintResult.SiteDown)
            {
                // Only run Dynamics healthcheck if site isn't already going down for maintenance. Check for CRM connectivity, immediately return error if fails
                var crmHealthy = await healthcheck.CRMHealthcheck();

                if (!crmHealthy)
                {
                    var crmFailResult = healthcheck.GetConfigResult(string.Empty, string.Empty, true);
                    return(Ok(crmFailResult));
                }
            }

            // If site is down for maintenance, or Dynamics check passes, return maintenance info
            return(Ok(maintResult));
        }
        public async Task <ActionResult <string> > Create(Submission submission)
        {
            try
            {
                // If site is in maintenance mode, return special message
                var maintResult = healthcheck.GetMaintenanceState();

                if (maintResult.SiteDown)
                {
                    Response.StatusCode = 503;

                    return(new JsonResult(new { title = "The site is undergoing scheduled maintenance. Please try submitting later." }));
                }

                // Submit supplier form
                var referenceNumber = await commandBus.Invoke <string>(new PersistSupplierSubmissionCommand(submission));

                return(new JsonResult(new { submissionId = referenceNumber, referenceNumber }));
            }
            catch (ValidationException e)
            {
                // Temporarily hand validation exceptions to the client - need to remove when
                // Dynamics handler is async from submission
                var referenceNumber = e.Value?.ToString();
                var pd = new ProblemDetails()
                {
                    Status = (int)HttpStatusCode.BadRequest,
                    Detail = e.Message
                };
                pd.Extensions.Add("submissionReferenceNumber", referenceNumber);
                pd.Extensions.Add("traceId", HttpContext.TraceIdentifier);
                throw new HttpResponseException($"'{referenceNumber}' validation error: {e.Message}", e)
                      {
                          Status = (int)HttpStatusCode.BadRequest,
                          Value  = pd
                      };
            }
        }