public IHttpActionResult Edit(int videoBattleId = 0) { var videoBattle = videoBattleId != 0 ? _videoBattleService.Get(videoBattleId) : new VideoBattle(); //can the user actually edit the battle? if (!CanEdit(videoBattle)) { VerboseReporter.ReportError("Video Battle doesn't exist", "edit_battle"); return RespondFailure(); } var model = new VideoBattleModel() { VotingStartDate = videoBattleId == 0 ? DateTime.UtcNow.AddDays(10) : videoBattle.VotingStartDate.ToLocalTime(), //10 days ChallengerId = videoBattle.ChallengerId, DateCreated = videoBattleId == 0 ? DateTime.UtcNow : videoBattle.DateCreated, DateUpdated = videoBattleId == 0 ? DateTime.UtcNow : videoBattle.DateUpdated, VotingEndDate = videoBattleId == 0 ? DateTime.UtcNow.AddDays(20) : videoBattle.VotingEndDate.ToLocalTime(), //20 days Description = videoBattle.Description, Name = videoBattle.Name, Id = videoBattle.Id, VideoBattleStatus = videoBattle.VideoBattleStatus, VideoBattleParticipationType = videoBattleId == 0 ? BattleParticipationType.Open : videoBattle.ParticipationType, VideoBattleVoteType = videoBattle.VideoBattleVoteType, MaximumParticipantCount = videoBattleId == 0 ? 10 : videoBattle.MaximumParticipantCount, MinimumVotingCharge = videoBattleId == 0 ? _battleSettings.DefaultVotingChargeForPaidVoting : videoBattle.MinimumVotingCharge, IsVotingPayable = videoBattle.IsVotingPayable, CanVoterIncreaseVotingCharge = videoBattle.CanVoterIncreaseVotingCharge, ParticipantPercentagePerVote = videoBattle.ParticipantPercentagePerVote, IsSponsorshipSupported = videoBattle.IsSponsorshipSupported, MinimumSponsorshipAmount = videoBattle.MinimumSponsorshipAmount, SponsoredCashDistributionType = videoBattle.SponsoredCashDistributionType, AutomaticallyPostEventsToTimeline = videoBattle.AutomaticallyPostEventsToTimeline }; //let's get prizes associated with this battle. prizes can only be added to saved battles if (model.Id != 0) { var prizes = _videoBattlePrizeService.GetBattlePrizes(model.Id).Where(x => !x.IsSponsored); foreach (var prize in prizes) { model.Prizes.Add(new VideoBattlePrizeModel() { Id = prize.Id, VideoBattleId = prize.VideoBattleId, PrizeType = prize.PrizeType, WinnerId = prize.WinnerId, PrizeAmount = prize.PrizeAmount, Description = prize.Description, PrizeOther = prize.PrizeOther, PrizePercentage = prize.PrizePercentage, WinnerPosition = prize.WinnerPosition, PrizeProductId = prize.PrizeProductId }); } } return RespondSuccess(model); }
public void SaveVideoBattle_fails_for_invalid_model() { using (var battleController = ResolveController<VideoBattleController>()) { var videoBattleModel = new VideoBattleModel(); battleController.Validate(videoBattleModel); var response = battleController.SaveVideoBattle(videoBattleModel); Assert.IsFalse(response.GetValue<bool>("Success")); } }
public IHttpActionResult SaveVideoBattle(VideoBattleModel model) { if (model == null || !ModelState.IsValid) { VerboseReporter.ReportError("Missing required parameters or invalid data submitted", "save_video_battle"); return RespondFailure(); } //lets check if it's a new video battle or an edit is being performed VideoBattle videoBattle = null; if (model.Id == 0) { videoBattle = new VideoBattle { ChallengerId = ApplicationContext.Current.CurrentUser.Id, DateCreated = DateTime.UtcNow }; } else { videoBattle = _videoBattleService.Get(model.Id); } videoBattle.DateUpdated = DateTime.UtcNow; videoBattle.Description = model.Description; videoBattle.VideoBattleStatus = BattleStatus.Pending; videoBattle.VideoBattleType = BattleType.Video; videoBattle.VideoBattleVoteType = BattleVoteType.SelectOneWinner; // Model.VideoBattleVoteType; videoBattle.Name = model.Name; videoBattle.MaximumParticipantCount = (int)Math.Round((decimal)model.MaximumParticipantCount); videoBattle.IsVotingPayable = model.MinimumVotingCharge > 0 && model.IsVotingPayable; videoBattle.CanVoterIncreaseVotingCharge = model.CanVoterIncreaseVotingCharge; videoBattle.MinimumVotingCharge = model.MinimumVotingCharge; videoBattle.ParticipantPercentagePerVote = model.ParticipantPercentagePerVote; videoBattle.IsSponsorshipSupported = model.IsSponsorshipSupported; videoBattle.MinimumSponsorshipAmount = model.MinimumSponsorshipAmount; videoBattle.SponsoredCashDistributionType = model.SponsoredCashDistributionType; videoBattle.AutomaticallyPostEventsToTimeline = model.AutomaticallyPostEventsToTimeline; if (model.Id == 0) { videoBattle.VotingStartDate = model.VotingStartDate.ToUniversalTime(); videoBattle.VotingEndDate = model.VotingEndDate.ToUniversalTime(); _videoBattleService.Insert(videoBattle); //post to timeline if required if (model.AutomaticallyPostEventsToTimeline) _timelineAutoPublisher.Publish(videoBattle, TimelineAutoPostTypeNames.VideoBattle.Publish, ApplicationContext.Current.CurrentUser.Id); } else { //its an update...if there is any participant who has accepted the challenge then acceptance date and voting date can only be extended and not shrinked if (model.VotingStartDate.ToUniversalTime() < videoBattle.VotingStartDate || model.VotingEndDate.ToUniversalTime() < videoBattle.VotingEndDate) { //so this is the case. lets see if we have any participants who have accepted the challenge var participants = _videoBattleParticipantService.GetVideoBattleParticipants(model.Id, BattleParticipantStatus.ChallengeAccepted); if (participants.Count > 0) { //nop, somebody has accepted the challenge. date can only be exended VerboseReporter.ReportError("Acceptance and Voting dates can only be extended now, because a participant has accepted the challenge", "save_video_battle"); return RespondFailure(); } } videoBattle.VotingStartDate = model.VotingStartDate.ToUniversalTime(); videoBattle.VotingEndDate = model.VotingEndDate.ToUniversalTime(); if (CanEdit(videoBattle)) _videoBattleService.Update(videoBattle); else { VerboseReporter.ReportError("Unauthorized", "save_video_battle"); return RespondFailure(); } } return RespondSuccess(new { Id = videoBattle.Id, SeName = videoBattle.GetPermalink() }); }