killbill-memoizeit
Changes
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/AnalyticsListener.java 90(+56 -34)
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/user/AnalyticsUserApi.java 2(+1 -1)
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/BusinessAnalyticsBase.java 3(+1 -2)
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/AnalyticsDao.java 34(+20 -14)
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessSubscriptionTransitionDao.java 5(+2 -3)
osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscription.java 1(+0 -1)
Details
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/AnalyticsListener.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/AnalyticsListener.java
index 82b371f..2b451c3 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/AnalyticsListener.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/AnalyticsListener.java
@@ -77,39 +77,41 @@ public class AnalyticsListener implements OSGIKillbillEventHandler {
public void handleKillbillEvent(final ExtBusEvent killbillEvent) {
final CallContext callContext = new AnalyticsCallContext(killbillEvent);
- try {
- switch (killbillEvent.getEventType()) {
- case ACCOUNT_CREATION:
- case ACCOUNT_CHANGE:
- handleAccountEvent(killbillEvent, callContext);
- break;
- case SUBSCRIPTION_CREATION:
- case SUBSCRIPTION_CHANGE:
- case SUBSCRIPTION_CANCEL:
- handleSubscriptionEvent(killbillEvent, callContext);
- break;
- case OVERDUE_CHANGE:
- handleOverdueEvent(killbillEvent, callContext);
- break;
- case INVOICE_CREATION:
- handleInvoiceEvent(killbillEvent, callContext);
- break;
- case PAYMENT_SUCCESS:
- case PAYMENT_FAILED:
- handlePaymentEvent(killbillEvent, callContext);
- break;
- default:
- // TODO invoice adjustments
- // TODO refunds
- // TODO tags and custom fields
- break;
- }
- } catch (AnalyticsRefreshException e) {
- logService.log(LogService.LOG_WARNING, "Refresh triggered by event " + killbillEvent + " failed", e);
+ switch (killbillEvent.getEventType()) {
+ case ACCOUNT_CREATION:
+ case ACCOUNT_CHANGE:
+ handleAccountEvent(killbillEvent, callContext);
+ break;
+ case SUBSCRIPTION_CREATION:
+ case SUBSCRIPTION_CHANGE:
+ case SUBSCRIPTION_CANCEL:
+ handleSubscriptionEvent(killbillEvent, callContext);
+ break;
+ case OVERDUE_CHANGE:
+ handleOverdueEvent(killbillEvent, callContext);
+ break;
+ case INVOICE_CREATION:
+ case INVOICE_ADJUSTMENT:
+ handleInvoiceEvent(killbillEvent, callContext);
+ break;
+ case PAYMENT_SUCCESS:
+ case PAYMENT_FAILED:
+ handlePaymentEvent(killbillEvent, callContext);
+ break;
+ case TAG_CREATION:
+ case TAG_DELETION:
+ handleTagEvent(killbillEvent, callContext);
+ break;
+ case CUSTOM_FIELD_CREATION:
+ case CUSTOM_FIELD_DELETION:
+ handleFieldEvent(killbillEvent, callContext);
+ break;
+ default:
+ break;
}
}
- private void handleAccountEvent(final ExtBusEvent killbillEvent, final CallContext callContext) throws AnalyticsRefreshException {
+ private void handleAccountEvent(final ExtBusEvent killbillEvent, final CallContext callContext) {
updateWithAccountLock(killbillEvent, new Callable<Void>() {
@Override
public Void call() throws Exception {
@@ -119,7 +121,7 @@ public class AnalyticsListener implements OSGIKillbillEventHandler {
});
}
- private void handleSubscriptionEvent(final ExtBusEvent killbillEvent, final CallContext callContext) throws AnalyticsRefreshException {
+ private void handleSubscriptionEvent(final ExtBusEvent killbillEvent, final CallContext callContext) {
updateWithAccountLock(killbillEvent, new Callable<Void>() {
@Override
public Void call() throws Exception {
@@ -129,7 +131,7 @@ public class AnalyticsListener implements OSGIKillbillEventHandler {
});
}
- private void handleInvoiceEvent(final ExtBusEvent killbillEvent, final CallContext callContext) throws AnalyticsRefreshException {
+ private void handleInvoiceEvent(final ExtBusEvent killbillEvent, final CallContext callContext) {
updateWithAccountLock(killbillEvent, new Callable<Void>() {
@Override
public Void call() throws Exception {
@@ -139,7 +141,7 @@ public class AnalyticsListener implements OSGIKillbillEventHandler {
});
}
- private void handlePaymentEvent(final ExtBusEvent killbillEvent, final CallContext callContext) throws AnalyticsRefreshException {
+ private void handlePaymentEvent(final ExtBusEvent killbillEvent, final CallContext callContext) {
updateWithAccountLock(killbillEvent, new Callable<Void>() {
@Override
public Void call() throws Exception {
@@ -149,7 +151,7 @@ public class AnalyticsListener implements OSGIKillbillEventHandler {
});
}
- private void handleOverdueEvent(final ExtBusEvent killbillEvent, final CallContext callContext) throws AnalyticsRefreshException {
+ private void handleOverdueEvent(final ExtBusEvent killbillEvent, final CallContext callContext) {
updateWithAccountLock(killbillEvent, new Callable<Void>() {
@Override
public Void call() throws Exception {
@@ -159,6 +161,26 @@ public class AnalyticsListener implements OSGIKillbillEventHandler {
});
}
+ private void handleTagEvent(final ExtBusEvent killbillEvent, final CallContext callContext) {
+ updateWithAccountLock(killbillEvent, new Callable<Void>() {
+ @Override
+ public Void call() throws Exception {
+ bTagDao.update(killbillEvent.getAccountId(), callContext);
+ return null;
+ }
+ });
+ }
+
+ private void handleFieldEvent(final ExtBusEvent killbillEvent, final CallContext callContext) {
+ updateWithAccountLock(killbillEvent, new Callable<Void>() {
+ @Override
+ public Void call() throws Exception {
+ bFieldDao.update(killbillEvent.getAccountId(), callContext);
+ return null;
+ }
+ });
+ }
+
private static final class AnalyticsCallContext implements CallContext {
private static final String USER_NAME = AnalyticsListener.class.getName();
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/user/AnalyticsUserApi.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/user/AnalyticsUserApi.java
index 84e928f..c4dfdb5 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/user/AnalyticsUserApi.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/api/user/AnalyticsUserApi.java
@@ -61,7 +61,7 @@ public class AnalyticsUserApi extends BusinessAnalyticsBase {
final OSGIKillbillAPI osgiKillbillAPI,
final OSGIKillbillDataSource osgiKillbillDataSource) {
super(logService, osgiKillbillAPI);
- this.analyticsDao = new AnalyticsDao(osgiKillbillDataSource);
+ this.analyticsDao = new AnalyticsDao(osgiKillbillAPI, osgiKillbillDataSource);
this.bacDao = new BusinessAccountDao(logService, osgiKillbillAPI, osgiKillbillDataSource);
this.bstDao = new BusinessSubscriptionTransitionDao(logService, osgiKillbillAPI, osgiKillbillDataSource);
this.binDao = new BusinessInvoiceDao(logService, osgiKillbillAPI, osgiKillbillDataSource, bacDao);
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/BusinessAnalyticsBase.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/BusinessAnalyticsBase.java
index f2db9b6..4964dd4 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/BusinessAnalyticsBase.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/BusinessAnalyticsBase.java
@@ -183,8 +183,7 @@ public abstract class BusinessAnalyticsBase {
//
protected AuditLog getBlockingStateCreationAuditLog(final UUID blockingStateId, final TenantContext context) throws AnalyticsRefreshException {
- // TODO
- final List<AuditLog> auditLogsForBlockingState = getAuditUserApi().getAuditLogs(blockingStateId, null, AuditLevel.MINIMAL, context);
+ final List<AuditLog> auditLogsForBlockingState = getAuditUserApi().getAuditLogs(blockingStateId, ObjectType.BLOCKING_STATES, AuditLevel.MINIMAL, context);
for (final AuditLog auditLog : auditLogsForBlockingState) {
if (auditLog.getChangeType().equals(ChangeType.INSERT)) {
return auditLog;
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/AnalyticsDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/AnalyticsDao.java
index b715a40..b211639 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/AnalyticsDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/AnalyticsDao.java
@@ -25,6 +25,7 @@ import java.util.UUID;
import org.skife.jdbi.v2.DBI;
+import com.ning.billing.ObjectType;
import com.ning.billing.osgi.bundles.analytics.api.BusinessAccount;
import com.ning.billing.osgi.bundles.analytics.api.BusinessField;
import com.ning.billing.osgi.bundles.analytics.api.BusinessInvoice;
@@ -40,7 +41,9 @@ import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessInvoicePaymentB
import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessOverdueStatusModelDao;
import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessSubscriptionTransitionModelDao;
import com.ning.billing.osgi.bundles.analytics.dao.model.BusinessTagModelDao;
+import com.ning.billing.util.api.RecordIdApi;
import com.ning.billing.util.callcontext.TenantContext;
+import com.ning.killbill.osgi.libs.killbill.OSGIKillbillAPI;
import com.ning.killbill.osgi.libs.killbill.OSGIKillbillDataSource;
import com.google.common.base.Function;
@@ -50,15 +53,18 @@ import com.google.common.collect.Lists;
public class AnalyticsDao {
- protected final BusinessAnalyticsSqlDao sqlDao;
+ private final OSGIKillbillAPI osgiKillbillAPI;
+ private final BusinessAnalyticsSqlDao sqlDao;
- public AnalyticsDao(final OSGIKillbillDataSource osgiKillbillDataSource) {
+ public AnalyticsDao(final OSGIKillbillAPI osgiKillbillAPI,
+ final OSGIKillbillDataSource osgiKillbillDataSource) {
+ this.osgiKillbillAPI = osgiKillbillAPI;
final DBI dbi = BusinessDBIProvider.get(osgiKillbillDataSource.getDataSource());
sqlDao = dbi.onDemand(BusinessAnalyticsSqlDao.class);
}
public BusinessAccount getAccountById(final UUID accountId, final TenantContext context) {
- final Long accountRecordId = getAccountRecordId(accountId);
+ final Long accountRecordId = getAccountRecordId(accountId, context);
final Long tenantRecordId = getTenantRecordId(context);
final BusinessAccountModelDao businessAccountModelDao = sqlDao.getAccountByAccountRecordId(accountRecordId, tenantRecordId, context);
@@ -70,7 +76,7 @@ public class AnalyticsDao {
}
public Collection<BusinessSubscriptionTransition> getSubscriptionTransitionsForAccount(final UUID accountId, final TenantContext context) {
- final Long accountRecordId = getAccountRecordId(accountId);
+ final Long accountRecordId = getAccountRecordId(accountId, context);
final Long tenantRecordId = getTenantRecordId(context);
final List<BusinessSubscriptionTransitionModelDao> businessSubscriptionTransitionModelDaos = sqlDao.getSubscriptionTransitionsByAccountRecordId(accountRecordId, tenantRecordId, context);
@@ -83,7 +89,7 @@ public class AnalyticsDao {
}
public Collection<BusinessOverdueStatus> getOverdueStatusesForAccount(final UUID accountId, final TenantContext context) {
- final Long accountRecordId = getAccountRecordId(accountId);
+ final Long accountRecordId = getAccountRecordId(accountId, context);
final Long tenantRecordId = getTenantRecordId(context);
final List<BusinessOverdueStatusModelDao> businessOverdueStatusModelDaos = sqlDao.getOverdueStatusesByAccountRecordId(accountRecordId, tenantRecordId, context);
@@ -96,7 +102,7 @@ public class AnalyticsDao {
}
public Collection<BusinessInvoice> getInvoicesForAccount(final UUID accountId, final TenantContext context) {
- final Long accountRecordId = getAccountRecordId(accountId);
+ final Long accountRecordId = getAccountRecordId(accountId, context);
final Long tenantRecordId = getTenantRecordId(context);
final List<BusinessInvoiceItemBaseModelDao> businessInvoiceItemModelDaos = sqlDao.getInvoiceItemsByAccountRecordId(accountRecordId, tenantRecordId, context);
@@ -118,7 +124,7 @@ public class AnalyticsDao {
}
public Collection<BusinessInvoicePayment> getInvoicePaymentsForAccount(final UUID accountId, final TenantContext context) {
- final Long accountRecordId = getAccountRecordId(accountId);
+ final Long accountRecordId = getAccountRecordId(accountId, context);
final Long tenantRecordId = getTenantRecordId(context);
final List<BusinessInvoicePaymentBaseModelDao> businessInvoicePaymentBaseModelDaos = sqlDao.getInvoicePaymentsByAccountRecordId(accountRecordId, tenantRecordId, context);
@@ -131,7 +137,7 @@ public class AnalyticsDao {
}
public Collection<BusinessField> getFieldsForAccount(final UUID accountId, final TenantContext context) {
- final Long accountRecordId = getAccountRecordId(accountId);
+ final Long accountRecordId = getAccountRecordId(accountId, context);
final Long tenantRecordId = getTenantRecordId(context);
final List<BusinessFieldModelDao> businessFieldModelDaos = sqlDao.getFieldsByAccountRecordId(accountRecordId, tenantRecordId, context);
@@ -144,7 +150,7 @@ public class AnalyticsDao {
}
public Collection<BusinessTag> getTagsForAccount(final UUID accountId, final TenantContext context) {
- final Long accountRecordId = getAccountRecordId(accountId);
+ final Long accountRecordId = getAccountRecordId(accountId, context);
final Long tenantRecordId = getTenantRecordId(context);
final List<BusinessTagModelDao> businessTagModelDaos = sqlDao.getTagsByAccountRecordId(accountRecordId, tenantRecordId, context);
@@ -156,13 +162,13 @@ public class AnalyticsDao {
});
}
- private Long getAccountRecordId(final UUID accountId) {
- // TODO
- return 0L;
+ private Long getAccountRecordId(final UUID accountId, final TenantContext context) {
+ final RecordIdApi recordIdApi = osgiKillbillAPI.getRecordIdApi();
+ return recordIdApi == null ? -1L : recordIdApi.getRecordId(accountId, ObjectType.ACCOUNT, context);
}
private Long getTenantRecordId(final TenantContext context) {
- // TODO
- return 0L;
+ final RecordIdApi recordIdApi = osgiKillbillAPI.getRecordIdApi();
+ return recordIdApi == null ? -1L : recordIdApi.getRecordId(context.getTenantId(), ObjectType.TENANT, context);
}
}
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessSubscriptionTransitionDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessSubscriptionTransitionDao.java
index 498c92f..509f95b 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessSubscriptionTransitionDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/BusinessSubscriptionTransitionDao.java
@@ -118,9 +118,8 @@ public class BusinessSubscriptionTransitionDao extends BusinessAnalyticsDaoBase
subscriptionTransition.getEffectiveTransitionTime(),
subscriptionTransition.getNextState());
- // TODO
- final Long subscriptionEventRecordId = getSubscriptionEventRecordId(null, context);
- final AuditLog creationAuditLog = getSubscriptionEventCreationAuditLog(null, context);
+ final Long subscriptionEventRecordId = getSubscriptionEventRecordId(subscriptionTransition.getNextEventId(), context);
+ final AuditLog creationAuditLog = getSubscriptionEventCreationAuditLog(subscriptionTransition.getNextEventId(), context);
final Long accountRecordId = getAccountRecordId(account.getId(), context);
final Long tenantRecordId = getTenantRecordId(context);
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscription.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscription.java
index 5abbbdb..6433e5e 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscription.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscription.java
@@ -73,7 +73,6 @@ public class BusinessSubscription {
final Product product = currentPlan.getProduct();
productName = product.getName();
productCategory = product.getCategory().toString();
- // TODO - we should keep the product type
productType = product.getCatalogName();
} else {
productName = null;
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscriptionEvent.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscriptionEvent.java
index d5bd0ee..3414995 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscriptionEvent.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscriptionEvent.java
@@ -34,6 +34,7 @@ public class BusinessSubscriptionEvent {
MIGRATE,
ADD,
CANCEL,
+ UN_CANCEL,
RE_ADD,
TRANSFER,
CHANGE,
@@ -88,13 +89,15 @@ public class BusinessSubscriptionEvent {
return subscriptionTransfered(transition.getNextPlan());
case CANCEL:
return subscriptionCancelled(transition.getNextPlan());
+ case UNCANCEL:
+ return subscriptionUnCancelled(transition.getNextPlan());
case CHANGE:
return subscriptionChanged(transition.getNextPlan());
case PHASE:
return subscriptionPhaseChanged(transition.getNextPlan());
- // TODO - should we really ignore these?
- case MIGRATE_BILLING:
- case UNCANCEL:
+ case MIGRATE_BILLING: // Has no impact on the subscription
+ case START_BILLING_DISABLED: // See BOS
+ case END_BILLING_DISABLED: // See BOS
default:
return null;
}
@@ -112,6 +115,10 @@ public class BusinessSubscriptionEvent {
return eventFromType(EventType.CANCEL, plan);
}
+ private static BusinessSubscriptionEvent subscriptionUnCancelled(final Plan plan) {
+ return eventFromType(EventType.UN_CANCEL, plan);
+ }
+
private static BusinessSubscriptionEvent subscriptionChanged(final Plan plan) {
return eventFromType(EventType.CHANGE, plan);
}
diff --git a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscriptionTransitionModelDao.java b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscriptionTransitionModelDao.java
index e0dea82..a79bc65 100644
--- a/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscriptionTransitionModelDao.java
+++ b/osgi-bundles/bundles/analytics/src/main/java/com/ning/billing/osgi/bundles/analytics/dao/model/BusinessSubscriptionTransitionModelDao.java
@@ -98,7 +98,7 @@ public class BusinessSubscriptionTransitionModelDao extends BusinessModelDaoBase
event,
previousSubscription,
nextSubscription,
- null /* TODO */,
+ transition.getNextEventCreatedDate(),
creationAuditLog.getUserName(),
creationAuditLog.getReasonCode(),
creationAuditLog.getComment(),