private string SaveDeployState(DeployState state) { if (state.Build == null) { throw new ArgumentNullException("Missing build"); } if (state.Branch == null) { throw new ArgumentNullException("Missing branch"); } if (state.Component == null) { throw new ArgumentNullException("Missing component"); } if (state.Environment == null) { throw new ArgumentNullException("Missing environment"); } if (state.MachineList == null) { throw new ArgumentNullException("Missing machineList"); } if (state.DeployBatchRequestItemId == null) { throw new ArgumentNullException("Missing deployBatchRequestItemId"); } var sqlDeployState = new SqlDeployState { ID = state.Id, ProjectID = state.ProjectId, BranchID = state.Branch.Id, BranchJson = state.Branch.ToJson(), BuildID = state.Build.Id, BuildJson = state.Build.ToJson(), ComponentID = state.Component.Id, ComponentJson = state.Component.ToJson(), EnvironmentID = state.Environment.Id, EnvironmentName = state.Environment.EnvironmentName, EnvironmentJson = state.Environment.ToJson(), DeployBatchRequestItemID = state.DeployBatchRequestItemId, DeploymentCompleteDateTimeUtc = state.DeploymentCompleteDateTimeUtc, DeploymentStartedDateTimeUtc = state.DeploymentStartedDateTimeUtc, ErrorDetails = state.ErrorDetails, SortableVersion = state.Build.SortableVersion, EnumDeployStatusID = (int)state.Status, CreatedByUserName = state.CreatedByUserName, CreatedDateTimeUtc = state.CreatedDateTimeUtc, UpdatedByUserName = state.UpdatedByUserName, UpdatedDateTimeUtc = state.UpdatedDateTimeUtc, SubmittedDateTimeUtc = state.SubmittedDateTimeUtc }; if(state.MessageList != null) { foreach(var message in state.MessageList) { if(string.IsNullOrEmpty(message.Id)) { message.Id = Guid.NewGuid().ToString(); } } sqlDeployState.MessageListJson = state.MessageList.ToJson(); } var sqlMachineList = new List<SqlDeployStateMachine>(); foreach (var machine in state.MachineList) { var sqlMachine = new SqlDeployStateMachine { ID = machine.Id, DeployStateID = sqlDeployState.ID, MachineID = machine.Id, MachineName = machine.MachineName, MachineJson = machine.ToJson(), CreatedByUserName = _userIdentity.UserName, CreatedDateTimeUtc = DateTime.UtcNow, UpdatedByUserName = _userIdentity.UserName, UpdatedDateTimeUtc = DateTime.UtcNow }; sqlMachineList.Add(sqlMachine); } using (var db = _sqlConnectionInfo.GetDB()) { if (string.IsNullOrEmpty(sqlDeployState.ID) || !DeployStateExists(sqlDeployState.ID)) { if (string.IsNullOrEmpty(sqlDeployState.ID)) { sqlDeployState.ID = Guid.NewGuid().ToString(); } db.Insert("DeployState", "ID", false, sqlDeployState); foreach (var machine in sqlMachineList) { machine.ID = Guid.NewGuid().ToString(); machine.DeployStateID = sqlDeployState.ID; db.Insert("DeployStateMachine", "ID", false, machine); } } else { db.Update("DeployState", "ID", sqlDeployState); } } return sqlDeployState.ID; }
public DeployState CreateDeployState(DeployBuild build, DeployProjectBranch branch, DeployEnvironment environment, DeployComponent component, IEnumerable<DeployMachine> machineList, string deployBatchRequestItemId) { if (build == null) { throw new ArgumentNullException("Missing build"); } if (branch == null) { throw new ArgumentNullException("Missing branch"); } if (component == null) { throw new ArgumentNullException("Missing component"); } if (environment == null) { throw new ArgumentNullException("Missing environment"); } if (machineList == null) { throw new ArgumentNullException("Missing machineList"); } if (deployBatchRequestItemId == null) { throw new ArgumentNullException("Missing deployBatchRequestItemId"); } var sqlDeployState = new SqlDeployState { ID = Guid.NewGuid().ToString(), ProjectID = build.ProjectId, BranchID = branch.Id, BranchJson = branch.ToJson(), BuildID = build.Id, BuildJson = build.ToJson(), ComponentID = component.Id, ComponentJson = component.ToJson(), EnvironmentID = environment.Id, EnvironmentName = environment.EnvironmentName, EnvironmentJson = environment.ToJson(), DeployBatchRequestItemID = deployBatchRequestItemId, DeploymentCompleteDateTimeUtc = null, DeploymentStartedDateTimeUtc = null, ErrorDetails = null, SortableVersion = build.SortableVersion, EnumDeployStatusID = (int)EnumDeployStatus.NotStarted, CreatedByUserName = _userIdentity.UserName, CreatedDateTimeUtc = DateTime.UtcNow, UpdatedByUserName = _userIdentity.UserName, UpdatedDateTimeUtc = DateTime.UtcNow, SubmittedDateTimeUtc = DateTime.UtcNow }; var branchJson = branch.ToJson(); var buildJson = build.ToJson(); var componentJson = component.ToJson(); var environmentJson = environment.ToJson(); using(var db = _sqlConnectionInfo.GetDB()) { var deployStateSql = PetaPoco.Sql.Builder .Append("INSERT INTO DeployState (ID, DeployBatchRequestItemID, EnumDeployStatusID, ProjectID, BranchID, BuildID, EnvironmentID, EnvironmentName, ComponentID,") .Append("BranchJson, BuildJson, EnvironmentJson, ComponentJson, SubmittedDateTimeUtc, DeploymentStartedDateTimeUtc, DeploymentCompleteDateTimeUtc, ") .Append("ErrorDetails, SortableVersion, CreatedByUserName, CreatedDateTimeUtc, UpdatedByUserName, UpdatedDateTimeUtc)") .Append("VALUES (@ID, @DeployBatchRequestItemID, @EnumDeployStatusID, @ProjectID, @BranchID, @BuildID, @EnvironmentID, @EnvironmentName, @ComponentID,", sqlDeployState) .Append("@BranchJson, @BuildJson, @EnvironmentJson, @ComponentJson, @SubmittedDateTimeUtc, @DeploymentStartedDateTimeUtc, @DeploymentCompleteDateTimeUtc,", sqlDeployState) .Append("@ErrorDetails, @SortableVersion, @CreatedByUserName, @CreatedDateTimeUtc, @UpdatedByUserName, @UpdatedDateTimeUtc)", sqlDeployState); db.Execute(deployStateSql); foreach(var machine in machineList) { var sqlMachine = new SqlDeployStateMachine { ID = Guid.NewGuid().ToString(), DeployStateID = sqlDeployState.ID, MachineID = machine.Id, MachineName = machine.MachineName, MachineJson = machine.ToJson(), CreatedByUserName = _userIdentity.UserName, CreatedDateTimeUtc = DateTime.UtcNow, UpdatedByUserName = _userIdentity.UserName, UpdatedDateTimeUtc = DateTime.UtcNow }; var machineSql = PetaPoco.Sql.Builder .Append("INSERT INTO DeployStateMachine (ID, DeployStateID, MachineID, MachineName, MachineJson, CreatedByUserName, CreatedDateTimeUtc, UpdatedByUserName, UpdatedDateTimeUtc)") .Append("VALUES (@ID, @DeployStateID, @MachineID, @MachineName, @MachineJson, @CreatedByUserName, @CreatedDateTimeUtc, @UpdatedByUserName, @UpdatedDateTimeUtc)", sqlMachine); db.Execute(machineSql); } } return GetDeployState(sqlDeployState.ID); }