killbill-memoizeit

analytics: add bundle_id in bst_tags account_key and bundle_key

7/3/2012 9:15:11 PM

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessTagRecorder.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessTagRecorder.java
index 49c4b2b..83154b1 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessTagRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessTagRecorder.java
@@ -113,12 +113,12 @@ public class BusinessTagRecorder {
         accountTagSqlDao.removeTag(accountKey, name);
     }
 
-    private void tagAddedForBundle(final UUID objectId, final String name) {
+    private void tagAddedForBundle(final UUID bundleId, final String name) {
         final SubscriptionBundle bundle;
         try {
-            bundle = entitlementUserApi.getBundleFromId(objectId);
+            bundle = entitlementUserApi.getBundleFromId(bundleId);
         } catch (EntitlementUserApiException e) {
-            log.warn("Ignoring tag addition of {} for bundle id {} (bundle does not exist)", name, objectId.toString());
+            log.warn("Ignoring tag addition of {} for bundle id {} (bundle does not exist)", name, bundleId.toString());
             return;
         }
 
@@ -126,18 +126,16 @@ public class BusinessTagRecorder {
         try {
             account = accountApi.getAccountById(bundle.getAccountId());
         } catch (AccountApiException e) {
-            log.warn("Ignoring tag addition of {} for bundle id {} and account id {} (account does not exist)", new Object[]{name, objectId.toString(), bundle.getAccountId()});
+            log.warn("Ignoring tag addition of {} for bundle id {} and account id {} (account does not exist)", new Object[]{name, bundleId.toString(), bundle.getAccountId()});
             return;
         }
 
         /*
          * Note: we store tags associated to bundles, not to subscriptions.
-         * Subscriptions are in the core of killbill and not exposed in Analytics to avoid a hard dependency
-         * (i.e. dashboards should not rely on killbill ids).
          */
         final String accountKey = account.getExternalKey();
         final String externalKey = bundle.getKey();
-        subscriptionTransitionTagSqlDao.addTag(accountKey, externalKey, name);
+        subscriptionTransitionTagSqlDao.addTag(accountKey, bundleId.toString(), externalKey, name);
     }
 
     private void tagRemovedForBundle(final UUID objectId, final String name) {
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagMapper.java
index 47a7be9..25ae0be 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagMapper.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,9 +28,10 @@ import com.ning.billing.analytics.model.BusinessSubscriptionTransitionTag;
 public class BusinessSubscriptionTransitionTagMapper implements ResultSetMapper<BusinessSubscriptionTransitionTag> {
     @Override
     public BusinessSubscriptionTransitionTag 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);
-        return new BusinessSubscriptionTransitionTag(accountKey, externalKey, name);
+        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);
+        return new BusinessSubscriptionTransitionTag(accountKey, bundleId, externalKey, name);
     }
 }
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.java
index 094af9a..fef5a05 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.java
@@ -33,10 +33,11 @@ public interface BusinessSubscriptionTransitionTagSqlDao {
     List<BusinessSubscriptionTransitionTag> getTagsForBusinessSubscriptionTransition(@Bind("external_key") final String externalKey);
 
     @SqlUpdate
-    int addTag(@Bind("account_key") final String accountKey, @Bind("external_key") final String externalKey, @Bind("name") final String name);
+    int addTag(@Bind("account_key") final String accountKey, @Bind("bundle_id") final String bundleId,
+               @Bind("external_key") final String externalKey, @Bind("name") final String name);
 
     @SqlUpdate
-    int removeTag(@Bind("external_key") final String externalKey, @Bind("name") final String name);
+    int removeTag(@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/BusinessSubscriptionTransitionTag.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionTag.java
index 0539461..e2b6e33 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionTag.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionTag.java
@@ -16,13 +16,17 @@
 
 package com.ning.billing.analytics.model;
 
+import java.util.UUID;
+
 public class BusinessSubscriptionTransitionTag extends BusinessTag {
     private final String accountKey;
+    private final UUID bundleId;
     private final String externalKey;
 
-    public BusinessSubscriptionTransitionTag(final String accountKey, final String externalKey, final String name) {
+    public BusinessSubscriptionTransitionTag(final String accountKey, final UUID bundleId, final String externalKey, final String name) {
         super(name);
         this.accountKey = accountKey;
+        this.bundleId = bundleId;
         this.externalKey = externalKey;
     }
 
@@ -30,6 +34,10 @@ public class BusinessSubscriptionTransitionTag extends BusinessTag {
         return accountKey;
     }
 
+    public UUID getBundleId() {
+        return bundleId;
+    }
+
     public String getExternalKey() {
         return externalKey;
     }
@@ -39,6 +47,7 @@ public class BusinessSubscriptionTransitionTag extends BusinessTag {
         final StringBuilder sb = new StringBuilder();
         sb.append("BusinessSubscriptionTransitionTag");
         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('}');
@@ -59,6 +68,9 @@ public class BusinessSubscriptionTransitionTag extends BusinessTag {
         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;
         }
@@ -72,6 +84,7 @@ public class BusinessSubscriptionTransitionTag extends BusinessTag {
     @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);
         return result;
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.sql.stg
index dcd99aa..95c45c0 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.sql.stg
@@ -2,7 +2,8 @@ group BusinessSubscriptionTransitionTag;
 
 getTagsForBusinessSubscriptionTransition(external_key) ::=<<
 select
-  external_key
+  bundle_id
+, external_key
 , account_key
 , name
 from bst_tags
@@ -12,18 +13,20 @@ where external_key = :external_key
 
 addTag(external_key, name) ::=<<
 insert into bst_tags (
-  external_key
+  bundle_id
+, external_key
 , account_key
 , name
 ) values (
-  :external_key
+  :bundle_id
+, :external_key
 , :account_key
 , :name
 );
 >>
 
-removeTag(external_key, name) ::= <<
-delete from bst_tags where external_key = :external_key and name = :name;
+removeTag(bundle_id, name) ::= <<
+delete from bst_tags 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 5c0a879..69ccdc8 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -154,6 +154,7 @@ create table bac_fields (
 drop table if exists bst_tags;
 create table bst_tags (
   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(20) not null
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionTagSqlDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionTagSqlDao.java
index 7b8f1db..4e21bcf 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionTagSqlDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessSubscriptionTransitionTagSqlDao.java
@@ -39,6 +39,7 @@ public class TestBusinessSubscriptionTransitionTagSqlDao extends TestWithEmbedde
     @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, 20);
 
@@ -47,37 +48,40 @@ public class TestBusinessSubscriptionTransitionTagSqlDao extends TestWithEmbedde
         Assert.assertEquals(subscriptionTransitionTagSqlDao.removeTag(externalKey, name), 0);
 
         // Add an entry
-        Assert.assertEquals(subscriptionTransitionTagSqlDao.addTag(accountKey, externalKey, name), 1);
+        Assert.assertEquals(subscriptionTransitionTagSqlDao.addTag(accountKey, bundleId.toString(), externalKey, name), 1);
         final List<BusinessSubscriptionTransitionTag> tagsForBusinessSubscriptionTransition = subscriptionTransitionTagSqlDao.getTagsForBusinessSubscriptionTransition(externalKey);
         Assert.assertEquals(tagsForBusinessSubscriptionTransition.size(), 1);
 
         // Retrieve it
         final BusinessSubscriptionTransitionTag subscriptionTransitionTag = tagsForBusinessSubscriptionTransition.get(0);
+        Assert.assertEquals(subscriptionTransitionTag.getBundleId(), bundleId);
         Assert.assertEquals(subscriptionTransitionTag.getExternalKey(), externalKey);
         Assert.assertEquals(subscriptionTransitionTag.getName(), name);
 
         // Delete it
-        Assert.assertEquals(subscriptionTransitionTagSqlDao.removeTag(externalKey, name), 1);
+        Assert.assertEquals(subscriptionTransitionTagSqlDao.removeTag(bundleId.toString(), name), 1);
         Assert.assertEquals(subscriptionTransitionTagSqlDao.getTagsForBusinessSubscriptionTransition(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, 20);
+        final UUID bundleId2 = UUID.randomUUID();
         final String externalKey2 = UUID.randomUUID().toString();
         final String name2 = UUID.randomUUID().toString().substring(0, 20);
 
         // Add a tag to both transitions
-        Assert.assertEquals(subscriptionTransitionTagSqlDao.addTag(accountKey, externalKey1, name1), 1);
-        Assert.assertEquals(subscriptionTransitionTagSqlDao.addTag(accountKey, externalKey2, name2), 1);
+        Assert.assertEquals(subscriptionTransitionTagSqlDao.addTag(accountKey, bundleId1.toString(), externalKey1, name1), 1);
+        Assert.assertEquals(subscriptionTransitionTagSqlDao.addTag(accountKey, bundleId2.toString(), externalKey2, name2), 1);
 
         Assert.assertEquals(subscriptionTransitionTagSqlDao.getTagsForBusinessSubscriptionTransition(externalKey1).size(), 1);
         Assert.assertEquals(subscriptionTransitionTagSqlDao.getTagsForBusinessSubscriptionTransition(externalKey2).size(), 1);
 
         // Remove the tag for the first transition
-        Assert.assertEquals(subscriptionTransitionTagSqlDao.removeTag(externalKey1, name1), 1);
+        Assert.assertEquals(subscriptionTransitionTagSqlDao.removeTag(bundleId1.toString(), name1), 1);
 
         Assert.assertEquals(subscriptionTransitionTagSqlDao.getTagsForBusinessSubscriptionTransition(externalKey1).size(), 0);
         Assert.assertEquals(subscriptionTransitionTagSqlDao.getTagsForBusinessSubscriptionTransition(externalKey2).size(), 1);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionTag.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionTag.java
index 9d079b4..66c2da8 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionTag.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessSubscriptionTransitionTag.java
@@ -27,19 +27,23 @@ public class TestBusinessSubscriptionTransitionTag 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 BusinessSubscriptionTransitionTag subscriptionTransitionTag = new BusinessSubscriptionTransitionTag(accountKey,
+                                                                                                                  bundleId,
                                                                                                                   externalKey,
                                                                                                                   name);
         Assert.assertSame(subscriptionTransitionTag, subscriptionTransitionTag);
         Assert.assertEquals(subscriptionTransitionTag, subscriptionTransitionTag);
         Assert.assertTrue(subscriptionTransitionTag.equals(subscriptionTransitionTag));
         Assert.assertEquals(subscriptionTransitionTag.getAccountKey(), accountKey);
+        Assert.assertEquals(subscriptionTransitionTag.getBundleId(), bundleId);
         Assert.assertEquals(subscriptionTransitionTag.getExternalKey(), externalKey);
         Assert.assertEquals(subscriptionTransitionTag.getName(), name);
 
         final BusinessSubscriptionTransitionTag otherTransitionTag = new BusinessSubscriptionTransitionTag(UUID.randomUUID().toString(),
+                                                                                                           UUID.randomUUID(),
                                                                                                            UUID.randomUUID().toString(),
                                                                                                            UUID.randomUUID().toString());
         Assert.assertFalse(subscriptionTransitionTag.equals(otherTransitionTag));