killbill-memoizeit
Changes
analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldMapper.java 12(+7 -5)
analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.java 4(+2 -2)
analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionField.java 16(+15 -1)
analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.sql.stg 13(+8 -5)
Details
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldMapper.java
index 53cfef7..56540b8 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldMapper.java
@@ -18,6 +18,7 @@ package com.ning.billing.analytics.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.UUID;
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
@@ -27,10 +28,11 @@ import com.ning.billing.analytics.model.BusinessSubscriptionTransitionField;
public class BusinessSubscriptionTransitionFieldMapper implements ResultSetMapper<BusinessSubscriptionTransitionField> {
@Override
public BusinessSubscriptionTransitionField map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
- final String externalKey = r.getString(1);
- final String accountKey = r.getString(2);
- final String name = r.getString(3);
- final String value = r.getString(4);
- return new BusinessSubscriptionTransitionField(accountKey, externalKey, name, value);
+ final UUID bundleId = UUID.fromString(r.getString(1));
+ final String externalKey = r.getString(2);
+ final String accountKey = r.getString(3);
+ final String name = r.getString(4);
+ final String value = r.getString(5);
+ return new BusinessSubscriptionTransitionField(accountKey, bundleId, externalKey, name, value);
}
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.java
index a316939..e000dcc 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.java
@@ -33,11 +33,11 @@ public interface BusinessSubscriptionTransitionFieldSqlDao {
List<BusinessSubscriptionTransitionField> getFieldsForBusinessSubscriptionTransition(@Bind("external_key") final String externalKey);
@SqlUpdate
- int addField(@Bind("account_key") final String accountKey, @Bind("external_key") final String externalKey,
+ int addField(@Bind("account_key") final String accountKey, @Bind("bundle_id") final String bundleId, @Bind("external_key") final String externalKey,
@Bind("name") final String name, @Bind("value") final String value);
@SqlUpdate
- int removeField(@Bind("external_key") final String externalKey, @Bind("name") final String name);
+ int removeField(@Bind("bundle_id") final String bundleId, @Bind("name") final String name);
@SqlUpdate
void test();
diff --git a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionField.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionField.java
index f54e39e..d570c68 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionField.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionField.java
@@ -16,13 +16,18 @@
package com.ning.billing.analytics.model;
+import java.util.UUID;
+
public class BusinessSubscriptionTransitionField extends BusinessField {
private final String accountKey;
+ private final UUID bundleId;
private final String externalKey;
- public BusinessSubscriptionTransitionField(final String accountKey, final String externalKey, final String name, final String value) {
+ public BusinessSubscriptionTransitionField(final String accountKey, final UUID bundleId, final String externalKey,
+ final String name, final String value) {
super(name, value);
this.accountKey = accountKey;
+ this.bundleId = bundleId;
this.externalKey = externalKey;
}
@@ -30,6 +35,10 @@ public class BusinessSubscriptionTransitionField extends BusinessField {
return accountKey;
}
+ public UUID getBundleId() {
+ return bundleId;
+ }
+
public String getExternalKey() {
return externalKey;
}
@@ -39,6 +48,7 @@ public class BusinessSubscriptionTransitionField extends BusinessField {
final StringBuilder sb = new StringBuilder();
sb.append("BusinessSubscriptionTransitionField");
sb.append("{accountKey='").append(accountKey).append('\'');
+ sb.append(", bundleId='").append(bundleId).append('\'');
sb.append(", externalKey='").append(externalKey).append('\'');
sb.append(", name='").append(getName()).append('\'');
sb.append(", value='").append(getValue()).append('\'');
@@ -60,6 +70,9 @@ public class BusinessSubscriptionTransitionField extends BusinessField {
if (accountKey != null ? !accountKey.equals(that.accountKey) : that.accountKey != null) {
return false;
}
+ if (bundleId != null ? !bundleId.equals(that.bundleId) : that.bundleId != null) {
+ return false;
+ }
if (externalKey != null ? !externalKey.equals(that.externalKey) : that.externalKey != null) {
return false;
}
@@ -76,6 +89,7 @@ public class BusinessSubscriptionTransitionField extends BusinessField {
@Override
public int hashCode() {
int result = accountKey != null ? accountKey.hashCode() : 0;
+ result = 31 * result + (bundleId != null ? bundleId.hashCode() : 0);
result = 31 * result + (externalKey != null ? externalKey.hashCode() : 0);
result = 31 * result + (getName() != null ? getName().hashCode() : 0);
result = 31 * result + (getValue() != null ? getValue().hashCode() : 0);
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.sql.stg
index 0330ac0..ddba4f7 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionFieldSqlDao.sql.stg
@@ -2,7 +2,8 @@ group BusinessSubscriptionTransitionField;
getFieldsForBusinessSubscriptionTransition(external_key) ::=<<
select
- external_key
+ bundle_id
+, external_key
, account_key
, name
, value
@@ -13,20 +14,22 @@ where external_key = :external_key
addField(external_key, name, value) ::=<<
insert into bst_fields (
- external_key
+ bundle_id
+, external_key
, account_key
, name
, value
) values (
- :external_key
+ :bundle_id
+, :external_key
, :account_key
, :name
, :value
);
>>
-removeField(external_key, name) ::= <<
-delete from bst_fields where external_key = :external_key and name = :name;
+removeField(bundle_id, name) ::= <<
+delete from bst_fields where bundle_id = :bundle_id and name = :name;
>>
test() ::= <<
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 c7f9d1b..5c0a879 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -163,6 +163,7 @@ create table bst_tags (
drop table if exists bst_fields;
create table bst_fields (
record_id int(11) unsigned not null auto_increment
+, bundle_id char(36) not null
, external_key varchar(50) not null comment 'Bundle external key'
, account_key varchar(50) not null comment 'Account external key'
, name varchar(30) not null
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionFieldSqlDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionFieldSqlDao.java
index eb0d374..9880ebc 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionFieldSqlDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionFieldSqlDao.java
@@ -39,47 +39,51 @@ public class TestBusinessSubscriptionTransitionFieldSqlDao extends TestWithEmbed
@Test(groups = "slow")
public void testCRUD() throws Exception {
final String accountKey = UUID.randomUUID().toString();
+ final UUID bundleId = UUID.randomUUID();
final String externalKey = UUID.randomUUID().toString();
final String name = UUID.randomUUID().toString().substring(0, 30);
final String value = UUID.randomUUID().toString();
// Verify initial state
Assert.assertEquals(subscriptionTransitionFieldSqlDao.getFieldsForBusinessSubscriptionTransition(externalKey).size(), 0);
- Assert.assertEquals(subscriptionTransitionFieldSqlDao.removeField(externalKey, name), 0);
+ Assert.assertEquals(subscriptionTransitionFieldSqlDao.removeField(bundleId.toString(), name), 0);
// Add an entry
- Assert.assertEquals(subscriptionTransitionFieldSqlDao.addField(accountKey, externalKey, name, value), 1);
+ Assert.assertEquals(subscriptionTransitionFieldSqlDao.addField(accountKey, bundleId.toString(), externalKey, name, value), 1);
final List<BusinessSubscriptionTransitionField> fieldsForBusinessSubscriptionTransition = subscriptionTransitionFieldSqlDao.getFieldsForBusinessSubscriptionTransition(externalKey);
Assert.assertEquals(fieldsForBusinessSubscriptionTransition.size(), 1);
// Retrieve it
final BusinessSubscriptionTransitionField subscriptionTransitionField = fieldsForBusinessSubscriptionTransition.get(0);
+ Assert.assertEquals(subscriptionTransitionField.getBundleId(), bundleId);
Assert.assertEquals(subscriptionTransitionField.getExternalKey(), externalKey);
Assert.assertEquals(subscriptionTransitionField.getName(), name);
Assert.assertEquals(subscriptionTransitionField.getValue(), value);
// Delete it
- Assert.assertEquals(subscriptionTransitionFieldSqlDao.removeField(externalKey, name), 1);
+ Assert.assertEquals(subscriptionTransitionFieldSqlDao.removeField(bundleId.toString(), name), 1);
Assert.assertEquals(subscriptionTransitionFieldSqlDao.getFieldsForBusinessSubscriptionTransition(externalKey).size(), 0);
}
@Test(groups = "slow")
public void testSegmentation() throws Exception {
final String accountKey = UUID.randomUUID().toString();
+ final UUID bundleId1 = UUID.randomUUID();
final String externalKey1 = UUID.randomUUID().toString();
final String name1 = UUID.randomUUID().toString().substring(0, 30);
+ final UUID bundleId2 = UUID.randomUUID();
final String externalKey2 = UUID.randomUUID().toString();
final String name2 = UUID.randomUUID().toString().substring(0, 30);
// Add a field to both transitions
- Assert.assertEquals(subscriptionTransitionFieldSqlDao.addField(accountKey, externalKey1, name1, UUID.randomUUID().toString()), 1);
- Assert.assertEquals(subscriptionTransitionFieldSqlDao.addField(accountKey, externalKey2, name2, UUID.randomUUID().toString()), 1);
+ Assert.assertEquals(subscriptionTransitionFieldSqlDao.addField(accountKey, bundleId1.toString(), externalKey1, name1, UUID.randomUUID().toString()), 1);
+ Assert.assertEquals(subscriptionTransitionFieldSqlDao.addField(accountKey, bundleId2.toString(), externalKey2, name2, UUID.randomUUID().toString()), 1);
Assert.assertEquals(subscriptionTransitionFieldSqlDao.getFieldsForBusinessSubscriptionTransition(externalKey1).size(), 1);
Assert.assertEquals(subscriptionTransitionFieldSqlDao.getFieldsForBusinessSubscriptionTransition(externalKey2).size(), 1);
// Remove the field for the first transition
- Assert.assertEquals(subscriptionTransitionFieldSqlDao.removeField(externalKey1, name1), 1);
+ Assert.assertEquals(subscriptionTransitionFieldSqlDao.removeField(bundleId1.toString(), name1), 1);
Assert.assertEquals(subscriptionTransitionFieldSqlDao.getFieldsForBusinessSubscriptionTransition(externalKey1).size(), 0);
Assert.assertEquals(subscriptionTransitionFieldSqlDao.getFieldsForBusinessSubscriptionTransition(externalKey2).size(), 1);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionField.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionField.java
index af9122e..18a46f3 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionField.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionField.java
@@ -27,10 +27,12 @@ public class TestBusinessSubscriptionTransitionField extends AnalyticsTestSuite
@Test(groups = "fast")
public void testEquals() throws Exception {
final String accountKey = UUID.randomUUID().toString();
+ final UUID bundleId = UUID.randomUUID();
final String externalKey = UUID.randomUUID().toString();
final String name = UUID.randomUUID().toString();
final String value = UUID.randomUUID().toString();
final BusinessSubscriptionTransitionField subscriptionTransitionField = new BusinessSubscriptionTransitionField(accountKey,
+ bundleId,
externalKey,
name,
value);
@@ -38,11 +40,13 @@ public class TestBusinessSubscriptionTransitionField extends AnalyticsTestSuite
Assert.assertEquals(subscriptionTransitionField, subscriptionTransitionField);
Assert.assertTrue(subscriptionTransitionField.equals(subscriptionTransitionField));
Assert.assertEquals(subscriptionTransitionField.getAccountKey(), accountKey);
+ Assert.assertEquals(subscriptionTransitionField.getBundleId(), bundleId);
Assert.assertEquals(subscriptionTransitionField.getExternalKey(), externalKey);
Assert.assertEquals(subscriptionTransitionField.getName(), name);
Assert.assertEquals(subscriptionTransitionField.getValue(), value);
final BusinessSubscriptionTransitionField otherSubscriptionField = new BusinessSubscriptionTransitionField(UUID.randomUUID().toString(),
+ UUID.randomUUID(),
UUID.randomUUID().toString(),
UUID.randomUUID().toString(),
UUID.randomUUID().toString());