killbill-memoizeit
Changes
analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java 4(+4 -0)
analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java 40(+21 -19)
Details
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
index fbe2749..b85f6f3 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
@@ -51,6 +51,7 @@ public class BusinessSubscription
private final ProductCategory productCategory;
private final String slug;
private final String phase;
+ private final String billingPeriod;
private final BigDecimal price;
private final BigDecimal mrr;
private final String currency;
@@ -59,13 +60,14 @@ public class BusinessSubscription
private final UUID subscriptionId;
private final UUID bundleId;
- public BusinessSubscription(final String productName, final String productType, final ProductCategory productCategory, final String slug, final String phase, final BigDecimal price, final BigDecimal mrr, final String currency, final DateTime startDate, final SubscriptionState state, final UUID subscriptionId, final UUID bundleId)
+ public BusinessSubscription(final String productName, final String productType, final ProductCategory productCategory, final String slug, final String phase, final String billingPeriod, final BigDecimal price, final BigDecimal mrr, final String currency, final DateTime startDate, final SubscriptionState state, final UUID subscriptionId, final UUID bundleId)
{
this.productName = productName;
this.productType = productType;
this.productCategory = productCategory;
this.slug = slug;
this.phase = phase;
+ this.billingPeriod = billingPeriod;
this.price = price;
this.mrr = mrr;
this.currency = currency;
@@ -111,9 +113,11 @@ public class BusinessSubscription
if (currentPhase.getPhaseType() != null) {
phase = currentPhase.getPhaseType().toString();
+ billingPeriod = currentPhase.getBillingPeriod().toString();
}
else {
phase = null;
+ billingPeriod = null;
}
if (currentPhase.getRecurringPrice() != null) {
@@ -128,6 +132,7 @@ public class BusinessSubscription
else {
slug = null;
phase = null;
+ billingPeriod = null;
price = null;
mrr = null;
}
@@ -145,6 +150,11 @@ public class BusinessSubscription
this.bundleId = bundleId;
}
+ public String getBillingPeriod()
+ {
+ return billingPeriod;
+ }
+
public UUID getBundleId()
{
return bundleId;
@@ -244,10 +254,10 @@ public class BusinessSubscription
{
final StringBuilder sb = new StringBuilder();
sb.append("BusinessSubscription");
- sb.append("{bundleId=").append(bundleId);
+ sb.append("{billingPeriod='").append(billingPeriod).append('\'');
sb.append(", productName='").append(productName).append('\'');
sb.append(", productType='").append(productType).append('\'');
- sb.append(", productCategory='").append(productCategory).append('\'');
+ sb.append(", productCategory=").append(productCategory);
sb.append(", slug='").append(slug).append('\'');
sb.append(", phase='").append(phase).append('\'');
sb.append(", price=").append(price);
@@ -256,6 +266,7 @@ public class BusinessSubscription
sb.append(", startDate=").append(startDate);
sb.append(", state=").append(state);
sb.append(", subscriptionId=").append(subscriptionId);
+ sb.append(", bundleId=").append(bundleId);
sb.append('}');
return sb.toString();
}
@@ -272,6 +283,9 @@ public class BusinessSubscription
final BusinessSubscription that = (BusinessSubscription) o;
+ if (billingPeriod != null ? !billingPeriod.equals(that.billingPeriod) : that.billingPeriod != null) {
+ return false;
+ }
if (bundleId != null ? !bundleId.equals(that.bundleId) : that.bundleId != null) {
return false;
}
@@ -327,6 +341,7 @@ public class BusinessSubscription
result = 31 * result + (state != null ? state.hashCode() : 0);
result = 31 * result + (subscriptionId != null ? subscriptionId.hashCode() : 0);
result = 31 * result + (bundleId != null ? bundleId.hashCode() : 0);
+ result = 31 * result + (billingPeriod != null ? billingPeriod.hashCode() : 0);
return result;
}
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java
index 6a10741..ccf2a2b 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionBinder.java
@@ -54,6 +54,7 @@ public @interface BusinessSubscriptionTransitionBinder
q.bindNull("prev_product_category", Types.VARCHAR);
q.bindNull("prev_slug", Types.VARCHAR);
q.bindNull("prev_phase", Types.VARCHAR);
+ q.bindNull("prev_billing_period", Types.VARCHAR);
q.bindNull("prev_price", Types.NUMERIC);
q.bindNull("prev_mrr", Types.NUMERIC);
q.bindNull("prev_currency", Types.VARCHAR);
@@ -73,6 +74,7 @@ public @interface BusinessSubscriptionTransitionBinder
}
q.bind("prev_slug", previousSubscription.getSlug());
q.bind("prev_phase", previousSubscription.getPhase());
+ q.bind("prev_billing_period", previousSubscription.getBillingPeriod());
q.bind("prev_price", previousSubscription.getRoundedPrice());
q.bind("prev_mrr", previousSubscription.getRoundedMrr());
q.bind("prev_currency", previousSubscription.getCurrency());
@@ -109,6 +111,7 @@ public @interface BusinessSubscriptionTransitionBinder
q.bindNull("next_product_category", Types.VARCHAR);
q.bindNull("next_slug", Types.VARCHAR);
q.bindNull("next_phase", Types.VARCHAR);
+ q.bindNull("next_billing_period", Types.VARCHAR);
q.bindNull("next_price", Types.NUMERIC);
q.bindNull("next_mrr", Types.NUMERIC);
q.bindNull("next_currency", Types.VARCHAR);
@@ -128,6 +131,7 @@ public @interface BusinessSubscriptionTransitionBinder
}
q.bind("next_slug", nextSubscription.getSlug());
q.bind("next_phase", nextSubscription.getPhase());
+ q.bind("next_billing_period", nextSubscription.getBillingPeriod());
q.bind("next_price", nextSubscription.getRoundedPrice());
q.bind("next_mrr", nextSubscription.getRoundedMrr());
q.bind("next_currency", nextSubscription.getCurrency());
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java
index 1788193..55aedb9 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java
@@ -43,13 +43,14 @@ public class BusinessSubscriptionTransitionMapper implements ResultSetMapper<Bus
r.getString(6) == null ? null : ProductCategory.valueOf(r.getString(6)), // productCategory
r.getString(7), // slug
r.getString(8), // phase
- BigDecimal.valueOf(r.getDouble(9)), // price
- BigDecimal.valueOf(r.getDouble(10)), // mrr
- r.getString(11), // currency
- r.getLong(12) == 0 ? null : new DateTime(r.getLong(12), DateTimeZone.UTC), // startDate
- r.getString(13) == null ? null : SubscriptionState.valueOf(r.getString(13)), // state
- r.getString(14) == null ? null : UUID.fromString(r.getString(14)), // subscriptionId
- r.getString(15) == null ? null : UUID.fromString(r.getString(15)) //bundleId
+ r.getString(9), // billing period
+ BigDecimal.valueOf(r.getDouble(10)), // price
+ BigDecimal.valueOf(r.getDouble(11)), // mrr
+ r.getString(12), // currency
+ r.getLong(13) == 0 ? null : new DateTime(r.getLong(13), DateTimeZone.UTC), // startDate
+ r.getString(14) == null ? null : SubscriptionState.valueOf(r.getString(14)), // state
+ r.getString(15) == null ? null : UUID.fromString(r.getString(15)), // subscriptionId
+ r.getString(16) == null ? null : UUID.fromString(r.getString(16)) //bundleId
);
// Avoid creating a dummy subscriptions with all null fields
@@ -58,18 +59,19 @@ public class BusinessSubscriptionTransitionMapper implements ResultSetMapper<Bus
}
BusinessSubscription next = new BusinessSubscription(
- r.getString(16), // productName
- r.getString(17), // productType
- r.getString(18) == null ? null : ProductCategory.valueOf(r.getString(18)), // productCategory
- r.getString(19), // slug8
- r.getString(20), // phase
- BigDecimal.valueOf(r.getDouble(21)), // price
- BigDecimal.valueOf(r.getDouble(22)), // mrr
- r.getString(23), // currency
- r.getLong(24) == 0 ? null : new DateTime(r.getLong(24), DateTimeZone.UTC), // startDate
- r.getString(25) == null ? null : SubscriptionState.valueOf(r.getString(25)), // state
- r.getString(26) == null ? null : UUID.fromString(r.getString(26)), // subscriptionId
- r.getString(27) == null ? null : UUID.fromString(r.getString(27)) //bundleId
+ r.getString(17), // productName
+ r.getString(18), // productType
+ r.getString(19) == null ? null : ProductCategory.valueOf(r.getString(19)), // productCategory
+ r.getString(20), // slug8
+ r.getString(21), // phase
+ r.getString(22), // billing period
+ BigDecimal.valueOf(r.getDouble(23)), // price
+ BigDecimal.valueOf(r.getDouble(24)), // mrr
+ r.getString(25), // currency
+ r.getLong(26) == 0 ? null : new DateTime(r.getLong(26), DateTimeZone.UTC), // startDate
+ r.getString(27) == null ? null : SubscriptionState.valueOf(r.getString(27)), // state
+ r.getString(28) == null ? null : UUID.fromString(r.getString(28)), // subscriptionId
+ r.getString(29) == null ? null : UUID.fromString(r.getString(29)) //bundleId
);
// Avoid creating a dummy subscriptions with all null fields
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.sql.stg
index d1a4bb0..11e160a 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionDao.sql.stg
@@ -10,6 +10,7 @@ getTransitions(event_key) ::= <<
, prev_product_category
, prev_slug
, prev_phase
+ , prev_billing_period
, prev_price
, prev_mrr
, prev_currency
@@ -22,6 +23,7 @@ getTransitions(event_key) ::= <<
, next_product_category
, next_slug
, next_phase
+ , next_billing_period
, next_price
, next_mrr
, next_currency
@@ -45,6 +47,7 @@ createTransition() ::= <<
, prev_product_category
, prev_slug
, prev_phase
+ , prev_billing_period
, prev_price
, prev_mrr
, prev_currency
@@ -57,6 +60,7 @@ createTransition() ::= <<
, next_product_category
, next_slug
, next_phase
+ , next_billing_period
, next_price
, next_mrr
, next_currency
@@ -73,6 +77,7 @@ createTransition() ::= <<
, :prev_product_category
, :prev_slug
, :prev_phase
+ , :prev_billing_period
, :prev_price
, :prev_mrr
, :prev_currency
@@ -85,6 +90,7 @@ createTransition() ::= <<
, :next_product_category
, :next_slug
, :next_phase
+ , :next_billing_period
, :next_price
, :next_mrr
, :next_currency
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
index 6136317..908715a 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -8,6 +8,7 @@ create table bst (
, prev_product_category varchar(32) default null
, prev_slug varchar(50) default null
, prev_phase varchar(32) default null
+, prev_billing_period varchar(32) default null
, prev_price numeric(10, 4) default 0
, prev_mrr numeric(10, 4) default 0
, prev_currency varchar(32) default null
@@ -20,6 +21,7 @@ create table bst (
, next_product_category varchar(32) default null
, next_slug varchar(50) default null
, next_phase varchar(32) default null
+, next_billing_period varchar(32) default null
, next_price numeric(10, 4) default 0
, next_mrr numeric(10, 4) default 0
, next_currency varchar(32) default null
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockPhase.java b/analytics/src/test/java/com/ning/billing/analytics/MockPhase.java
index 54c0773..5075a92 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockPhase.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockPhase.java
@@ -83,7 +83,7 @@ public class MockPhase implements IPlanPhase
@Override
public BillingPeriod getBillingPeriod()
{
- throw new UnsupportedOperationException();
+ return BillingPeriod.MONTHLY;
}
@Override
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
index 2def231..f185a2a 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
@@ -84,6 +84,7 @@ public class TestBusinessSubscription
Assert.assertEquals(subscription.getRoundedMrr(), 0.0);
Assert.assertEquals(subscription.getSlug(), phase.getName());
Assert.assertEquals(subscription.getPhase(), phase.getPhaseType().toString());
+ Assert.assertEquals(subscription.getBillingPeriod(), phase.getBillingPeriod().toString());
Assert.assertEquals(subscription.getPrice(), phase.getRecurringPrice().getPrice(null));
Assert.assertEquals(subscription.getProductCategory(), product.getCategory());
Assert.assertEquals(subscription.getProductName(), product.getName());