コード例 #1
0
        /// <summary>
        /// Invokes AddCard with each currently registered partner.
        /// </summary>
        public async Task Invoke()
        {
            try
            {
                ResultCode resultCode = ResultCode.None;

                // Determine the partner through whom the deal will be claimed.
                ICommercePartner partner = SelectPartner();

                if (partner == null)
                {
                    resultCode = ResultCode.UnregisteredDeal;
                }
                else
                {
                    resultCode = await partner.ClaimDealAsync().ConfigureAwait(false);
                }

                // Check the invoker's response.
                if (resultCode == ResultCode.None)
                {
                    throw new InvalidOperationException("Call to partner invoker returned ResultCode.None.");
                }

                // Return result and updated objects to the caller.
                ClaimDealConcluder claimDealConcluder = new ClaimDealConcluder(Context);
                claimDealConcluder.Conclude(resultCode);
            }
            catch (Exception ex)
            {
                RestResponder.BuildAsynchronousResponse(Context, ex);
            }
        }
コード例 #2
0
        /// <summary>
        /// Registers the specified deal to all applicable partners.
        /// </summary>
        /// <param name="context">
        /// The context object containing information on the deal to register.
        /// </param>
        public RegisterDealInvoker(CommerceContext context)
        {
            // Save the context.
            Context = context;

            // Initialize partner operations objects.
            Partners = new ICommercePartner[4]
            {
                new FirstData(Context),
                new Amex(Context),
                new Visa(Context),
                new MasterCard(Context)
            };
        }
コード例 #3
0
        /// <summary>
        /// Selects the partner through whom to claim the deal.
        /// </summary>
        /// <returns>
        /// The partner through whom the deal will be claimed.
        /// </returns>
        /// <remarks>
        /// * If the card is an Amex and the deal contains Amex info, claim the deal with Amex.
        /// * If the card is a Visa
        ///     * If the deal contains First Data info, claim the deal with First Data.
        ///     * Else if the deal contains Visa info and Visa is enabled, claim the deal with Visa.
        /// * If the card is a MasterCard
        ///     * If the deal contains First Data info, claim the deal with First Data.
        ///     * Else if the deal contains MasterCard info and MasterCard is enabled, claim the deal with MasterCard.
        /// </remarks>
        private ICommercePartner SelectPartner()
        {
            ICommercePartner result = null;

            // Find partner information within the deal.
            Card            card                     = (Card)Context[Key.Card];
            Deal            deal                     = (Deal)Context[Key.Deal];
            PartnerDealInfo amexDealInfo             = null;
            PartnerDealInfo firstDataPartnerDealInfo = null;
            PartnerDealInfo visaDealInfo             = null;
            PartnerDealInfo masterCardDealInfo       = null;

            foreach (PartnerDealInfo partnerDealInfo in deal.PartnerDealInfoList)
            {
                switch (partnerDealInfo.PartnerId)
                {
                case Partner.Amex:
                    amexDealInfo = partnerDealInfo;
                    break;

                case Partner.FirstData:
                    firstDataPartnerDealInfo = partnerDealInfo;
                    break;

                case Partner.Visa:
                    visaDealInfo = partnerDealInfo;
                    break;

                case Partner.MasterCard:
                    masterCardDealInfo = partnerDealInfo;
                    break;
                }
            }

            // Determine the partner with whom to claim the deal.
            switch (card.CardBrand)
            {
            case CardBrand.AmericanExpress:
                if (amexDealInfo != null)
                {
                    result = new Amex(Context);
                }
                break;

            case CardBrand.Visa:
                if (firstDataPartnerDealInfo != null)
                {
                    result = new FirstData(Context);
                }
                else if (visaDealInfo != null)
                {
                    result = new Visa(Context);
                }
                break;

            case CardBrand.MasterCard:
                if (firstDataPartnerDealInfo != null)
                {
                    result = new FirstData(Context);
                }
                else if (masterCardDealInfo != null)
                {
                    result = new MasterCard(Context);
                }
                break;
            }

            return(result);
        }