public IHttpActionResult GetSponsors([FromUri] SponsorsRequestModel requestModel) { //first we check if it's the battle owner or a sponsor calling this method? //for that we need to query the battle first //todo: get picture battle when ready var battle = requestModel.BattleType == BattleType.Video ? _videoBattleService.Get(requestModel.BattleId) : null; if (battle == null) return Json(new { Success = false, Message = "Battle doesn't exist" }); //lets query the sponsor var sponsors = battle.ChallengerId == ApplicationContext.Current.CurrentUser.Id ? _sponsorService.GetSponsorsGrouped(null, requestModel.BattleId, requestModel.BattleType, requestModel.SponsorshipStatus) //battle owner : _sponsorService.GetSponsorsGrouped(ApplicationContext.Current.CurrentUser.Id, requestModel.BattleId, requestModel.BattleType, requestModel.SponsorshipStatus); //sponsor or somebody else? //to list var model = sponsors.Select(s => s.ToPublicModel(_userService, _mediaService, _sponsorService, _formatterService, _mediaSettings)).OrderBy(x => x.SponsorData.DisplayOrder).ToList(); var allPrizes = _videoBattlePrizeService.GetBattlePrizes(requestModel.BattleId); var totalWinningPositions = allPrizes.Count(x => !x.IsSponsored); //and do we have any existing saved prizes which are sponsored foreach (var m in model) { m.SponsoredProductPrizes = new List<VideoBattlePrizeModel>(); var sponsoredPrizes = allPrizes.Where(x => x.IsSponsored && m.CustomerId == x.SponsorCustomerId); foreach (var prize in sponsoredPrizes) { var prizeModel = new VideoBattlePrizeModel() { PrizeType = prize.PrizeType, PrizeOther = prize.PrizeOther, WinnerPosition = prize.WinnerPosition, Id = prize.Id, IsSponsored = prize.IsSponsored, VideoBattleId = battle.Id, SponsorCustomerId = prize.SponsorCustomerId }; m.SponsoredProductPrizes.Add(prizeModel); } var totalSponsoredPrizes = sponsoredPrizes.Count(); //if not all winning positions have been covered, add the remaining for (var index = totalSponsoredPrizes + 1; index <= totalWinningPositions; index++) { m.SponsoredProductPrizes.Add(new VideoBattlePrizeModel() { Id = 0, PrizeType = BattlePrizeType.Other, WinnerPosition = index, IsSponsored = true, PrizeOther = "", VideoBattleId = battle.Id, SponsorCustomerId = m.CustomerId }); } } return Json(new { Success = true, Sponsors = model, IsChallenger = battle.ChallengerId == ApplicationContext.Current.CurrentUser.Id, IsSponsor = model.Any(x => x.CustomerId == ApplicationContext.Current.CurrentUser.Id), BattleName = battle.Name, BattleUrl = Url.Route("VideoBattlePage", new RouteValueDictionary() { {"SeName", battle.GetPermalink()} }), TotalWinningPositions = totalWinningPositions }); }
public IHttpActionResult SavePrize(VideoBattlePrizeModel model) { if (!ModelState.IsValid) { VerboseReporter.ReportError("Missing required parameters or invalid data submitted", "save_prize"); return RespondFailure(); } //does the person adding or updating prize own this battle? var videoBattle = _videoBattleService.Get(model.VideoBattleId); if (videoBattle == null || videoBattle.ChallengerId != ApplicationContext.Current.CurrentUser.Id) { VerboseReporter.ReportError("Unauthorized", "save_prize"); return RespondFailure(); } VideoBattlePrize prize = null; //let's check if the prize is being edited or added if (model.Id == 0) { prize = new VideoBattlePrize() { DateCreated = DateTime.UtcNow }; } else { prize = _videoBattlePrizeService.Get(model.Id); } prize.DateUpdated = DateTime.UtcNow; prize.Description = model.Description; switch (model.PrizeType) { case BattlePrizeType.FixedAmount: prize.PrizeAmount = model.PrizeAmount; break; case BattlePrizeType.FixedProduct: prize.PrizeProductId = model.PrizeProductId; break; case BattlePrizeType.PercentageAmount: prize.PrizePercentage = model.PrizePercentage; break; case BattlePrizeType.Other: prize.PrizeOther = model.PrizeOther; break; } prize.WinnerId = model.WinnerId; prize.WinnerPosition = model.WinnerPosition; prize.PrizeType = model.PrizeType; prize.VideoBattleId = model.VideoBattleId; if (prize.Id == 0) _videoBattlePrizeService.Insert(prize); else _videoBattlePrizeService.Update(prize); return RespondSuccess(new { Id = prize.Id }); }