public BaseResponse <VotingItemResponse> UpdateVotingItem([FromBody] VotingItemUpdateRequest request, [FromHeader] Guid UserID) { return(BaseResponse <VotingItemResponse> .ConstructResponse( HttpStatusCode.OK, HttpStatusCode.OK.ToString(), votingItemService.UpdateVotingItem(request, UserID))); }
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()); } } }