killbill-memoizeit

analytics: switch to internal APIs where possible Signed-off-by:

10/9/2012 8:06:22 PM

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessAccountDao.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessAccountDao.java
index eac8aef..fb4fd15 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessAccountDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessAccountDao.java
@@ -17,6 +17,7 @@
 package com.ning.billing.analytics;
 
 import java.math.BigDecimal;
+import java.util.Collection;
 import java.util.List;
 import java.util.UUID;
 
@@ -28,18 +29,18 @@ import org.slf4j.LoggerFactory;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.AccountData;
-import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.analytics.dao.BusinessAccountSqlDao;
 import com.ning.billing.analytics.model.BusinessAccount;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.invoice.api.Invoice;
-import com.ning.billing.invoice.api.InvoiceUserApi;
 import com.ning.billing.payment.api.Payment;
 import com.ning.billing.payment.api.PaymentApi;
 import com.ning.billing.payment.api.PaymentApiException;
 import com.ning.billing.payment.api.PaymentMethod;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.invoice.InvoiceInternalApi;
 
 import com.google.inject.Inject;
 
@@ -48,23 +49,23 @@ public class BusinessAccountDao {
     private static final Logger log = LoggerFactory.getLogger(BusinessAccountDao.class);
 
     private final BusinessAccountSqlDao sqlDao;
-    private final AccountUserApi accountApi;
-    private final InvoiceUserApi invoiceUserApi;
+    private final AccountInternalApi accountApi;
+    private final InvoiceInternalApi invoiceApi;
     private final PaymentApi paymentApi;
 
     @Inject
-    public BusinessAccountDao(final BusinessAccountSqlDao sqlDao, final AccountUserApi accountApi,
-                              final InvoiceUserApi invoiceUserApi, final PaymentApi paymentApi) {
+    public BusinessAccountDao(final BusinessAccountSqlDao sqlDao, final AccountInternalApi accountApi,
+                              final InvoiceInternalApi invoiceApi, final PaymentApi paymentApi) {
         this.sqlDao = sqlDao;
         this.accountApi = accountApi;
-        this.invoiceUserApi = invoiceUserApi;
+        this.invoiceApi = invoiceApi;
         this.paymentApi = paymentApi;
     }
 
     public void accountCreated(final AccountData data, final InternalCallContext context) {
         final Account account;
         try {
-            account = accountApi.getAccountByKey(data.getExternalKey(), context.toCallContext());
+            account = accountApi.getAccountByKey(data.getExternalKey(), context);
             accountUpdated(account.getId(), context);
         } catch (AccountApiException e) {
             log.warn("Error encountered creating BusinessAccount", e);
@@ -79,7 +80,7 @@ public class BusinessAccountDao {
     public void accountUpdated(final UUID accountId, final InternalCallContext context) {
         final Account account;
         try {
-            account = accountApi.getAccountById(accountId, context.toCallContext());
+            account = accountApi.getAccountById(accountId, context);
         } catch (AccountApiException e) {
             log.warn("Error encountered creating BusinessAccount", e);
             return;
@@ -117,9 +118,8 @@ public class BusinessAccountDao {
             String billingAddressCountry = bac.getBillingAddressCountry();
 
             // Retrieve invoices information
-            final List<Invoice> invoices = invoiceUserApi.getInvoicesByAccount(account.getId(), context.toTenantContext());
+            final Collection<Invoice> invoices = invoiceApi.getInvoicesByAccountId(account.getId(), context);
             if (invoices != null && invoices.size() > 0) {
-
                 for (final Invoice invoice : invoices) {
                     totalInvoiceBalance = totalInvoiceBalance.add(invoice.getBalance());
 
@@ -160,7 +160,7 @@ public class BusinessAccountDao {
             bac.setLastInvoiceDate(lastInvoiceDate);
             bac.setTotalInvoiceBalance(totalInvoiceBalance);
 
-            bac.setBalance(invoiceUserApi.getAccountBalance(account.getId(), context.toTenantContext()));
+            bac.setBalance(invoiceApi.getAccountBalance(account.getId(), context));
         } catch (PaymentApiException ex) {
             log.error(String.format("Failed to handle account update for account %s", account.getId()), ex);
         }
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusDao.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusDao.java
index 31e4c47..64347a1 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusDao.java
@@ -29,15 +29,15 @@ import org.slf4j.LoggerFactory;
 
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
-import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.analytics.dao.BusinessOverdueStatusSqlDao;
 import com.ning.billing.analytics.model.BusinessOverdueStatus;
-import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.junction.api.Blockable;
 import com.ning.billing.junction.api.BlockingState;
 import com.ning.billing.util.callcontext.InternalCallContext;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
 import com.ning.billing.util.svcapi.junction.BlockingApi;
 
 import com.google.common.collect.ImmutableList;
@@ -48,13 +48,13 @@ public class BusinessOverdueStatusDao {
     private static final Logger log = LoggerFactory.getLogger(BusinessOverdueStatusDao.class);
 
     private final BusinessOverdueStatusSqlDao overdueStatusSqlDao;
-    private final AccountUserApi accountApi;
-    private final EntitlementUserApi entitlementApi;
+    private final AccountInternalApi accountApi;
+    private final EntitlementInternalApi entitlementApi;
     private final BlockingApi blockingApi;
 
     @Inject
-    public BusinessOverdueStatusDao(final BusinessOverdueStatusSqlDao overdueStatusSqlDao, final AccountUserApi accountApi,
-                                    final EntitlementUserApi entitlementApi, final BlockingApi blockingApi) {
+    public BusinessOverdueStatusDao(final BusinessOverdueStatusSqlDao overdueStatusSqlDao, final AccountInternalApi accountApi,
+                                    final EntitlementInternalApi entitlementApi, final BlockingApi blockingApi) {
         this.overdueStatusSqlDao = overdueStatusSqlDao;
         this.accountApi = accountApi;
         this.entitlementApi = entitlementApi;
@@ -72,7 +72,7 @@ public class BusinessOverdueStatusDao {
     private void overdueStatusChangedForBundle(final UUID bundleId, final InternalCallContext context) {
         final SubscriptionBundle bundle;
         try {
-            bundle = entitlementApi.getBundleFromId(bundleId, context.toCallContext());
+            bundle = entitlementApi.getBundleFromId(bundleId, context);
         } catch (EntitlementUserApiException e) {
             log.warn("Ignoring update for bundle {}: bundle does not exist", bundleId);
             return;
@@ -80,7 +80,7 @@ public class BusinessOverdueStatusDao {
 
         final Account account;
         try {
-            account = accountApi.getAccountById(bundle.getAccountId(), context.toCallContext());
+            account = accountApi.getAccountById(bundle.getAccountId(), context);
         } catch (AccountApiException e) {
             log.warn("Ignoring update for bundle {}: account {} does not exist", bundleId, bundle.getAccountId());
             return;
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionDao.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionDao.java
index 6c0d371..6c4a834 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionDao.java
@@ -27,7 +27,6 @@ import org.slf4j.LoggerFactory;
 
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
-import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionSqlDao;
 import com.ning.billing.analytics.model.BusinessSubscription;
 import com.ning.billing.analytics.model.BusinessSubscriptionEvent;
@@ -36,13 +35,14 @@ import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.entitlement.api.SubscriptionTransitionType;
 import com.ning.billing.entitlement.api.user.EffectiveSubscriptionEvent;
-import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.api.user.SubscriptionEvent;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
 
 import com.google.inject.Inject;
 
@@ -51,16 +51,16 @@ public class BusinessSubscriptionTransitionDao {
     private static final Logger log = LoggerFactory.getLogger(BusinessSubscriptionTransitionDao.class);
 
     private final BusinessSubscriptionTransitionSqlDao sqlDao;
-    private final EntitlementUserApi entitlementApi;
-    private final AccountUserApi accountApi;
+    private final EntitlementInternalApi entitlementApi;
+    private final AccountInternalApi accountApi;
     private final CatalogService catalogService;
     private final Clock clock;
 
     @Inject
     public BusinessSubscriptionTransitionDao(final BusinessSubscriptionTransitionSqlDao sqlDao,
                                              final CatalogService catalogService,
-                                             final EntitlementUserApi entitlementApi,
-                                             final AccountUserApi accountApi,
+                                             final EntitlementInternalApi entitlementApi,
+                                             final AccountInternalApi accountApi,
                                              final Clock clock) {
         this.sqlDao = sqlDao;
         this.catalogService = catalogService;
@@ -72,7 +72,7 @@ public class BusinessSubscriptionTransitionDao {
     public void rebuildTransitionsForBundle(final UUID bundleId, final InternalCallContext context) {
         final SubscriptionBundle bundle;
         try {
-            bundle = entitlementApi.getBundleFromId(bundleId, context.toCallContext());
+            bundle = entitlementApi.getBundleFromId(bundleId, context);
         } catch (EntitlementUserApiException e) {
             log.warn("Ignoring update for bundle {}: bundle does not exist", bundleId);
             return;
@@ -80,13 +80,13 @@ public class BusinessSubscriptionTransitionDao {
 
         final Account account;
         try {
-            account = accountApi.getAccountById(bundle.getAccountId(), context.toCallContext());
+            account = accountApi.getAccountById(bundle.getAccountId(), context);
         } catch (AccountApiException e) {
             log.warn("Ignoring update for bundle {}: account {} does not exist", bundleId, bundle.getAccountId());
             return;
         }
 
-        final List<Subscription> subscriptions = entitlementApi.getSubscriptionsForBundle(bundleId, context.toCallContext());
+        final List<Subscription> subscriptions = entitlementApi.getSubscriptionsForBundle(bundleId, context);
 
         final Currency currency = account.getCurrency();
 
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessTagDao.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessTagDao.java
index 2c0f30d..32ee506 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessTagDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessTagDao.java
@@ -25,16 +25,16 @@ import org.slf4j.LoggerFactory;
 
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
-import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.analytics.dao.BusinessAccountTagSqlDao;
 import com.ning.billing.analytics.dao.BusinessInvoicePaymentTagSqlDao;
 import com.ning.billing.analytics.dao.BusinessInvoiceTagSqlDao;
 import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionTagSqlDao;
-import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
 
 public class BusinessTagDao {
 
@@ -44,22 +44,22 @@ public class BusinessTagDao {
     private final BusinessInvoiceTagSqlDao invoiceTagSqlDao;
     private final BusinessInvoicePaymentTagSqlDao invoicePaymentTagSqlDao;
     private final BusinessSubscriptionTransitionTagSqlDao subscriptionTransitionTagSqlDao;
-    private final AccountUserApi accountApi;
-    private final EntitlementUserApi entitlementUserApi;
+    private final AccountInternalApi accountApi;
+    private final EntitlementInternalApi entitlementApi;
 
     @Inject
     public BusinessTagDao(final BusinessAccountTagSqlDao accountTagSqlDao,
                           final BusinessInvoicePaymentTagSqlDao invoicePaymentTagSqlDao,
                           final BusinessInvoiceTagSqlDao invoiceTagSqlDao,
                           final BusinessSubscriptionTransitionTagSqlDao subscriptionTransitionTagSqlDao,
-                          final AccountUserApi accountApi,
-                          final EntitlementUserApi entitlementUserApi) {
+                          final AccountInternalApi accountApi,
+                          final EntitlementInternalApi entitlementApi) {
         this.accountTagSqlDao = accountTagSqlDao;
         this.invoicePaymentTagSqlDao = invoicePaymentTagSqlDao;
         this.invoiceTagSqlDao = invoiceTagSqlDao;
         this.subscriptionTransitionTagSqlDao = subscriptionTransitionTagSqlDao;
         this.accountApi = accountApi;
-        this.entitlementUserApi = entitlementUserApi;
+        this.entitlementApi = entitlementApi;
     }
 
     public void tagAdded(final ObjectType objectType, final UUID objectId, final String name, final InternalCallContext context) {
@@ -93,7 +93,7 @@ public class BusinessTagDao {
     private void tagAddedForAccount(final UUID accountId, final String name, final InternalCallContext context) {
         final Account account;
         try {
-            account = accountApi.getAccountById(accountId, context.toCallContext());
+            account = accountApi.getAccountById(accountId, context);
         } catch (AccountApiException e) {
             log.warn("Ignoring tag addition of {} for account id {} (account does not exist)", name, accountId.toString());
             return;
@@ -110,7 +110,7 @@ public class BusinessTagDao {
     private void tagAddedForBundle(final UUID bundleId, final String name, final InternalCallContext context) {
         final SubscriptionBundle bundle;
         try {
-            bundle = entitlementUserApi.getBundleFromId(bundleId, context.toCallContext());
+            bundle = entitlementApi.getBundleFromId(bundleId, context);
         } catch (EntitlementUserApiException e) {
             log.warn("Ignoring tag addition of {} for bundle id {} (bundle does not exist)", name, bundleId.toString());
             return;
@@ -118,7 +118,7 @@ public class BusinessTagDao {
 
         final Account account;
         try {
-            account = accountApi.getAccountById(bundle.getAccountId(), context.toCallContext());
+            account = accountApi.getAccountById(bundle.getAccountId(), context);
         } catch (AccountApiException e) {
             log.warn("Ignoring tag addition of {} for bundle id {} and account id {} (account does not exist)", new Object[]{name, bundleId.toString(), bundle.getAccountId()});
             return;
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java
index 9eba936..b36e075 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java
@@ -25,18 +25,18 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.account.api.Account;
-import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionSqlDao;
 import com.ning.billing.analytics.model.BusinessSubscriptionTransition;
 import com.ning.billing.catalog.api.Catalog;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.entitlement.api.SubscriptionTransitionType;
 import com.ning.billing.entitlement.api.user.EffectiveSubscriptionEvent;
-import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
-import com.ning.billing.util.callcontext.TenantContext;
+import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.clock.DefaultClock;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
 
 import com.google.common.collect.ImmutableList;
 
@@ -61,14 +61,14 @@ public class TestBusinessSubscriptionTransitionRecorder extends AnalyticsTestSui
         Mockito.when(bundle.getId()).thenReturn(bundleId);
         Mockito.when(bundle.getAccountId()).thenReturn(accountId);
         Mockito.when(bundle.getKey()).thenReturn(externalKey.toString());
-        final EntitlementUserApi entitlementApi = Mockito.mock(EntitlementUserApi.class);
-        Mockito.when(entitlementApi.getBundleFromId(Mockito.<UUID>any(), Mockito.<TenantContext>any())).thenReturn(bundle);
+        final EntitlementInternalApi entitlementApi = Mockito.mock(EntitlementInternalApi.class);
+        Mockito.when(entitlementApi.getBundleFromId(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(bundle);
 
         // Setup the account API
         final Account account = Mockito.mock(Account.class);
         Mockito.when(account.getExternalKey()).thenReturn(externalKey.toString());
-        final AccountUserApi accountApi = Mockito.mock(AccountUserApi.class);
-        Mockito.when(accountApi.getAccountById(Mockito.eq(bundle.getAccountId()), Mockito.<TenantContext>any())).thenReturn(account);
+        final AccountInternalApi accountApi = Mockito.mock(AccountInternalApi.class);
+        Mockito.when(accountApi.getAccountById(Mockito.eq(bundle.getAccountId()), Mockito.<InternalTenantContext>any())).thenReturn(account);
 
         // Create an new subscription event
         final EffectiveSubscriptionEvent eventEffective = Mockito.mock(EffectiveSubscriptionEvent.class);
@@ -83,7 +83,7 @@ public class TestBusinessSubscriptionTransitionRecorder extends AnalyticsTestSui
         final Subscription subscription = Mockito.mock(Subscription.class);
         Mockito.when(subscription.getId()).thenReturn(subscriptionId);
         Mockito.when(subscription.getAllTransitions()).thenReturn(ImmutableList.<EffectiveSubscriptionEvent>of(eventEffective));
-        Mockito.when(entitlementApi.getSubscriptionsForBundle(Mockito.<UUID>any(), Mockito.<TenantContext>any())).thenReturn(ImmutableList.<Subscription>of(subscription));
+        Mockito.when(entitlementApi.getSubscriptionsForBundle(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(ImmutableList.<Subscription>of(subscription));
 
         final BusinessSubscriptionTransitionDao dao = new BusinessSubscriptionTransitionDao(sqlDao, catalogService, entitlementApi, accountApi, new DefaultClock());
         dao.rebuildTransitionsForBundle(bundle.getId(), internalCallContext);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java
index 6b4bdbb..a033a2c 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java
@@ -27,6 +27,7 @@ import org.testng.annotations.Test;
 
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountUserApi;
+import com.ning.billing.account.api.svcs.DefaultAccountInternalApi;
 import com.ning.billing.account.api.user.DefaultAccountUserApi;
 import com.ning.billing.account.dao.AccountDao;
 import com.ning.billing.account.dao.AccountEmailDao;
@@ -42,6 +43,7 @@ import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.catalog.io.VersionedCatalogLoader;
 import com.ning.billing.config.CatalogConfig;
 import com.ning.billing.entitlement.alignment.PlanAligner;
+import com.ning.billing.entitlement.api.svcs.DefaultEntitlementInternalApi;
 import com.ning.billing.entitlement.api.user.DefaultEntitlementUserApi;
 import com.ning.billing.entitlement.api.user.DefaultSubscriptionApiService;
 import com.ning.billing.entitlement.api.user.DefaultSubscriptionFactory;
@@ -58,13 +60,18 @@ import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.clock.DefaultClock;
 import com.ning.billing.util.dao.ObjectType;
 import com.ning.billing.util.notificationq.DefaultNotificationQueueService;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
 
 public class TestBusinessTagRecorder extends AnalyticsTestSuiteWithEmbeddedDB {
+
     private BusinessAccountTagSqlDao accountTagSqlDao;
     private BusinessSubscriptionTransitionTagSqlDao subscriptionTransitionTagSqlDao;
     private InMemoryBus eventBus;
     private DefaultCallContextFactory callContextFactory;
+    private AccountInternalApi accountApi;
     private AccountUserApi accountUserApi;
+    private EntitlementInternalApi entitlementApi;
     private EntitlementUserApi entitlementUserApi;
     private BusinessTagDao tagDao;
 
@@ -81,6 +88,7 @@ public class TestBusinessTagRecorder extends AnalyticsTestSuiteWithEmbeddedDB {
         final DefaultClock clock = new DefaultClock();
         callContextFactory = new DefaultCallContextFactory(clock);
         final InternalCallContextFactory internalCallContextFactory = new InternalCallContextFactory(dbi, clock);
+        accountApi = new DefaultAccountInternalApi(accountDao, accountEmailDao);
         accountUserApi = new DefaultAccountUserApi(callContextFactory, internalCallContextFactory, accountDao, accountEmailDao);
         final CatalogService catalogService = new DefaultCatalogService(Mockito.mock(CatalogConfig.class), Mockito.mock(VersionedCatalogLoader.class));
         final AddonUtils addonUtils = new AddonUtils(catalogService);
@@ -89,10 +97,10 @@ public class TestBusinessTagRecorder extends AnalyticsTestSuiteWithEmbeddedDB {
         final PlanAligner planAligner = new PlanAligner(catalogService);
         final DefaultSubscriptionApiService apiService = new DefaultSubscriptionApiService(clock, entitlementDao, catalogService, planAligner, internalCallContextFactory);
         final DefaultSubscriptionFactory subscriptionFactory = new DefaultSubscriptionFactory(apiService, clock, catalogService);
-        entitlementUserApi = new DefaultEntitlementUserApi(clock, entitlementDao, catalogService,
-                                                           apiService, subscriptionFactory, addonUtils, internalCallContextFactory);
+        entitlementApi = new DefaultEntitlementInternalApi(entitlementDao, subscriptionFactory);
+        entitlementUserApi = new DefaultEntitlementUserApi(clock, entitlementDao, catalogService, apiService, subscriptionFactory, addonUtils, internalCallContextFactory);
         tagDao = new BusinessTagDao(accountTagSqlDao, invoicePaymentTagSqlDao, invoiceTagSqlDao, subscriptionTransitionTagSqlDao,
-                                              accountUserApi, entitlementUserApi);
+                                    accountApi, entitlementApi);
 
         eventBus.start();
     }
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java
index 70833fc..d0aef0f 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/svcs/DefaultInvoiceInternalApi.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.invoice.api.svcs;
 
+import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.UUID;
 
@@ -52,4 +53,9 @@ public class DefaultInvoiceInternalApi implements InvoiceInternalApi {
     public Collection<Invoice> getInvoicesByAccountId(final UUID accountId, final InternalTenantContext context) {
         return dao.getInvoicesByAccount(accountId, context);
     }
+
+    @Override
+    public BigDecimal getAccountBalance(final UUID accountId, final InternalTenantContext context) {
+        return dao.getAccountBalance(accountId, context);
+    }
 }
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/invoice/InvoiceInternalApi.java b/util/src/main/java/com/ning/billing/util/svcapi/invoice/InvoiceInternalApi.java
index 7248272..c54efe0 100644
--- a/util/src/main/java/com/ning/billing/util/svcapi/invoice/InvoiceInternalApi.java
+++ b/util/src/main/java/com/ning/billing/util/svcapi/invoice/InvoiceInternalApi.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.util.svcapi.invoice;
 
+import java.math.BigDecimal;
 import java.util.Collection;
 import java.util.UUID;
 
@@ -32,4 +33,6 @@ public interface InvoiceInternalApi {
     public Collection<Invoice> getUnpaidInvoicesByAccountId(UUID accountId, LocalDate upToDate, InternalTenantContext context);
 
     public Collection<Invoice> getInvoicesByAccountId(UUID accountId, InternalTenantContext context);
+
+    public BigDecimal getAccountBalance(UUID accountId, InternalTenantContext context);
 }