Ejemplo n.º 1
0
        public async Task <bool> JoinAdGroup(AdGroup adGroup)
        {
            try
            {
                var accountTrack = _repository.GetAccountTrackInfo(adGroup.Id, AccountType.AdGroup);
                _repository.DeleteAccountTrackInfo(adGroup.Id, AccountType.AdGroup);
                var request = new CreateOrUpdateBudgetAccountRequest
                {
                    AccountKey        = adGroup.GetAccountKey(),
                    MinUnitPrice      = Utilities.ToInt64Value(adGroup.MinimumUnitPrice),
                    PacingPolicy      = (BudgetPacingPolicies)((int)adGroup.Pacing),
                    PreviousSpent     = Utilities.ToInt64Value(accountTrack.LastSpend),
                    NewBudget         = Utilities.GetNewBudget(adGroup.Budget, adGroup.DailyBudget, accountTrack.LastSpend),
                    BudgetExpiryEpoch = adGroup.DailyBudget.HasValue ? Utilities.ToInt64ValueEndOfDay(DateTime.UtcNow) : Utilities.ToInt64Value(adGroup.EndDate)
                };
                await _rpcClient.CreateOrUpdateBudgetAccountAsync(request);

                _log.Info($"Adgroup joined successfully (AdgroupId : {adGroup.Id})");
                return(true);
            }
            catch (Exception ex)
            {
                _log.Error($"Adgroup failed to be joined (AdgroupId : {adGroup.Id})", ex);
                if (ex is RpcException && (ex as RpcException).Status.StatusCode == StatusCode.InvalidArgument)
                {
                    return(HandleCampaignAccountNotFound(adGroup.Id, () => JoinAdGroup(adGroup).Wait()));
                }
                return(false);
            }
        }