killbill-memoizeit

Code review integration for 86379933aa486c9e81cef2ab3113a68d2dced360 Throw

10/2/2015 6:56:58 PM

Details

diff --git a/account/src/main/java/org/killbill/billing/account/api/svcs/DefaultAccountInternalApi.java b/account/src/main/java/org/killbill/billing/account/api/svcs/DefaultAccountInternalApi.java
index 41791b6..de00e98 100644
--- a/account/src/main/java/org/killbill/billing/account/api/svcs/DefaultAccountInternalApi.java
+++ b/account/src/main/java/org/killbill/billing/account/api/svcs/DefaultAccountInternalApi.java
@@ -92,6 +92,9 @@ public class DefaultAccountInternalApi extends DefaultAccountApiBase implements 
         if (currentAccount == null) {
             throw new AccountApiException(ErrorCode.ACCOUNT_DOES_NOT_EXIST_FOR_KEY, externalKey);
         }
+        if (currentAccount.getBillCycleDayLocal() != DefaultMutableAccountData.DEFAULT_BILLING_CYCLE_DAY_LOCAL) {
+            throw new AccountApiException(ErrorCode.ACCOUNT_UPDATE_FAILED);
+        }
 
         final MutableAccountData mutableAccountData = currentAccount.toMutableAccountData();
         mutableAccountData.setBillCycleDayLocal(bcd);
@@ -157,8 +160,8 @@ public class DefaultAccountInternalApi extends DefaultAccountApiBase implements 
     }
 
     private int getBCDInternal(final UUID accountId, final InternalTenantContext context) {
-        final Long bcd = accountDao.getAccountBCD(accountId, context);
-        return bcd != null ? bcd.intValue() : DefaultMutableAccountData.DEFAULT_BILLING_CYCLE_DAY_LOCAL;
+        final Integer bcd = accountDao.getAccountBCD(accountId, context);
+        return bcd != null ? bcd : DefaultMutableAccountData.DEFAULT_BILLING_CYCLE_DAY_LOCAL;
     }
 
     private CacheLoaderArgument createImmutableAccountCacheLoaderArgument(final InternalTenantContext context) {
diff --git a/account/src/main/java/org/killbill/billing/account/dao/AccountDao.java b/account/src/main/java/org/killbill/billing/account/dao/AccountDao.java
index ec9b237..c5cae6d 100644
--- a/account/src/main/java/org/killbill/billing/account/dao/AccountDao.java
+++ b/account/src/main/java/org/killbill/billing/account/dao/AccountDao.java
@@ -51,5 +51,5 @@ public interface AccountDao extends EntityDao<AccountModelDao, Account, AccountA
 
     List<AccountEmailModelDao> getEmailsByAccountId(UUID accountId, InternalTenantContext context);
 
-    Long getAccountBCD(UUID accountId, InternalTenantContext context);
+    Integer getAccountBCD(UUID accountId, InternalTenantContext context);
 }
diff --git a/account/src/main/java/org/killbill/billing/account/dao/AccountSqlDao.java b/account/src/main/java/org/killbill/billing/account/dao/AccountSqlDao.java
index b566df9..5395c85 100644
--- a/account/src/main/java/org/killbill/billing/account/dao/AccountSqlDao.java
+++ b/account/src/main/java/org/killbill/billing/account/dao/AccountSqlDao.java
@@ -42,7 +42,7 @@ public interface AccountSqlDao extends EntitySqlDao<AccountModelDao, Account> {
                              @BindBean final InternalTenantContext context);
 
     @SqlQuery
-    public Long getBCD(@Bind("id") String accountId,
+    public Integer getBCD(@Bind("id") String accountId,
                        @BindBean final InternalTenantContext context);
 
     @SqlUpdate
diff --git a/account/src/main/java/org/killbill/billing/account/dao/DefaultAccountDao.java b/account/src/main/java/org/killbill/billing/account/dao/DefaultAccountDao.java
index 79f7b92..31c33e3 100644
--- a/account/src/main/java/org/killbill/billing/account/dao/DefaultAccountDao.java
+++ b/account/src/main/java/org/killbill/billing/account/dao/DefaultAccountDao.java
@@ -247,10 +247,10 @@ public class DefaultAccountDao extends EntityDaoBase<AccountModelDao, Account, A
     }
 
     @Override
-    public Long getAccountBCD(final UUID accountId, final InternalTenantContext context) {
-        return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Long>() {
+    public Integer getAccountBCD(final UUID accountId, final InternalTenantContext context) {
+        return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Integer>() {
             @Override
-            public Long inTransaction(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory) throws Exception {
+            public Integer inTransaction(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory) throws Exception {
                 return entitySqlDaoWrapperFactory.become(AccountSqlDao.class).getBCD(accountId.toString(), context);
             }
         });
diff --git a/account/src/test/java/org/killbill/billing/account/dao/MockAccountDao.java b/account/src/test/java/org/killbill/billing/account/dao/MockAccountDao.java
index d60ef82..e9715dd 100644
--- a/account/src/test/java/org/killbill/billing/account/dao/MockAccountDao.java
+++ b/account/src/test/java/org/killbill/billing/account/dao/MockAccountDao.java
@@ -164,9 +164,9 @@ public class MockAccountDao extends MockEntityDaoBase<AccountModelDao, Account, 
     }
 
     @Override
-    public Long getAccountBCD(final UUID accountId, final InternalTenantContext context) {
+    public Integer getAccountBCD(final UUID accountId, final InternalTenantContext context) {
         final AccountModelDao account = getById(accountId, context);
-        return account != null ? account.getBillingCycleDayLocal() : 0L;
+        return account != null ? account.getBillingCycleDayLocal() : 0;
     }
 
 }
diff --git a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
index be01530..3fbf992 100644
--- a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
+++ b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
@@ -25,6 +25,7 @@ import javax.annotation.Nullable;
 import org.killbill.billing.ObjectType;
 import org.killbill.billing.account.api.AccountApiException;
 import org.killbill.billing.account.api.AccountInternalApi;
+import org.killbill.billing.account.api.AccountUserApi;
 import org.killbill.billing.account.api.ImmutableAccountData;
 import org.killbill.billing.callcontext.InternalCallContext;
 import org.killbill.billing.catalog.api.CatalogApiException;
@@ -191,6 +192,9 @@ public class DefaultInternalBillingApi implements BillingInternalApi {
                 } catch (CatalogApiException e) {
                     log.error("Failing to identify catalog components while creating BillingEvent from transition: " +
                               transition.getId().toString(), e);
+                } catch (AccountApiException e) {
+                    // This is unexpected  (failed to update BCD) but if this happens we don't want to ignore..
+                    throw e;
                 } catch (Exception e) {
                     log.warn("Failed while getting BillingEvent", e);
                 }