示例#1
0
        public async Task <ActionResult> PostIdeaAsync([FromBody] IdeaEntity idea)
        {
            ThemeEntity parentTheme = await _context.Themes.Where(t => t.ThemeId == idea.ThemeId).SingleAsync();

            if (parentTheme != null && (parentTheme.CloseDt - DateTime.Now < TimeSpan.Zero))
            {
                return(Forbid());
            }

            idea.SubmitDt   = DateTime.Now;
            idea.ModifiedDt = idea.SubmitDt;
            idea.Owner      = "Michael";

            await _context.Ideas.AddAsync(idea);

            await _context.SaveChangesAsync(true, "testSame");

            Status ideaStatus = new Status()
            {
                StatusCode = StatusType.Submitted,
                Response   = "",
                SubmitDt   = idea.SubmitDt,
                IdeaId     = idea.PostId,
                Idea       = idea
            };

            await _context.Statuses.AddAsync(ideaStatus);

            await _context.SaveChangesAsync(true, "testSam");

            return(Ok(idea));
        }
示例#2
0
        public static IdeaEntity LoadData(int currentPage, int pagesize)
        {
            var db         = new DataAccess();
            var ideaEntity = new IdeaEntity();

            var  tpId = -1;
            Page obj  = new Page();

            int.TryParse(obj.Session["TopicId"].ToString(), out tpId);
            if (tpId == -1)
            {
                return(null);
            }

            var lstIdeas = db.GetIdeasByTopic(tpId);

            if (lstIdeas == null || lstIdeas.Count == 0)
            {
                return(null);
            }

            var lstIdeaUi = new List <IdeaUI>();

            foreach (var x in lstIdeas)
            {
                var ideaUi = new IdeaUI();
                ideaUi.ideaId      = x.Id;
                ideaUi.userName    = db.GetUserById(x.PersonalId).Name;
                ideaUi.ideaTitle   = x.Title.Replace("\"", "'").Replace(Environment.NewLine, " ");
                ideaUi.ideaContent = x.Details.Replace("\"", "'").Replace(Environment.NewLine, " ");
                ideaUi.postedDate  = new Common().CalculateDateRange(x.PostedDate);

                lstIdeaUi.Add(ideaUi);
            }

            var total = lstIdeas.Count;
            int totalPage;

            if (total > pagesize && total % pagesize == 0)
            {
                totalPage = total / pagesize;
            }
            else if (total > pagesize && total % pagesize != 0)
            {
                totalPage = total / pagesize + 1;
            }
            else
            {
                totalPage = 1;
            }

            ideaEntity.ListIdeas = lstIdeaUi.Skip(currentPage * pagesize).Take(pagesize).ToList();
            ideaEntity.TotalPage = totalPage;

            return(ideaEntity);
        }
        public async Task <IActionResult> PatchAsync([FromBody] IdeaEntity ideaEntity)
        {
            this.RecordEvent("Ideas - HTTP Patch idea call accepted the request.");

            try
            {
#pragma warning disable CA1062 // idea entity is validated by model validations for null check and is responded with bad request status
                if (string.IsNullOrEmpty(ideaEntity.IdeaId))
#pragma warning restore CA1062 // idea entity is validated by model validations for null check and is responded with bad request status
                {
                    this.logger.LogError($"{nameof(ideaEntity.IdeaId)} is found to be null or empty to update idea.");
                    return(this.BadRequest($"Parameter {nameof(ideaEntity.IdeaId)} cannot be null or empty."));
                }

                // Validating Idea Id as it will be generated at server side in case of adding new post but cannot be null or empty in case of update.
                var entity = await this.ideaStorageProvider.GetIdeaEntityAsync(ideaEntity.CreatedByObjectId, ideaEntity.IdeaId);

                if (entity == null)
                {
                    this.logger.LogError($"Entity for {ideaEntity.IdeaId} is not found to update.");
                    this.RecordEvent("Update idea - HTTP Patch call failed");

                    return(this.BadRequest($"An update cannot be performed for {ideaEntity.IdeaId} because entity is not available."));
                }

                entity.ApprovedOrRejectedByName = this.UserName;
                entity.ApproverOrRejecterUserId = this.UserAadId;
                entity.Status      = ideaEntity.Status;
                entity.Feedback    = ideaEntity.Feedback;
                entity.Category    = ideaEntity.Category;
                entity.CategoryId  = ideaEntity.CategoryId;
                entity.UpdatedDate = DateTime.UtcNow;
                var result = await this.ideaStorageProvider.UpsertIdeaAsync(entity);

                if (result)
                {
                    this.RecordEvent("Team idea - HTTP Patch call succeeded");
                    await this.ideaSearchService.RunIndexerOnDemandAsync();
                }

                return(this.Ok(result));
            }
            catch (Exception ex)
            {
                this.logger.LogError(ex, "Error while making call to idea post service.");
                throw;
            }
        }
        /// <summary>
        /// Create updated team idea model data for storage.
        /// </summary>
        /// <param name="ideaEntity">Team idea detail.</param>
        /// <returns>A task that represents idea entity updated data.</returns>
        public IdeaEntity CreateUpdatedTeamIdeaModel(IdeaEntity ideaEntity)
        {
            try
            {
                ideaEntity = ideaEntity ?? throw new ArgumentNullException(nameof(ideaEntity));

                ideaEntity.UpdatedDate = DateTime.UtcNow;

                return(ideaEntity);
            }
            catch (Exception ex)
            {
                this.logger.LogError(ex, "Exception occurred while getting the team idea model data");
                throw;
            }
        }
        public async Task <IActionResult> PostAsync([FromBody] IdeaEntity ideaEntity)
        {
            this.RecordEvent("Ideas - HTTP Post idea call accepted the request.");

            try
            {
                var updatedTeamPostEntity = new IdeaEntity
                {
                    IdeaId            = Guid.NewGuid().ToString(),
                    CreatedByObjectId = this.UserAadId,
                    CreatedByName     = this.UserName,
                    CreatedDate       = DateTime.UtcNow,
                    UpdatedDate       = DateTime.UtcNow,
                    TotalVotes        = 0,
                    Status            = (int)IdeaStatus.Pending,
#pragma warning disable CA1062 // team idea entity is validated by model validations for null check and is responded with bad request status
                    Title         = ideaEntity.Title,
                    Description   = ideaEntity.Description,
                    Category      = ideaEntity.Category,
                    CategoryId    = ideaEntity.CategoryId,
                    DocumentLinks = ideaEntity.DocumentLinks,
                    Tags          = ideaEntity.Tags,
                    CreatedByUserPrincipalName = this.UserPrincipalName,
#pragma warning restore CA1062 // team idea entity is validated by model validations for null check and is responded with bad request status
                };

                var result = await this.ideaStorageProvider.UpsertIdeaAsync(updatedTeamPostEntity);

                if (result)
                {
                    this.RecordEvent("Idea - HTTP Post call succeeded");
                    await this.ideaSearchService.RunIndexerOnDemandAsync();

                    return(this.Ok(updatedTeamPostEntity));
                }

                return(this.Ok(result));
            }
            catch (Exception ex)
            {
                this.logger.LogError(ex, "Error while making call to idea service.");
                this.RecordEvent("An exception occurred for Idea - HTTP Post call.");
                throw;
            }
        }
        /// <summary>
        /// Stores or update team idea details data in Microsoft Azure Table storage.
        /// </summary>
        /// <param name="entity">Holds team idea detail entity data.</param>
        /// <returns>A task that represents idea post entity data is saved or updated.</returns>
        private async Task <TableResult> StoreOrUpdateEntityAsync(IdeaEntity entity)
        {
            await this.EnsureInitializedAsync();

            entity = entity ?? throw new ArgumentNullException(nameof(entity));

            if (string.IsNullOrWhiteSpace(entity.Title) ||
                string.IsNullOrWhiteSpace(entity.Description) ||
                string.IsNullOrWhiteSpace(entity.Category) ||
                entity?.Title.Length > IdeaTitleMaxLength ||
                entity?.Description.Length > IdeaDescriptionMaxLength)
            {
                return(null);
            }

            TableOperation addOrUpdateOperation = TableOperation.InsertOrReplace(entity);

            return(await this.CloudTable.ExecuteAsync(addOrUpdateOperation));
        }
        /// <summary>
        /// Create team idea model data.
        /// </summary>
        /// <param name="teamIdeaEntity">Team idea detail.</param>
        /// <param name="userId">User Azure active directory id.</param>
        /// <param name="userName">Author who created the idea.</param>
        /// <returns>A task that represents team idea entity data.</returns>
        public IdeaEntity CreateTeamIdeaModel(IdeaEntity teamIdeaEntity, string userId, string userName)
        {
            try
            {
                teamIdeaEntity = teamIdeaEntity ?? throw new ArgumentNullException(nameof(teamIdeaEntity));

                teamIdeaEntity.IdeaId            = Guid.NewGuid().ToString();
                teamIdeaEntity.CreatedByObjectId = userId;
                teamIdeaEntity.CreatedByName     = userName;
                teamIdeaEntity.CreatedDate       = DateTime.UtcNow;
                teamIdeaEntity.UpdatedDate       = DateTime.UtcNow;

                return(teamIdeaEntity);
            }
            catch (Exception ex)
            {
                this.logger.LogError(ex, "Exception occurred while creating the idea model data.");
                throw;
            }
        }
        /// <summary>
        /// Stores or update team idea details data in Microsoft Azure Table storage.
        /// </summary>
        /// <param name="ideaEntity">Holds team idea detail entity data.</param>
        /// <returns>A boolean that represents team idea entity data is successfully saved/updated or not.</returns>
        public async Task <bool> UpsertIdeaAsync(IdeaEntity ideaEntity)
        {
            var result = await this.StoreOrUpdateEntityAsync(ideaEntity);

            return(result.HttpStatusCode == (int)HttpStatusCode.NoContent);
        }
