public async Task<ActionResult> SendNotification(NotificationBindingModel model) { if (!ModelState.IsValid) { var errorList = ModelState.Values.SelectMany(m => m.Errors) .Select(e => e.ErrorMessage) .ToList(); return new HttpStatusCodeResult(400, string.Join("\n", errorList)); } NotificationType type = (NotificationType)model.NotificationType; var notification = new Notification() { Content = model.Content, Type = type, SendOn = DateTime.Now }; var template = System.IO.File.ReadAllText(Path.Combine( AppDomain.CurrentDomain.BaseDirectory, @"Views\RazorEngine\_PagedNotificationViewModel.cshtml")); var renderedPartialView = Razor.Parse(template, Mapper.Map<Notification, PagedNotificationViewModel>(notification)); var hubContext = GlobalHost.ConnectionManager.GetHubContext<NotificationsHub>(); hubContext.Clients.All.receiveNotification(renderedPartialView); hubContext.Clients.All.receiveNotificationCount(); var allUsers = this.Data.Users.All(); foreach (var user in allUsers) { var n = new Notification() { Content = model.Content, Type = type, SendOn = DateTime.Now, User = user }; user.Notifications.Add(n); } this.Data.SaveChanges(); return new HttpStatusCodeResult(200, "Notification sent succssesfully."); }
public ActionResult Create(NotificationInputModel notification) { if (ModelState.IsValid) { var newNotification = new Notification() { SenderId = this.UserProfile.Id, ReceiverId = notification.RecieverId, ContestId = notification.ContestId, }; this.Data.Notifications.Add(newNotification); this.Data.SaveChanges(); } return new EmptyResult(); }
public ActionResult Pause(int contestId) { var contest = this.Data.Contests.Find(contestId); if (contest == null) { HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.NotFound); message.Content = new StringContent(Messages.ContestNotFound); throw new System.Web.Http.HttpResponseException(message); } if (contest.OwnerId != this.User.Identity.GetUserId() && !this.User.IsInRole("Administrator")) { HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.Unauthorized); message.Content = new StringContent(Messages.NotOwnerOfContest); throw new System.Web.Http.HttpResponseException(message); } if (contest.Status != ContestStatus.Active) { this.TempData["message"] = Messages.ContestCannotBePaused; return this.RedirectToAction("GetContestById", new { id = contestId }); } contest.Status = ContestStatus.Inactive; var notification = new Notification() { CreatedOn = DateTime.Now, IsRead = false, Content = string.Format(Messages.ContestWasPaused, contest.Title), RecipientId = contest.OwnerId, }; this.Data.Notifications.Add(notification); this.Data.SaveChanges(); this.TempData["message"] = Messages.ContestPaused; return this.RedirectToAction("GetContestById", new { id = contestId }); }
public ActionResult GetContestById(int id) { var dbContest = this.Data.Contests.Find(id); var contest = Mapper.Map<DetailsContestViewModel>(dbContest); if (contest == null) { HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.NotFound); message.Content = new StringContent(Messages.ContestNotFound); throw new System.Web.Http.HttpResponseException(message); } ICollection<ContestWinnerViewModel> contestWinners = null; if (dbContest.Status == ContestStatus.Finished) { contestWinners = this.GetContestWinners(dbContest); } if ((contest.Status == ContestStatus.Active || contest.Status == ContestStatus.Inactive) && contest.EndDate.AddDays(1.0) < DateTime.Now) { dbContest.Status = ContestStatus.Finished; var notification = new Notification() { Content = string.Format( Messages.ContestFinished, contest.Title), RecipientId = dbContest.Owner.Id, CreatedOn = DateTime.Now, IsRead = false, }; this.Data.Notifications.Add(notification); this.Data.SaveChanges(); contestWinners = this.GetContestWinners(dbContest); foreach (var winner in contestWinners) { var noty = new Notification() { Content = string.Format( Messages.PictureWonPrize, winner.Picture.Title ?? "(not available)", winner.PrizeName, contest.Title), RecipientId = winner.WinnerId, CreatedOn = DateTime.Now, IsRead = false, }; this.Data.Notifications.Add(notification); } this.Data.SaveChanges(); } var userId = this.User.Identity.GetUserId(); var user = this.Data.Users.Find(userId); if (userId != null && dbContest.Owner.Id == userId) { contest.IsOwner = true; } if (userId != null && dbContest.ParticipationType == ParticipationType.Open || dbContest.Participants.Any(p => p.Id == userId)) { contest.CanParticipate = true; } if (userId != null && dbContest.ParticipationType == ParticipationType.Closed && !dbContest.Candidates.Any(p => p.Id == userId) && !dbContest.Participants.Any(p => p.Id == userId)) { contest.CanApply = true; } var fullContestModel = new FullContestViewModel() { ContestSummary = contest, Winners = contestWinners, }; return this.View(fullContestModel); }
public ActionResult Create(CreateContestBindingModel model) { if (!this.ModelState.IsValid) { return this.View(model); } var loggedUserId = this.User.Identity.GetUserId(); string thumbnailImageData = ""; try { var image = PictureUtills.CreateImageFromBase64(model.Thumbnail); var thumbnail = PictureUtills.CreateThumbnailFromImage(image, 316); thumbnailImageData = PictureUtills.ConvertImageToBase64(thumbnail); } catch (Exception ex) { thumbnailImageData = model.Thumbnail; } var contest = new Contest() { Title = model.Title, Description = model.Description, StartDate = model.StartDate, EndDate = model.EndDate, OwnerId = loggedUserId, VotingType = model.VotingType, ParticipationType = model.ParticipationType, DeadlineType = model.DeadlineType, Picture = model.Thumbnail, Thumbnail = thumbnailImageData, Status = model.StartDate < DateTime.Now ? ContestStatus.Active : ContestStatus.Inactive, }; if (contest.DeadlineType == DeadlineType.ParticipationLimit) { contest.ParticipationLimit = model.ParticipationLimit; } this.Data.Contests.Add(contest); this.Data.SaveChanges(); if (model.VotingType == VotingType.Closed) { contest.Jury = new VotingCommittee(); contest.Jury.ContestId = contest.Id; } foreach (var prize in model.Prizes) { var dbPrize = new Prize() { Name = prize.Name, Description = prize.Description, ContestId = contest.Id, }; contest.Prizes.Add(dbPrize); } this.Data.SaveChanges(); var members = this.Data.Users.All().ToList(); foreach (var member in members) { var notification = new Notification() { RecipientId = member.Id, Content = string.Format( Messages.NewContest, contest.Title, contest.StartDate), CreatedOn = DateTime.Now, IsRead = false, }; this.Data.Notifications.Add(notification); } this.Data.SaveChanges(); var hubContext = GlobalHost.ConnectionManager.GetHubContext<ContestsHub>(); hubContext.Clients.All.receiveMessage(contest.Id); return this.RedirectToAction("Contests", "Me"); }
public ActionResult Apply(int contestId) { var contest = this.Data.Contests.Find(contestId); if (contest == null) { throw new System.Web.Http.HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); } var user = this.Data.Users.Find(this.User.Identity.GetUserId()); if (contest.Candidates.Any(u => u.Id == user.Id)) { this.TempData["message"] = Messages.UserAlreadyAppliedToParticipate; return this.RedirectToAction("GetContestById", new { id = contestId }); } if (contest.Participants.Any(u => u.Id == user.Id)) { this.TempData["message"] = Messages.UserAlreadyApprovedToParticipate; return this.RedirectToAction("GetContestById", new { id = contestId }); } contest.Candidates.Add(user); var notification = new Notification() { RecipientId = contest.Owner.Id, CreatedOn = DateTime.Now, Content = string.Format("Member {0} applied to participate in the contest '{1}'. Please, go to contest page to process his/her application.", user.UserName, contest.Title) }; this.Data.Notifications.Add(notification); this.Data.SaveChanges(); this.TempData["message"] = string.Format(Messages.SuccessfulyAppliedToContest, contest.Title); return this.RedirectToAction("GetContestById", new { id = contestId }); }
private int Vote(int pictureId, int contestId, bool vote = true) { var picture = this.Data.Pictures.Find(pictureId); if (picture == null) { HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.NotFound); message.Content = new StringContent(Messages.NoSuchPicture); throw new System.Web.Http.HttpResponseException(message); } var contest = this.Data.Contests.Find(contestId); if (contest == null) { HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.NotFound); message.Content = new StringContent(Messages.ContestNotFound); throw new System.Web.Http.HttpResponseException(message); } if (!contest.Pictures.Any(p => p.Id == pictureId)) { HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.NotFound); message.Content = new StringContent(Messages.NoSuchPictureInContest); throw new System.Web.Http.HttpResponseException(message); } int votes = picture.Votes.Where(v => v.ContestId == contestId).Count(); var userId = this.User.Identity.GetUserId(); var user = this.Data.Users.Find(userId); if (picture.AuthorId == user.Id) { return votes; } if (contest.Status != ContestStatus.Active) { return votes; } if (contest.VotingType == VotingType.Closed) { if (!contest.Jury.Members.Any(m => m.Id == userId)) { return votes; } } if (userId == contest.OwnerId) { return votes; } if (vote) { if (picture.Votes.Any(v => v.ContestId == contestId && v.VoterId == userId)) { return votes; } this.Data.Votes.Add(new Vote { ContestId = contestId, PictureId = pictureId, VoterId = userId }); var notification = new Notification { Content = string.Format( Messages.PictureVoteNotification, user.UserName, picture.Title ?? Messages.NoTitle, contest.Title), CreatedOn = DateTime.Now, IsRead = false, RecipientId = picture.AuthorId, }; this.Data.Notifications.Add(notification); this.Data.SaveChanges(); return ++votes; } else { var dbVote = picture.Votes.FirstOrDefault(v => v.ContestId == contestId && v.VoterId == userId); if (dbVote == null) { return votes; } this.Data.Votes.Delete(dbVote); this.Data.SaveChanges(); return --votes; } }
public ActionResult AddToContest(string username, int contestId) { var resultMessage = ""; // Check whether invited user exist var invitedUser = this.Data.Users.All().FirstOrDefault(u => u.UserName == username); if (invitedUser == null) { resultMessage = UserMessage.NoUser; return this.Json(resultMessage, JsonRequestBehavior.AllowGet); } // Check whether author and invited user are same person var currentUserId = this.User.Identity.GetUserId(); var currentUser = this.Data.Users.Find(currentUserId); if (currentUser.UserName == invitedUser.UserName) { resultMessage = UserMessage.CannotInviteYourself; return this.Json(resultMessage, JsonRequestBehavior.AllowGet); } // Check whether contest exist var contest = this.Data.Contests.Find(contestId); if (contest == null) { resultMessage = UserMessage.NoContest; return this.Json(resultMessage, JsonRequestBehavior.AllowGet); } // Check whether ivited user is already in the contest var invitedUsersNames = contest.InvitedUsers.Select(iu => iu.UserName).ToList(); if (invitedUsersNames.Contains(invitedUser.UserName)) { resultMessage = UserMessage.UserIsInTheContest; return this.Json(resultMessage, JsonRequestBehavior.AllowGet); } contest.InvitedUsers.Add(invitedUser); invitedUser.InvitedToContests.Add(contest); var notification = new Notification() { NotificationContent = NotificationContent.InvitedToContest + contest.Title, Type = NotificationType.InvitedToContest, UserId = invitedUser.Id }; this.Data.Notifications.Add(notification); this.Data.SaveChanges(); return this.Json(resultMessage, JsonRequestBehavior.AllowGet); }
public ActionResult ChooseWinner(string username, int contestId) { var resultMessage = ""; var contest = this.Data.Contests.Find(contestId); var user = this.Data.Users.All().FirstOrDefault(u => u.UserName == username); if (user == null) { resultMessage = UserMessage.NoUser; return this.Json(resultMessage, JsonRequestBehavior.AllowGet); } contest.Winners.Add(user); contest.IsClosed = IsClosed.Yes; user.ContestsWon.Add(contest); user.Coints = user.Coints + contest.PrizeValues; var notification = new Notification() { NotificationContent = NotificationContent.Winning, Type = NotificationType.Winning, UserId = user.Id }; this.Data.SaveChanges(); return this.Json(resultMessage, JsonRequestBehavior.AllowGet); }
public ActionResult WinnerByVotes(int contestId) { var resultMessage = ""; var contest = this.Data.Contests.Find(contestId); var numberOfWinners = contest.PrizeCount; contest.IsClosed = IsClosed.Yes; var pictureWinner = contest.ContestPictures.OrderByDescending(cp => cp.Votes.Count).Take(numberOfWinners).ToList(); if (contest.RewardStrategy == RewardStrategy.SingleWinner) { if (contest.ContestPictures.Any()) { var picture = contest.ContestPictures .OrderByDescending(cp => cp.Votes.Count) .FirstOrDefault(); var firstWinner = picture.Owner; if (firstWinner != null) { firstWinner.Coints += contest.PrizeValues; resultMessage = firstWinner.UserName + " is the winner of " + contest.Title + "!"; contest.Winners.Add(firstWinner); firstWinner.ContestsWon.Add(contest); var notification = new Notification() { NotificationContent = NotificationContent.Winning, Type = NotificationType.Winning, UserId = firstWinner.Id }; this.Data.Notifications.Add(notification); } } } else { var firstOrDefault = contest.ContestPictures.OrderByDescending(cp => cp.Votes.Count).FirstOrDefault(); if (firstOrDefault != null) { var firstWinnerId = firstOrDefault.OwnerId; var firstWinnerUser = this.Data.Users.Find(firstWinnerId); firstWinnerUser.Coints = firstWinnerUser.Coints + contest.PrizeValues; resultMessage = firstWinnerUser.UserName + " is the winner of " + contest.Title + "!"; } foreach (var currentWinner in pictureWinner) { var winner = this.Data.Users.Find(currentWinner.OwnerId); contest.Winners.Add(winner); winner.ContestsWon.Add(contest); var notification = new Notification() { NotificationContent = NotificationContent.Winning, Type = NotificationType.Winning, UserId = winner.Id }; this.Data.Notifications.Add(notification); } } this.Data.SaveChanges(); return this.Json(resultMessage, JsonRequestBehavior.AllowGet); }