Ejemplo n.º 1
0
        public async Task <IActionResult> PostNewIdea([FromForm] NewIdeaDto idea, [FromRoute] string orgId)
        {
            if (idea.Texts.IsNullOrEmpty() && idea.Images.IsNullOrEmpty())
            {
                return(BadRequest("Either images or text content should be provided."));
            }

            try
            {
                // UoW is started here to make sure the request either fails or succeeds fully
                _unitOfWorkManager.StartUnitOfWork();

                Idea createdIdea = _ideationManager.AddIdea(
                    idea.Title,
                    idea.IdeationId);
                _userManager.AddIdeaToUser(createdIdea, idea.UserId);

                foreach (var video in idea.Videos)
                {
                    string imgLocation = await _fileService.ConvertFileToLocation(video);

                    _ideationManager.AddFieldToIdea(FieldType.Video, imgLocation, createdIdea.IdeaId);
                }

                foreach (var image in idea.Images)
                {
                    string imgLocation = await _fileService.ConvertFileToLocation(image);

                    _ideationManager.AddFieldToIdea(FieldType.Picture, imgLocation, createdIdea.IdeaId);
                }

                foreach (var textfield in idea.Texts)
                {
                    _ideationManager.AddFieldToIdea(FieldType.Text, textfield, createdIdea.IdeaId);
                }

                foreach (var location in idea.Locations)
                {
                    _ideationManager.AddFieldToIdea(FieldType.Location, location, createdIdea.IdeaId);
                }

                foreach (var link in idea.Links)
                {
                    _ideationManager.AddFieldToIdea(FieldType.Link, link, createdIdea.IdeaId);
                }

                _unitOfWorkManager.EndUnitOfWork();

                return(CreatedAtAction(
                           "GetIdea",
                           new { orgId, id = createdIdea.IdeaId },
                           _mapper.Map <IdeaMinDto>(createdIdea)));
            }
            catch (ValidationException ve)
            {
                return(UnprocessableEntity($"Invalid input data: {ve.ValidationResult.ErrorMessage}"));
            }
            catch (Exception e)
            {
                return(BadRequest($"Something went wrong in creating the idea: {e.Message}."));
            }
        }