public override void OnUserEarnedReward(IRewardItem reward) { UserEarnedReward?.Invoke(_adUnit, new AdMobRewardedEventArgs() { RewardAmount = reward.Amount, RewardType = reward.Type }); Console.WriteLine($"OnUserEarnedReward({_adUnit}) type({reward.Type}) amount({reward.Amount})"); }
public RewardModel(UserEarnedReward earnedReward, BaseController controller) { RewardId = earnedReward.Guid.ToBase64String(); IconUri = controller.GetDynamicResourceUri(earnedReward.Reward); var globalization = earnedReward.Reward.GetGlobalization(); Title = globalization.Title; Text = globalization.Text; UnlockDate = earnedReward.CreationDate; if (earnedReward.Reward.RewardSponsor == null) { return; } SponsorName = earnedReward.Reward.RewardSponsor.Name; SponsorIcon = controller.GetDynamicResourceUri(earnedReward.Reward.RewardSponsor); SponsorUri = new Uri(earnedReward.Reward.RewardSponsor.WebsiteUri); Discarded = earnedReward.Discarded; }
public IEnumerable <RewardResponse> GetRewardsHistory(int page = 1, int perPage = 20) { // --- Obtener la última Recompensa conseguida --- UserEarnedReward lastReward = Database.UserEarnedRewardStore.GetFirst( filter: f => f.User.Guid == CurrentUser.Guid, orderBy: o => o.OrderBy(by => by.CreationDate) ); // --- Verificar si se tiene la cabecera {If-Modified-Since} --- DateTimeOffset?ifModifiedSince = Request.Headers.IfModifiedSince; if (ifModifiedSince.HasValue && lastReward != null) { if (ifModifiedSince.Value.UtcDateTime > lastReward.CreationDate) { throw new HttpNotModifiedException(); } } // --- Obtener las Recompensas conseguidas --- IEnumerable <UserEarnedReward> rewards = Database.UserEarnedRewardStore.GetAll( filter: f => f.User.Guid == CurrentUser.Guid, orderBy: o => o.OrderByDescending(b => b.CreationDate), extra: x => x.Skip((page - 1) * perPage).Take(perPage), include: new string[] { "Reward.RewardGlobalization", "RewardGift.RewardPictures" } ); // --- Preparar respuesta --- List <RewardResponse> response = new List <RewardResponse>(); foreach (UserEarnedReward earnedReward in rewards) { // Obtener Recompensa en el idioma actual RewardGlobalization rewardGlobalization = earnedReward.Reward.GetGlobalization(); // Buscar y obtener regalos asociados IEnumerable <RewardGift> rewardGifts = earnedReward.Reward.RewardGift; List <RewardGiftResponse> rewardGiftsList = new List <RewardGiftResponse>(); foreach (RewardGift rewardGift in rewardGifts) { // Obtener fotografías del Regalo List <string> rewardGiftPictures = new List <string>(); foreach (RewardGiftPicture picture in rewardGift.RewardGiftPictures) { rewardGiftPictures.Add( picture.Guid.ToString() + "." + picture.PictureExtension ); } // Determinar si el Regalo se reclamó por el Usuario bool userClaimed = ( from uc in rewardGift.UserRewardGiftClaimed where uc.RedeemedByUser.Guid == CurrentUser.Guid select uc ).FirstOrDefault() != null; // Obtener Regalo en el Idioma actual rewardGiftsList.Add(new RewardGiftResponse { RewardGiftId = rewardGift.Guid.ToBase64String(), Stock = rewardGift.Stock, NamePlural = rewardGift.GetGlobalization().NamePlural, NameSingular = rewardGift.GetGlobalization().NameSingular, Claimed = userClaimed, Pictures = rewardGiftPictures.ToArray() }); } // Obtener Regiones a las que aplica la Recompensa List <string> rewardRegions = new List <string>(); foreach (RewardRegionalization region in earnedReward.Reward.RewardRegionalization) { rewardRegions.Add(region.RegionCode); } response.Add(new RewardResponse { RewardId = earnedReward.Guid.ToBase64String(), EarnDate = earnedReward.CreationDate, Title = rewardGlobalization.Title, Text = rewardGlobalization.Text, Source = rewardGlobalization.Source, RewardGifts = rewardGiftsList.ToArray(), RegionCodes = rewardRegions.ToArray() }); } return(response); }
public RewardResponse GetReward(string earnedRewardId) { // --- Obtener la Recompensa solicitada --- UserEarnedReward reward = Database.UserEarnedRewardStore.Get(earnedRewardId); if (reward == null) { throw new HttpNotFoundException( ControllerStrings.Warning901_RewardNotFound ); } if (reward.User.Guid != CurrentUser.Guid) { throw new HttpNotFoundException( ControllerStrings.Warning901_RewardNotFound ); } // --- Buscar y obtener regalos asociados --- IEnumerable <RewardGift> rewardGifts = reward.Reward.RewardGift; List <RewardGiftResponse> rewardGiftsList = new List <RewardGiftResponse>(); foreach (RewardGift rewardGift in rewardGifts) { // Obtener fotografías del Regalo List <string> rewardGiftPictures = new List <string>(); foreach (RewardGiftPicture picture in rewardGift.RewardGiftPictures) { rewardGiftPictures.Add( picture.Guid.ToBase64String() + "." + picture.PictureExtension ); } // Determinar si el Regalo se reclamó por el Usuario bool userClaimed = rewardGift.UserRewardGiftClaimed.Where(w => w.RedeemedByUser.Guid == CurrentUser.Guid ).FirstOrDefault() != null; // Obtener Regalo en el Idioma actual rewardGiftsList.Add(new RewardGiftResponse { RewardGiftId = rewardGift.Guid.ToBase64String(), Stock = rewardGift.Stock, NamePlural = rewardGift.GetGlobalization().NamePlural, NameSingular = rewardGift.GetGlobalization().NameSingular, Claimed = userClaimed, Pictures = rewardGiftPictures.ToArray() }); } // --- Obtener Regiones a las que aplica la Recompensa --- List <string> rewardRegions = new List <string>(); foreach (RewardRegionalization region in reward.Reward.RewardRegionalization) { rewardRegions.Add(region.RegionCode); } // --- Preparar y devolver respuesta --- return(new RewardResponse { RewardId = reward.Guid.ToBase64String(), EarnDate = reward.CreationDate, Title = reward.Reward.GetGlobalization().Title, Text = reward.Reward.GetGlobalization().Text, Source = reward.Reward.GetGlobalization().Source, RewardGifts = rewardGiftsList.ToArray(), RegionCodes = rewardRegions.ToArray() }); }
public GiftClaimResponse ClaimRewardGift(string giftId) { // --- Buscar Regalo solicitado --- RewardGift rewardGift = Database.RewardGiftStore.Get(giftId); if (rewardGift == null) { throw new HttpNotFoundException( ControllerStrings.Warning701_GiftNotFound ); } // --- Verificar que el Regalo haya sido obtenido por el Usuario --- UserEarnedReward userEarnedReward = Database.UserEarnedRewardStore.GetFirst( filter: f => f.User.Guid == CurrentUser.Guid && f.Reward.RewardGift.Any(r => r.Guid == rewardGift.Guid) ); if (userEarnedReward == null) { throw new HttpNotFoundException( ControllerStrings.Warning701_GiftNotFound ); } // --- Verificar que el Regalo no haya sido Reclamado por el Usuario --- bool userClaimedGift = rewardGift.UserRewardGiftClaimed.Where(w => w.RedeemedByUser.Guid == CurrentUser.Guid && w.RewardGift.Guid == rewardGift.Guid ).FirstOrDefault() != null; if (userClaimedGift) { throw new HttpNotFoundException( ControllerStrings.Warning701_GiftNotFound ); } // --- Verificar que el Usuario tenga Información de Envío si el Regalo se envía --- if (rewardGift.IsShipped) { ShippingInformation shippingInformation = CurrentUser.ShippingInformation; if (shippingInformation == null) { throw new HttpConflictException( ControllerStrings.Warning205_ShippingInfoNotSet ); } } // --- Obtener un objeto de Reclamo --- UserRewardGiftClaimed giftClaim = Database.UserRewardGiftClaimedStore.GetFirst( filter: f => f.RedeemedByUser == null && f.RewardGift.Guid == rewardGift.Guid ); if (giftClaim == null) { throw new HttpNoContentException( ControllerStrings.Warning702_GiftOutOfStock ); } // --- Asociar al Usuario con el Reclamo (efectivamente reclamando el regalo del usuario) --- giftClaim.RedeemedByUser = CurrentUser; Database.UserRewardGiftClaimedStore.Update(giftClaim); Database.SaveChanges(); // Devolver estatus "204 No Content" si el Regalo lo envía KMS. if (rewardGift.IsShipped) { throw new HttpNoContentException("703" + ControllerStrings.Warning703_GiftShippingPending); } // --- Devolver detalles de canje --- return(new GiftClaimResponse() { ExpirationDate = giftClaim.ExpirationDate.HasValue ? giftClaim.ExpirationDate.Value : DateTime.MaxValue, RedeemCode = giftClaim.RedeemCode, RedeemPicture = GetDynamicResourceUri(giftClaim) }); }