killbill-memoizeit

analytics: add bundle_id in bst_fields account_key and

7/3/2012 9:03:51 PM

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());