示例#1
0
        public async Task UpdateAsync(ReferralFriend referral)
        {
            using (var context = _msSqlContextFactory.CreateDataContext())
            {
                context.Update(_mapper.Map <FriendReferralEntity>(referral));

                await context.SaveChangesAsync();
            }
        }
示例#2
0
        public async Task <ReferralFriend> CreateAsync(ReferralFriend referral)
        {
            using (var context = _msSqlContextFactory.CreateDataContext())
            {
                var entity = _mapper.Map <FriendReferralEntity>(referral);
                await context.AddAsync(entity);

                await context.SaveChangesAsync();

                return(_mapper.Map <ReferralFriend>(entity));
            }
        }
        private CommonReferralModel CovertReferralFriendToCommonReferral(ReferralFriend value)
        {
            string[] nameSurname     = new string[2];
            string[] nameSurnameTemp = value.FullName.Trim(' ').Split(' ');
            if (nameSurnameTemp.Length == 1)
            {
                nameSurname[0] = value.FullName;
                nameSurname[1] = string.Empty;
            }
            else
            {
                for (int i = 0; i < nameSurnameTemp.Length; i++)
                {
                    if (i < nameSurnameTemp.Length - 1)
                    {
                        if (!string.IsNullOrEmpty(nameSurname[0]))
                        {
                            nameSurname[0] += " " + nameSurnameTemp[i];
                        }
                        else
                        {
                            nameSurname[0] += nameSurnameTemp[i];
                        }
                    }
                    else
                    {
                        nameSurname[1] = nameSurnameTemp[i];
                    }
                }
            }

            return(new CommonReferralModel
            {
                CampaignId = value.CampaignId,
                Email = value.Email,
                FirstName = nameSurname[0],
                LastName = nameSurname[1],
                Id = value.Id.ToString("D"),
                ReferralType = ReferralType.Friend,
                Status = ConvertFriendStateToCommonReferralStatus(value.State),
                TimeStamp = value.CreationDateTime
            });
        }
        public async Task <ReferralFriend> CreateAsync(Guid referrerId, Guid campaignId, string email, string fullName)
        {
            var profile = await _customerProfileClient.CustomerProfiles.GetByCustomerIdAsync(referrerId.ToString("D"));

            if (profile.ErrorCode == CustomerProfileErrorCodes.CustomerProfileDoesNotExist)
            {
                throw new CustomerDoesNotExistException($"Connector with id '{referrerId}' does not exist.");
            }

            if (string.Compare(profile.Profile.Email, email, StringComparison.InvariantCultureIgnoreCase) == 0)
            {
                throw new ReferYourselfException($"Cannot refer to yourself.");
            }

            var campaign = await _campaignClient.Campaigns.GetByIdAsync(campaignId.ToString("D"));

            if (campaign.ErrorCode == CampaignServiceErrorCodes.EntityNotFound)
            {
                throw new CampaignNotFoundException($"Campaign with id '{campaignId}' not found.");
            }

            var existingCustomer =
                await _customerProfileClient.CustomerProfiles.GetByEmailAsync(new GetByEmailRequestModel
            {
                Email = email,
                IncludeNotVerified = true
            });

            if (existingCustomer.ErrorCode == CustomerProfileErrorCodes.None)
            {
                throw new ReferralAlreadyConfirmedException($"Customer with such email already exists.");
            }

            var existingFriendProfile =
                await _customerProfileClient.ReferralFriendProfiles.GetByEmailAndReferrerAsync(
                    new ReferralFriendByEmailAndReferrerProfileRequest
            {
                Email      = email,
                ReferrerId = referrerId
            });

            if (existingFriendProfile.ErrorCode == ReferralFriendProfileErrorCodes.None)
            {
                throw new ReferralAlreadyExistException($"Referral with such email for this referrer '{referrerId}' already exists.");
            }

            var referralCode = await _referralService.GetOrCreateReferralForCustomerIdAsync(referrerId);

            var referralFriend = new ReferralFriend
            {
                Email            = email,
                FullName         = fullName,
                ReferrerId       = referrerId,
                CampaignId       = campaignId,
                CreationDateTime = DateTime.UtcNow,
                State            = ReferralFriendState.Pending
            };

            referralFriend = await _friendReferralHistoryRepository.CreateAsync(referralFriend);

            var response = await _customerProfileClient.ReferralFriendProfiles.AddAsync(new ReferralFriendProfileRequest
            {
                Email            = email,
                FullName         = fullName,
                ReferralFriendId = referralFriend.Id,
                ReferrerId       = referrerId
            });

            if (response.ErrorCode != ReferralFriendProfileErrorCodes.None)
            {
                _log.Error(message: "An error occurred while creating referral friend profile",
                           context: $"referralFriendId: {referralFriend.Id}");
            }

            await _notificationPublisherService.FriendReferralConfirmRequestAsync(
                referrerId.ToString("D"),
                referralCode,
                profile.Profile.FirstName,
                profile.Profile.LastName,
                email);

            _log.Info("Referral friend created", context: $"referralFriendId: {referralFriend.Id}");

            return(referralFriend);
        }