public VotingItemResponse VoteForItem(VoteRequest 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(v => v.VotingItemId.Equals(request.VotingItemID) && v.DueDate > DateTime.Now).FirstOrDefault();

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

            UserVotes userVote = dbContext.UserVotes
                                 .Where(us => us.UserId.Equals(UserID) && us.VotingItemId.Equals(request.VotingItemID)).FirstOrDefault();

            if (userVote != null)
            {
                throw new BusinessLogicException(HttpStatusCode.BadRequest, ResponseCode.USER_ALREADY_VOTED.ToString());
            }

            using (IDbContextTransaction transaction = dbContext.Database.BeginTransaction())
            {
                try
                {
                    UserVotes newVotes = new UserVotes();
                    newVotes.UserId       = UserID;
                    newVotes.VotingItemId = request.VotingItemID;
                    newVotes.CreatedBy    = user.Email;
                    newVotes.UpdatedBy    = user.Email;

                    votingItem.SupportersCount += 1;

                    dbContext.UserVotes.Add(newVotes);
                    dbContext.VotingItems.Update(votingItem);
                    dbContext.SaveChanges();
                    transaction.Commit();
                }
                catch
                {
                    transaction.Rollback();
                    throw new BusinessLogicException(HttpStatusCode.InternalServerError, ResponseCode.FAILED_TO_VOTE.ToString());
                }
            }

            List <Guid>       listCategories = constructListCategoryID(votingItem.VotingCategories.ToList());
            List <Categories> categories     = dbContext.Categories.Where(cat => listCategories.Contains(cat.CategoryId)).ToList();

            return(constructResponse(votingItem, categories));
        }
示例#2
0
        public VotingItemResponse DeleteVotingItem(Guid id, 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.Find(id);

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

            List <VotingCategories> votingCategories = dbContext.VotingCategories
                                                       .Where(vc => vc.VotingItemId.Equals(votingItem.VotingItemId))
                                                       .ToList();

            using (IDbContextTransaction transaction = dbContext.Database.BeginTransaction())
            {
                try
                {
                    List <UserVotes> votes = dbContext.UserVotes.Where(vote => vote.VotingItemId.Equals(id)).ToList();
                    if (votes.Count > 0)
                    {
                        dbContext.UserVotes.RemoveRange(votes);
                    }

                    if (votingCategories.Count > 0)
                    {
                        dbContext.VotingCategories.RemoveRange(votingCategories);
                    }

                    dbContext.VotingItems.Remove(votingItem);
                    dbContext.SaveChanges();
                    transaction.Commit();
                }
                catch
                {
                    transaction.Rollback();
                    throw new BusinessLogicException(HttpStatusCode.InternalServerError, ResponseCode.FAILED_TO_DELETE_DATA.ToString());
                }
            }

            List <Guid>       listCategories = constructListCategoryID(votingItem.VotingCategories.ToList());
            List <Categories> categories     = dbContext.Categories.Where(cat => listCategories.Contains(cat.CategoryId)).ToList();

            return(constructResponse(votingItem, categories));
        }
示例#3
0
        public async Task <IActionResult> OnGetAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            VotingItems = await _context.VotingItems.FirstOrDefaultAsync(m => m.ItemID == id);

            if (VotingItems == null)
            {
                return(NotFound());
            }
            return(Page());
        }
        public VotingItemResponse GetById(Guid id)
        {
            VotingItems votingItem = dbContext.VotingItems.Find(id);

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

            List <VotingCategories> votingCategories = dbContext.VotingCategories
                                                       .Where(vc => vc.VotingItemId.Equals(votingItem.VotingItemId))
                                                       .ToList();
            List <Guid>       listCategories = constructListCategoryID(votingCategories);
            List <Categories> categories     = dbContext.Categories.Where(cat => listCategories.Contains(cat.CategoryId)).ToList();

            return(constructResponse(votingItem, categories));
        }
示例#5
0
        public async Task <IActionResult> OnPostAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            VotingItems = await _context.VotingItems.FindAsync(id);

            if (VotingItems != null)
            {
                _context.VotingItems.Remove(VotingItems);
                await _context.SaveChangesAsync();
            }

            return(RedirectToPage("./Index"));
        }
        private VotingItemResponse constructResponse(VotingItems votingItem, List <Categories> categories)
        {
            VotingItemResponse response = new VotingItemResponse();

            response.VotingItemID    = votingItem.VotingItemId;
            response.Name            = votingItem.Name;
            response.Description     = votingItem.Description;
            response.SupportersCount = votingItem.SupportersCount;
            response.DueDate         = votingItem.DueDate;
            response.CreatedDate     = votingItem.CreatedDate;
            if (response.DueDate < DateTime.Now)
            {
                response.IsExpired = true;
            }
            response.Categories = constructCategoriesResponse(categories);

            return(response);
        }
示例#7
0
        public VotingItemResponse CreateVotingItem(VotingItemCreationRequest request, Guid UserID)
        {
            if (request.DueDate < DateTime.Now)
            {
                throw new BusinessLogicException(HttpStatusCode.BadRequest, ResponseCode.VOTING_ITEM_DUE_DATE_NOT_VALID.ToString());
            }
            Users user = dbContext.Users.Find(UserID);

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

            using (IDbContextTransaction transaction = dbContext.Database.BeginTransaction())
            {
                try
                {
                    VotingItems votingItem = new VotingItems();
                    votingItem.VotingItemId    = Guid.NewGuid();
                    votingItem.Name            = request.Name;
                    votingItem.Description     = request.Description;
                    votingItem.CreatorUserId   = UserID;
                    votingItem.SupportersCount = 0;
                    votingItem.DueDate         = request.DueDate;
                    votingItem.CreatedDate     = DateTime.Now;
                    votingItem.CreatedBy       = user.Email;
                    votingItem.UpdatedDate     = DateTime.Now;
                    votingItem.UpdatedBy       = user.Email;

                    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.VotingItems.Add(votingItem);
                    dbContext.VotingCategories.AddRange(createdVotingCategories);
                    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_CREATED_DATA.ToString());
                }
            }
        }
示例#8
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());
                }
            }
        }