示例#9
0
        /// <summary>
        /// Get container for team ideas.
        /// </summary>
        /// <param name="teamIdea">Team post entity object.</param>
        /// <returns>Return a container for team ideas.</returns>
        private AdaptiveContainer GetPostTypeContainer(IdeaEntity teamIdea)
        {
            string applicationBasePath = this.options.Value.AppBaseUri;

            var postTypeContainer = new AdaptiveContainer
            {
                Items = new List<AdaptiveElement>
                {
                    new AdaptiveColumnSet
                    {
                        Columns = new List<AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Auto,
                                VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center,
                                Items = new List<AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Text = $"**{this.localizer.GetString("IdeatorLabelText")}:**",
                                        Wrap = true,
                                    },
                                },
                                Spacing = AdaptiveSpacing.Small,
                            },
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Auto,
                                Items = new List<AdaptiveElement>
                                {
                                    new AdaptiveImage
                                    {
                                        Url = new Uri($"{applicationBasePath}/Artifacts/peopleAvatar.png"),
                                        Size = AdaptiveImageSize.Auto,
                                        Style = AdaptiveImageStyle.Person,
                                        AltText = "User Image",
                                    },
                                },
                                Spacing = AdaptiveSpacing.Small,
                            },
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Stretch,
                                VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center,
                                Items = new List<AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Text = teamIdea.CreatedByName.Length > AdaptiveCardUserNameMaxCharacterLength ? $"{teamIdea.CreatedByName.Substring(0, AdaptiveCardUserNameMaxCharacterLength - 1)} ..." : teamIdea.CreatedByName,
                                        Wrap = true,
                                    },
                                },
                                Spacing = AdaptiveSpacing.Small,
                            },
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Auto,
                                VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center,
                                Items = new List<AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Text = $"{teamIdea.TotalVotes} ",
                                        Wrap = true,
                                    },
                                },
                                Spacing = AdaptiveSpacing.Small,
                            },
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Auto,
                                VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center,
                                Items = new List<AdaptiveElement>
                                {
                                    new AdaptiveImage
                                    {
                                        Url = new Uri($"{applicationBasePath}/Artifacts/voteIcon.png"),
                                        PixelWidth = VoteIconWidth,
                                        PixelHeight = VoteIconHeight,
                                        Style = AdaptiveImageStyle.Default,
                                    },
                                },
                                Spacing = AdaptiveSpacing.Small,
                            },
                        },
                    },
                },
            };

            return postTypeContainer;
        }