Ejemplo n.º 1
0
        /// <summary>
        /// Ensures the offer is valid.
        /// </summary>
        /// <param name="seed">
        /// The seed.
        /// </param>
        /// <returns>
        /// The <see cref="Attempt"/>.
        /// </returns>
        private Attempt <IOfferResult <object, object> > EnsureValidOffer(IOfferResult <object, object> seed)
        {
            // verify a reward has been configured
            if (Reward == null)
            {
                seed.Messages.Add("This offer does not have a reward configured");
                return(Attempt <IOfferResult <object, object> > .Fail(seed, new OfferRedemptionException("Offer does not have a configured award")));
            }

            // ensure the offer is active
            if (!Settings.Active)
            {
                seed.Messages.Add("Offer is not active");
                return(Attempt <IOfferResult <object, object> > .Fail(seed, new OfferRedemptionException("Offer is not active")));
            }

            // ensure the offer has not expired
            if (Settings.Expired)
            {
                seed.Messages.Add("Offer has expired");
                return(Attempt <IOfferResult <object, object> > .Fail(seed, new OfferRedemptionException("Offer has expired")));
            }

            // verify an offer processor is available for the offer
            if (OfferProcessor == null)
            {
                seed.Messages.Add("An offer processor could not be resolved for this offer.  Custom offers must have custom offer processors defined.");
                return(Attempt <IOfferResult <object, object> > .Fail(seed, new OfferRedemptionException("Offer processor was not resolved")));
            }

            // success
            return(Attempt <IOfferResult <object, object> > .Succeed(seed));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// The populate constraint offer result.
        /// </summary>
        /// <param name="seed">
        /// The seed.
        /// </param>
        /// <param name="constraintAttempt">
        /// The constraint attempt.
        /// </param>
        /// <returns>
        /// The offer result.
        /// </returns>
        private static IOfferResult <object, object> PopulateConstraintOfferResult(IOfferResult <object, object> seed, Attempt <object> constraintAttempt)
        {
            if (!constraintAttempt.Success)
            {
                seed.Award            = null;
                seed.ValidatedAgainst = constraintAttempt.Result;
                seed.Messages.AddRange(
                    new[] { "Did not pass constraint validation.", constraintAttempt.Exception.Message });
            }
            else
            {
                seed.Messages.Add("PASSED - Constraint validation");
            }

            return(seed);
        }