private static void RemoveUnusedAssets(Process process, Contracts.Process.UpdateProcess updateProcess) { foreach (var assetToDependOn in process.Assets.Where(c => updateProcess.Assets.All(uc => uc.AssetId != c.AssetId)).ToList()) { process.Assets.Remove(assetToDependOn); } }
public Contracts.Process.Process Update(Contracts.Process.UpdateProcess updateProcess) { using (var db = new RAAPEntities(GetConnectionString())) { var process = db.Processes.FirstOrDefault(a => a.ProcessId == updateProcess.ProcessId); if (process == null) { throw new RAAPNotFoundException("Item not found."); } RiskCalculator.CheckRiskTypes(updateProcess, db); process.ApplyUpdate(updateProcess, db); RemoveUnusedAssets(process, updateProcess); AddAssets(db, process, updateProcess.Assets); RiskCalculator.CalculateRisk(process); db.SaveChanges(); return(process.ToContract(_userService)); } }
public static void ApplyUpdate(this Process dataItem, Contracts.Process.UpdateProcess update, RAAPEntities db) { dataItem.Enabled = update.Enabled; dataItem.Name = update.Name; dataItem.Description = update.Description; dataItem.ProcessCategoryId = update.Category.ProcessCategoryId; dataItem.UpdatedOn = DateTime.Now; dataItem.ResponsibleUserId = update.ResponsibleUserId; update.Evaluations.Where(e => e.EvaluationId == 0 && !string.IsNullOrEmpty(e.Text)).OrderBy(e => e.Revision).ForEach(e => dataItem.HtmlComments.Add(e.ToDataModel(db, dataItem))); //Remove deleted var risksToDelete = dataItem.ThreatRisks.Where(r => update.Risks.All(rr => rr.RiskId != r.ThreatRiskId)).ToArray(); foreach (var risk in risksToDelete) { dataItem.ThreatRisks.Remove(risk); } //Update existing update.Risks.Where(r => r.RiskId > 0).ForEach(risk => dataItem.ThreatRisks.First(r => r.ThreatRiskId == risk.RiskId).UpdateFrom(risk)); //Add new update.Risks.Where(r => r.RiskId <= 0).ForEach(risk => dataItem.ThreatRisks.Add(risk.ToDataModel())); }
public IHttpActionResult Put([FromBody] Contracts.Process.UpdateProcess update) { ProcessService.Update(update); return(Ok()); }