Пример #1
0
        /// <summary>
        /// keyValue now an instance parameter to allow for Autofac DI instantiation of strategy classes...
        /// </summary>
        /// <param name="keyValue"></param>
        /// <returns></returns>
        public object[] Execute(KeyValueParameter keyValue)
        {
            _keyValue = keyValue;
            int processedObject = 0;

            object[] output = new object[_keyValue.ResponseRequestedItems.Count];

            bool customerFound = true;

            try
            {
                if (_keyValue.ReturnMe.CustomerKeys != null)
                {
                    // AE : Feb 18 - Used injected key Process instance from DI container
                    // var customerKeyProcess = new CustomerKeyProcess(_keyValue, _mciRequestService,
                    //     _clientScopeService, _logger);
                    output[processedObject] = _customerKeyProcess.Process(_keyValue);

                    customerFound = _customerKeyProcess.CustomerFound;
                    processedObject++;
                }

                if (customerFound)
                {
                    if (_keyValue.ReturnMe.MailingHistory != null)
                    {
                        MailingHistoryProcess mailingHistoryProcess = new MailingHistoryProcess(
                            _nameAndAddress, _mailingHistoryService, _mciRequestService, _clientScopeService,
                            _logger, _keyValue);
                        output[processedObject] = mailingHistoryProcess.ProcessForKeyValue();
                        processedObject++;
                    }


                    // CITCS-17 - Request includes an aggregated view of Membership Permissions
                    if (_keyValue.ReturnMe.MembershipFlags.Required)
                    {
                        // IKeyValueReadStrategyPart mebmershipFlagsReader = new KeyValueMembershipFlagsReadStrategyPart(
                        //    _keyValue, _permissionService, _mciRequestService, _membershipService, _logger
                        //     );
                        output[processedObject] = _membershipFlagsKeyValueReader.Process(_keyValue);
                        processedObject++;
                    }

                    // As per Sam Sheperd 19/09/2017 - We should not process any permissions data request in /Customer
                    // so I have commented this out and asked Jay to remove from the documentation

                    //if (_keyValue.ReturnMe.Permissions != null && _keyValue.ReturnMe.Permissions.Required)
                    //{
                    //    var permissionProcess = new ProcessPermission(_keyValue, _permissionService,
                    //        _mciRequestService, _logger, _nameAndAddress);
                    //    output[_processedObject] = permissionProcess.ProcessPermissionFromKeyValue();
                    //    _processedObject++;
                    //}

                    if (_keyValue.ReturnMe.Membership != null && _keyValue.ReturnMe.Membership.Required)
                    {
                        var membershipProcess = new MembershipProcess(_keyValue, _membershipService,
                                                                      _mciRequestService, _logger);

                        var memberObj = membershipProcess.ProcessMembershipWithKeyValue();

                        if (!membershipProcess.CustomerFound)
                        {
                            output[processedObject] = HttpStatusCode.NotFound;
                        }
                        else
                        {
                            output[processedObject] = memberObj;
                        }
                        processedObject++;
                        if (memberObj != null && (memberObj.GetType() != typeof(NoAccessToMembership)))
                        {
                            //need to resize the array to accommodate the membershipstatus, membershipCancelReason and MembershipStatusReason values
                            //that are retrieved from GMD to populate the frontend e.g AFE
                            Array.Resize(ref output, output.Length + 1);
                            // output[processedObject] = membershipProcess.GetMembershipOptionsData();

                            // GITCS-1 : Retire above membership process method
                            // _membershipOptionsReader =
                            //    _nameAndAddressReaders[NameAndAddressStrategyReaderImplementations.MembershipOptionsReaderPart];
                            output[processedObject] = _membershipOptionsReader.Process(_nameAndAddress, null);

                            processedObject++;
                        }
                    }

                    if (_keyValue.ReturnMe.CustomerDetails != null && _keyValue.ReturnMe.CustomerDetails.Required)
                    {
                        CustomerInfo info = new CustomerInfo();

                        // var customerDetails = new CustomerDetailsProcess(_keyValue, _customerDetailsService, _logger);
                        info.CustomerDetails = _customerDetailsProcess.Process(_keyValue);
                        // AE : 15 Feb 18 : Call process interface from DI container

                        if (info.CustomerDetails == null)
                        {
                            output[processedObject] = HttpStatusCode.NotFound;
                        }
                        else
                        {
                            output[processedObject] = info;
                        }
                        processedObject++;
                    }

                    if (_keyValue.ReturnMe.TravelSummary != null && _keyValue.ReturnMe.TravelSummary.Required)
                    {
                        var travelSummary = new CustomerMatchProcess(_nameAndAddress, _customerMatchService, _travelSummaryService, _logger);
                        output[processedObject] = travelSummary.TravelSummaryProcess(int.Parse(_keyValue.KeyValue.Value));
                        processedObject++;
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error("KeyValuePairStrategy: " + "ErrorTag: " + ErrorTagProvider.ErrorTag + " -- " + ex.Message, ex);
                throw new Exception(ex.Message);
            }

            return(output);
        }
        public object[] Execute(NameAndAddressParameter nameAndAddress)
        {
            int processedObject = 0;

            _nameAndAddress = nameAndAddress;

            object[] output = new object[_nameAndAddress.ResponseRequestedItems.Count];
            try
            {
                foreach (var item in _nameAndAddress.ResponseRequestedItems)
                {
                    switch (item)
                    {
                    case ReturnMeTypeConstant.CustomerKeys:
                        //CustomerKeyProcess customerKeyProcess = new CustomerKeyProcess(_keyValue,
                        //    _mciRequestService, _clientScopeService, _logger, _nameAndAddress);
                        //output[processedObject] = customerKeyProcess.ProcessForNameAndAddress( _nameAndAddress, _keyValue );
                        //
                        output[processedObject] = _customerKeyProcess.ProcessForNameAndAddress(_nameAndAddress, _keyValue);
                        // AE Feb 18 : Use process from DI container

                        processedObject++;
                        break;

                    case ReturnMeTypeConstant.MailingHistory:
                        MailingHistoryProcess mailingHistoryProcess = new MailingHistoryProcess(_nameAndAddress,
                                                                                                _mailingHistoryService, _mciRequestService, _clientScopeService, _logger, _keyValue);
                        output[processedObject] = mailingHistoryProcess.Process();
                        processedObject++;
                        break;

                    case ReturnMeTypeConstant.Permissions:
                        var processPermission = new ProcessPermission(_keyValue, PermissionService,
                                                                      _mciRequestService, _logger, _nameAndAddress);
                        output[processedObject] = processPermission.ProcessPermissionForNameAndAddress();
                        processedObject++;
                        break;

                    case ReturnMeTypeConstant.Membership:

                        // GITCS-1 : Refactor to NameAndAddressStrategyMembershipReaderParts, in place of MembershipProcess class
                        //
                        var membershipDetailReader =
                            _nameAndAddressReaders[
                                NameAndAddressStrategyReaderImplementations.MembershipDetailsReaderPart];
                        var memberObj = membershipDetailReader.Process(_nameAndAddress,
                                                                       _keyValue?.KeyValue.IntValue);

                        /*
                         * var membershipProcess = new MembershipProcess(_keyValue, _membershipService,
                         *  _mciRequestService, _logger, _nameAndAddress);
                         * var memberObj = membershipProcess.GetMembershipFromNameAndAddress();
                         */

                        output[processedObject] = memberObj;
                        processedObject++;

                        if (memberObj != null && (memberObj.GetType() != typeof(NoAccessToMembership)))
                        {
                            //need to resize the array to accommodate the membershipstatus, membershipCancelReason and MembershipStatusReason values
                            //that are retrieved from GMD to populate the frontend e.g AFE
                            Array.Resize(ref output, output.Length + 1);
                            // output[processedObject] = membershipProcess.GetMembershipOptionsData();

                            //var membershipOptionsReader =
                            //    _nameAndAddressReaders[
                            //        NameAndAddressStrategyReaderImplementations.MembershipOptionsReaderPart ];
                            output[processedObject] = _membershipOptionsReader.Process(_nameAndAddress, null);

                            processedObject++;
                        }

                        break;

                    case ReturnMeTypeConstant.CustomerMatch:
                        var customerMatch          = new CustomerMatchProcess(_nameAndAddress, _customerMatchService, _travelSummaryService, _logger);
                        var matchedCustomerDetails = customerMatch.Process();
                        output[processedObject] = matchedCustomerDetails;
                        processedObject++;
                        break;

                    case ReturnMeTypeConstant.TravelSummary:
                        var travelSummary = new CustomerMatchProcess(_nameAndAddress, _customerMatchService, _travelSummaryService, _logger);
                        output[processedObject] = travelSummary.TravelSummaryProcess(0, _nameAndAddress.NameAndAddress);
                        processedObject++;
                        break;
                    }
                }
            }

            catch (Exception ex)
            {
                _logger.Error(
                    "NameAndAddressStrategy: " + "ErrorTag: " + ErrorTagProvider.ErrorTag + " -- " + ex.Message, ex);
                throw new Exception(ex.Message);
            }
            return(output);
        }