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)); }
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)); }
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)); }
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); }
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()); } } }
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()); } } }