Inheritance: mobSocial.WebApi.Configuration.Mvc.Models.RootEntityModel
        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 });
        }