コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }