/// <summary>
        /// Selects the source and destination.
        /// </summary>
        /// <param name="promoteCode">The promote code.</param>
        private static string SelectSourceAndDestination(PromoteCodeModel promoteCode)
        {
            var configFileReader = new ConfigFileReader();

            ServerDetailsModel serverDetails = configFileReader.ReadConfigFile(new ServerDetailsModel
            {
                Region = promoteCode.Region
            });

            var sourceFileName = serverDetails.SourceFileLocation + "\\" + promoteCode.FileName;

            return(sourceFileName);
        }
        /// <summary>
        /// Posts the specified promote code.
        /// </summary>
        /// <param name="promoteCode">The promote code.</param>
        /// <returns></returns>
        public HttpResponseMessage Post(PromoteCodeModel promoteCode)
        {
            if (String.IsNullOrEmpty(promoteCode.Region))
            {
                return(base.Request.CreateResponse(HttpStatusCode.BadRequest, "Please specify the region."));
            }

            SelectSourceAndDestination(promoteCode);
            GetConnectionString(promoteCode.Region);

            if (!Directory.Exists(DestinationLocation))
            {
                Directory.CreateDirectory(DestinationLocation);
            }

            CopyFilesAndZip("\\Scripts.zip");

            MoveCodeToServer();
            return(base.Request.CreateResponse(HttpStatusCode.Created, "Copy was successful."));
        }
        /// <summary>
        /// Posts the specified promote code.
        /// </summary>
        /// <param name="promoteCode">The promote code.</param>
        /// <returns></returns>
        public async Task <HttpResponseMessage> Post(PromoteCodeModel promoteCode)
        {
            if (String.IsNullOrEmpty(promoteCode.Region))
            {
                return(base.Request.CreateResponse(HttpStatusCode.BadRequest, "Please specify the region!"));
            }

            string sourceFileName = SelectSourceAndDestination(promoteCode);

            var serverDetails = new ConfigFileReader().ReadConfigFile(new ServerDetailsModel
            {
                Region = promoteCode.Region
            });

            serverDetails.SourceFileName = sourceFileName;

            //copy destination location to a private variable
            this.DestinationLocation = serverDetails.DestinationFileLocation;

            if (!Directory.Exists(serverDetails.DestinationFileLocation))
            {
                Directory.CreateDirectory(serverDetails.DestinationFileLocation);
            }

            var fileProcess = new FileProcessHandler();

            //Call a method to perform Xcopy
            fileProcess.ProcessXcopy(serverDetails);
            fileProcess.DeleteOldFile(serverDetails);
            fileProcess.ReplaceConfigFile(serverDetails);

            //perform the deployment to all servers deployment
            foreach (var server in serverDetails.ServerList)
            {
                await MoveCodeToServer(server);
            }

            return(Request.CreateResponse(HttpStatusCode.Created, "Deployment Completed"));
        }
 /// <summary>
 /// Selects the source and destination.
 /// </summary>
 /// <param name="promoteCode">The promote code.</param>
 private void SelectSourceAndDestination(PromoteCodeModel promoteCode)
 {
     if (promoteCode.Region == "DEV")
     {
         SourceLocation            = GetFromConfig("SqlBUILDS");
         DestinationLocation       = GetFromConfig("SqlDEV");
         ServerDeploymentDirectory = GetFromConfig("SqlDevDeploymentDirectory");
         IntermediateDirectory     = GetFromConfig("SqlTempDirectory");
     }
     if (promoteCode.Region == "ST")
     {
         SourceLocation            = GetFromConfig("SqlDEV");
         DestinationLocation       = GetFromConfig("SqlST");
         ServerDeploymentDirectory = GetFromConfig("SqlSTDeploymentDirectory");
         IntermediateDirectory     = GetFromConfig("SqlTempDirectory");
     }
     if (promoteCode.Region == "UAT")
     {
         SourceLocation            = GetFromConfig("SqlST");
         DestinationLocation       = GetFromConfig("SqlUAT");
         ServerDeploymentDirectory = GetFromConfig("SqlSTDeploymentDirectory");
         IntermediateDirectory     = GetFromConfig("SqlTempDirectory");
     }
 }