public BaseResponse <VotingItemResponse> UpdateVotingItem([FromBody] VotingItemUpdateRequest request, [FromHeader] Guid UserID)
 {
     return(BaseResponse <VotingItemResponse> .ConstructResponse(
                HttpStatusCode.OK,
                HttpStatusCode.OK.ToString(),
                votingItemService.UpdateVotingItem(request, UserID)));
 }
Beispiel #2
0
        public VotingItemResponse UpdateVotingItem(VotingItemUpdateRequest request, Guid UserID)
        {
            Users user = dbContext.Users.Find(UserID);

            if (user == null)
            {
                throw new BusinessLogicException(HttpStatusCode.BadRequest, ResponseCode.USER_NOT_EXIST.ToString());
            }

            VotingItems votingItem = dbContext.VotingItems
                                     .Where(vi => vi.VotingItemId.Equals(request.VotingItemID) && vi.CreatorUserId.Equals(UserID))
                                     .FirstOrDefault();

            if (votingItem == null)
            {
                throw new BusinessLogicException(HttpStatusCode.BadRequest, ResponseCode.DATA_NOT_EXIST.ToString());
            }

            using (IDbContextTransaction transaction = dbContext.Database.BeginTransaction())
            {
                try
                {
                    votingItem.Name        = request.Name;
                    votingItem.Description = request.Description;
                    votingItem.DueDate     = request.DueDate;
                    votingItem.UpdatedDate = DateTime.Now;
                    votingItem.UpdatedBy   = user.Email;

                    List <VotingCategories> oldVotingCategories = dbContext.VotingCategories
                                                                  .Where(vc => vc.VotingItemId.Equals(request.VotingItemID) && vc.CreatorUserId.Equals(UserID))
                                                                  .ToList();

                    List <VotingCategories> createdVotingCategories = new List <VotingCategories>();
                    List <Guid>             listCategories          = new List <Guid>();
                    foreach (Guid id in request.Categories)
                    {
                        Categories categories = dbContext.Categories.Find(id);
                        if (categories != null)
                        {
                            VotingCategories votingCategories = new VotingCategories();
                            votingCategories.VotingCategoryId = Guid.NewGuid();
                            votingCategories.CategoryId       = categories.CategoryId;
                            votingCategories.VotingItemId     = votingItem.VotingItemId;
                            votingCategories.CreatorUserId    = user.UserId;
                            votingCategories.CreatedDate      = DateTime.Now;
                            votingCategories.CreatedBy        = user.Email;
                            votingCategories.UpdatedDate      = DateTime.Now;
                            votingCategories.UpdatedBy        = user.Email;
                            createdVotingCategories.Add(votingCategories);
                            listCategories.Add(categories.CategoryId);
                        }
                    }

                    dbContext.VotingCategories.RemoveRange(oldVotingCategories);
                    dbContext.VotingCategories.AddRange(createdVotingCategories);
                    dbContext.VotingItems.Update(votingItem);
                    dbContext.SaveChanges();
                    transaction.Commit();

                    List <Categories> categoriesList = dbContext.Categories.Where(cat => listCategories.Contains(cat.CategoryId)).ToList();

                    return(constructResponse(votingItem, categoriesList));
                }
                catch
                {
                    transaction.Rollback();
                    throw new BusinessLogicException(HttpStatusCode.InternalServerError, ResponseCode.FAILED_TO_UPDATE_DATA.ToString());
                }
            }
        }