public async Task <ActionResult <IEnumerable <TemplateOut> > > GetTemplates() { var templates = await _Context.Templates.ToListAsync(); var templateOut = new TemplateOut[templates.Count]; for (var i = 0; i < templates.Count; i++) { templateOut[i] = TemplateToTemplateOut(templates[i]); } return(templateOut); }
public async Task <IActionResult> PutTemplate(TemplateOut templateOut) { var unpacked = TemplateOutToTemplateAndPaths(templateOut); _Context.Entry(unpacked.Item1).State = EntityState.Modified; var storedPaths = _Context.Paths.AsNoTracking().Where(path => path.TemplateID == unpacked.Item1.ID).ToList(); foreach (var p in unpacked.Item2) { var stored = false; for (var i = 0; i < storedPaths.Count; i++) { if (storedPaths[i].ID == p.ID) { stored = true; storedPaths.RemoveAt(i); _Context.Entry(p).State = EntityState.Modified; break; } } if (!stored) { _Context.Paths.Add(p); } } foreach (var deleted in storedPaths) { _Context.Paths.Remove(deleted); } try { await _Context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!TemplateExists(unpacked.Item1.ID)) { return(NotFound()); } else { throw; } } return(NoContent()); }
private (Template, List <Path>) TemplateOutToTemplateAndPaths(TemplateOut templateOut) { var template = templateOut.ToTemplate(); var paths = new List <Path>(); foreach (var p in templateOut.Sources) { paths.Add(p.ToPath(template.ID, true)); } foreach (var p in templateOut.Targets) { paths.Add(p.ToPath(template.ID, false)); } return(template, paths); }
private TemplateOut TemplateToTemplateOut(Template template) { var tOut = TemplateOut.FromTemplate(template); foreach (var path in GetPaths(template.ID)) { if (path.Source) { tOut.Sources.Add(PathOut.FromPath(path)); } else { tOut.Targets.Add(PathOut.FromPath(path)); } } return(tOut); }
public async Task <ActionResult <TemplateOut> > PostTemplate(TemplateOut templateOut) { var unpacked = TemplateOutToTemplateAndPaths(templateOut); _Context.Templates.Add(unpacked.Item1); await _Context.SaveChangesAsync(); var templateRet = TemplateToTemplateOut(unpacked.Item1); foreach (var p in unpacked.Item2) { p.TemplateID = templateRet.ID; _Context.Paths.Add(p); } await _Context.SaveChangesAsync(); return(CreatedAtAction("GetTemplate", new { id = templateRet.ID }, templateRet)); }