/// <summary> /// Prepare an XML definition containing details of the report /// </summary> /// <param name="metaReportForUpdate">The meta report payload</param> /// <returns></returns> private string PrepareMetaDefinition(MetaReportForUpdateDto metaReportForUpdate) { // Prepare XML XmlDocument meta = new XmlDocument(); var ns = ""; // urn:pvims-org:v3 XmlNode rootNode = null; XmlAttribute attrib; XmlDeclaration xmlDeclaration = meta.CreateXmlDeclaration("1.0", "UTF-8", null); meta.AppendChild(xmlDeclaration); rootNode = meta.CreateElement("MetaReport", ns); attrib = meta.CreateAttribute("Type"); attrib.InnerText = metaReportForUpdate.ReportType.ToString(); rootNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("CoreEntity"); attrib.InnerText = metaReportForUpdate.CoreEntity; rootNode.Attributes.Append(attrib); meta.AppendChild(rootNode); return(meta.InnerXml); }
public async Task <IActionResult> UpdateMetaReport(long id, [FromBody] MetaReportForUpdateDto metaReportForUpdate) { if (metaReportForUpdate == null) { ModelState.AddModelError("Message", "Unable to locate payload for new request"); } if (Regex.Matches(metaReportForUpdate.ReportName, @"[a-zA-Z0-9 ]").Count < metaReportForUpdate.ReportName.Length) { ModelState.AddModelError("Message", "Report name contains invalid characters (Enter A-Z, a-z, 0-9, space)"); } var coreEntityFromRepo = await _metaTableRepository.GetAsync(f => f.TableName == metaReportForUpdate.CoreEntity); if (coreEntityFromRepo == null) { ModelState.AddModelError("Message", "Unable to locate core entity"); } if (!string.IsNullOrWhiteSpace(metaReportForUpdate.ReportDefinition)) { if (Regex.Matches(metaReportForUpdate.ReportDefinition, @"[-a-zA-Z0-9 .,]").Count < metaReportForUpdate.ReportDefinition.Length) { ModelState.AddModelError("Message", "Report definition contains invalid characters (Enter A-Z, a-z, 0-9, space, hyphen, period, comma)"); } } if (!string.IsNullOrWhiteSpace(metaReportForUpdate.Breadcrumb)) { if (Regex.Matches(metaReportForUpdate.Breadcrumb, @"[-a-zA-Z0-9 .,]").Count < metaReportForUpdate.Breadcrumb.Length) { ModelState.AddModelError("Message", "Bread crumb contains invalid characters (Enter A-Z, a-z, 0-9, space, hyphen, period, comma)"); } } if (_unitOfWork.Repository <MetaReport>().Queryable(). Where(l => l.ReportName == metaReportForUpdate.ReportName && l.Id != id) .Count() > 0) { ModelState.AddModelError("Message", "Item with same name already exists"); } var metaReportFromRepo = await _metaReportRepository.GetAsync(f => f.Id == id); if (metaReportFromRepo == null) { return(NotFound()); } if (ModelState.IsValid) { metaReportFromRepo.ReportName = metaReportForUpdate.ReportName; metaReportFromRepo.ReportDefinition = metaReportForUpdate.ReportDefinition; metaReportFromRepo.Breadcrumb = metaReportForUpdate.Breadcrumb; metaReportFromRepo.ReportStatus = metaReportForUpdate.ReportStatus; metaReportFromRepo.MetaDefinition = PrepareMetaDefinition(metaReportForUpdate); _metaReportRepository.Update(metaReportFromRepo); await _unitOfWork.CompleteAsync(); return(Ok()); } return(BadRequest(ModelState)); }
public async Task <IActionResult> CreateMetaReport( [FromBody] MetaReportForUpdateDto metaReportForUpdate) { if (metaReportForUpdate == null) { ModelState.AddModelError("Message", "Unable to locate payload for new request"); } if (Regex.Matches(metaReportForUpdate.ReportName, @"[a-zA-Z0-9 ]").Count < metaReportForUpdate.ReportName.Length) { ModelState.AddModelError("Message", "Report name contains invalid characters (Enter A-Z, a-z, 0-9, space)"); } var coreEntityFromRepo = await _metaTableRepository.GetAsync(f => f.TableName == metaReportForUpdate.CoreEntity); if (coreEntityFromRepo == null) { ModelState.AddModelError("Message", "Unable to locate core entity"); } if (!string.IsNullOrWhiteSpace(metaReportForUpdate.ReportDefinition)) { if (Regex.Matches(metaReportForUpdate.ReportDefinition, @"[-a-zA-Z0-9 .,]").Count < metaReportForUpdate.ReportDefinition.Length) { ModelState.AddModelError("Message", "Report definition contains invalid characters (Enter A-Z, a-z, 0-9, space, hyphen, period, comma)"); } } if (!string.IsNullOrWhiteSpace(metaReportForUpdate.Breadcrumb)) { if (Regex.Matches(metaReportForUpdate.Breadcrumb, @"[-a-zA-Z0-9 .,]").Count < metaReportForUpdate.Breadcrumb.Length) { ModelState.AddModelError("Message", "Bread crumb contains invalid characters (Enter A-Z, a-z, 0-9, space, hyphen, period, comma)"); } } if (_unitOfWork.Repository <MetaReport>().Queryable(). Where(l => l.ReportName == metaReportForUpdate.ReportName) .Count() > 0) { ModelState.AddModelError("Message", "Item with same name already exists"); } if (ModelState.IsValid) { var newMetaReport = new MetaReport() { ReportName = metaReportForUpdate.ReportName, ReportDefinition = metaReportForUpdate.ReportDefinition, Breadcrumb = metaReportForUpdate.Breadcrumb, IsSystem = false, MetaReportGuid = Guid.NewGuid(), ReportStatus = metaReportForUpdate.ReportStatus, MetaDefinition = PrepareMetaDefinition(metaReportForUpdate) }; _metaReportRepository.Save(newMetaReport); var mappedMetaReport = await GetMetaReportAsync <MetaReportIdentifierDto>(newMetaReport.Id); if (mappedMetaReport == null) { return(StatusCode(500, "Unable to locate newly added item")); } return(CreatedAtAction("GetMetaReportByIdentifier", new { id = mappedMetaReport.Id }, CreateLinksForMetaReport <MetaReportIdentifierDto>(mappedMetaReport))); } return(BadRequest(ModelState)); }