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}.")); } }