Beispiel #1
0
 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})");
 }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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()
            });
        }
Beispiel #5
0
        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)
            });
        }