Пример #1
0
        public async Task <IActionResult> UpdateFlexFieldObject(string id, [FromBody] T flexFieldObject)
        {
            CheckXssForObject(flexFieldObject);

            T loadedFlexFieldObject = await _objectDbAccess.GetFlexFieldObjectById(id);

            List <string> oldTags = loadedFlexFieldObject.Tags;

            if (oldTags == null)
            {
                oldTags = new List <string>();
            }
            if (flexFieldObject.Tags == null)
            {
                flexFieldObject.Tags = new List <string>();
            }

            if (FlexFieldApiUtil.HasDuplicateFieldNames(flexFieldObject.Fields))
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["DuplicateFieldNameExist"]));
            }

            FlexFieldApiUtil.SetFieldIdsForNewFields(flexFieldObject.Fields);
            FlexFieldApiUtil.SetFieldIdsForNewFieldsInFolders(flexFieldObject.Fields);

            bool nameChanged = loadedFlexFieldObject.Name != flexFieldObject.Name;

            loadedFlexFieldObject.Name   = flexFieldObject.Name;
            loadedFlexFieldObject.Fields = flexFieldObject.Fields;
            loadedFlexFieldObject.Tags   = flexFieldObject.Tags;

            loadedFlexFieldObject = await RunAdditionalUpdates(flexFieldObject, loadedFlexFieldObject);

            await this.SetModifiedData(_userManager, loadedFlexFieldObject);

            await SetNotImplementedFlagOnChange(loadedFlexFieldObject);

            await _objectDbAccess.UpdateFlexFieldObject(loadedFlexFieldObject);

            _logger.LogInformation("Flex field object was updated.");

            await AddNewTags(flexFieldObject.Tags.Except(oldTags, StringComparer.OrdinalIgnoreCase).ToList());
            await RemoveUnusedTags(oldTags.Except(flexFieldObject.Tags, StringComparer.OrdinalIgnoreCase).ToList());

            _logger.LogInformation("Tags were updated.");

            if (nameChanged)
            {
                await RunMarkerUpdates(loadedFlexFieldObject);
            }

            await _timelineService.AddTimelineEntry(ObjectUpdatedEvent, loadedFlexFieldObject.Name, loadedFlexFieldObject.Id);

            return(Ok(loadedFlexFieldObject));
        }
Пример #2
0
        public async Task <IActionResult> CreateFlexFieldObject([FromBody] T flexFieldObject)
        {
            if (string.IsNullOrEmpty(flexFieldObject.Name))
            {
                return(StatusCode((int)HttpStatusCode.BadRequest));
            }

            CheckXssForObject(flexFieldObject);

            if (FlexFieldApiUtil.HasDuplicateFieldNames(flexFieldObject.Fields))
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["DuplicateFieldNameExist"]));
            }

            FlexFieldApiUtil.SetFieldIdsForNewFields(flexFieldObject.Fields);
            FlexFieldApiUtil.SetFieldIdsForNewFieldsInFolders(flexFieldObject.Fields);

            if (flexFieldObject.Tags == null)
            {
                flexFieldObject.Tags = new List <string>();
            }

            try
            {
                GoNorthProject project = await _projectDbAccess.GetDefaultProject();

                flexFieldObject.ProjectId = project.Id;

                flexFieldObject = await RunAdditionalUpdates(flexFieldObject, flexFieldObject);

                await this.SetModifiedData(_userManager, flexFieldObject);

                flexFieldObject = await _objectDbAccess.CreateFlexFieldObject(flexFieldObject);
                await AddNewTags(flexFieldObject.Tags);

                await _timelineService.AddTimelineEntry(ObjectCreatedEvent, flexFieldObject.Name, flexFieldObject.Id);

                return(Ok(flexFieldObject));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Could not create flex field object {0}", flexFieldObject.Name);
                return(StatusCode((int)HttpStatusCode.InternalServerError));
            }
        }
Пример #3
0
        /// <summary>
        /// Creates a new flex field template
        /// </summary>
        /// <param name="template">Template to create</param>
        /// <returns>Result</returns>
        protected async Task <IActionResult> BaseCreateFlexFieldTemplate(T template)
        {
            if (string.IsNullOrEmpty(template.Name))
            {
                return(StatusCode((int)HttpStatusCode.BadRequest));
            }

            CheckXssForObject(template);

            if (FlexFieldApiUtil.HasDuplicateFieldNames(template.Fields))
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["DuplicateFieldNameExist"]));
            }

            template.ParentFolderId = string.Empty;

            if (template.Tags == null)
            {
                template.Tags = new List <string>();
            }

            try
            {
                GoNorthProject project = await _projectDbAccess.GetDefaultProject();

                template.ProjectId = project.Id;

                template = await RunAdditionalUpdates(template, template);

                await this.SetModifiedData(_userManager, template);

                template = await _templateDbAccess.CreateFlexFieldObject(template);
                await AddNewTags(template.Tags);

                await _timelineService.AddTimelineEntry(TemplateCreatedEvent, template.Name, template.Id);

                return(Ok(template));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Could not create flex field template {0}", template.Name);
                return(StatusCode((int)HttpStatusCode.InternalServerError));
            }
        }
Пример #4
0
        /// <summary>
        /// Updates a flex field template
        /// </summary>
        /// <param name="id">Template Id</param>
        /// <param name="template">Update template data</param>
        /// <returns>Result Status Code</returns>
        protected async Task <IActionResult> BaseUpdateFlexFieldTemplate(string id, T template)
        {
            if (FlexFieldApiUtil.HasDuplicateFieldNames(template.Fields))
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["DuplicateFieldNameExist"]));
            }

            CheckXssForObject(template);

            T loadedTemplate = await _templateDbAccess.GetFlexFieldObjectById(id);

            List <string> oldTags = loadedTemplate.Tags;

            if (oldTags == null)
            {
                oldTags = new List <string>();
            }
            if (template.Tags == null)
            {
                template.Tags = new List <string>();
            }

            loadedTemplate.Name   = template.Name;
            loadedTemplate.Fields = template.Fields;
            loadedTemplate.Tags   = template.Tags;

            template = await RunAdditionalUpdates(template, loadedTemplate);

            await this.SetModifiedData(_userManager, loadedTemplate);

            await _templateDbAccess.UpdateFlexFieldObject(loadedTemplate);

            _logger.LogInformation("Template was updated.");

            await AddNewTags(template.Tags.Except(oldTags, StringComparer.OrdinalIgnoreCase).ToList());
            await RemoveUnusedTags(oldTags.Except(template.Tags, StringComparer.OrdinalIgnoreCase).ToList());

            _logger.LogInformation("Tags were updated.");

            await _timelineService.AddTimelineEntry(TemplateUpdatedEvent, loadedTemplate.Name, loadedTemplate.Id);

            return(Ok(loadedTemplate));
        }