killbill-aplcache

analytics: add account_id in bac_tags account_key and bundle_key

7/3/2012 9:32:09 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 83154b1..3f21849 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessTagRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessTagRecorder.java
@@ -87,17 +87,17 @@ public class BusinessTagRecorder {
         }
     }
 
-    private void tagAddedForAccount(final UUID objectId, final String name) {
+    private void tagAddedForAccount(final UUID accountId, final String name) {
         final Account account;
         try {
-            account = accountApi.getAccountById(objectId);
+            account = accountApi.getAccountById(accountId);
         } catch (AccountApiException e) {
-            log.warn("Ignoring tag addition of {} for account id {} (account does not exist)", name, objectId.toString());
+            log.warn("Ignoring tag addition of {} for account id {} (account does not exist)", name, accountId.toString());
             return;
         }
 
         final String accountKey = account.getExternalKey();
-        accountTagSqlDao.addTag(accountKey, name);
+        accountTagSqlDao.addTag(accountId.toString(), accountKey, name);
     }
 
     private void tagRemovedForAccount(final UUID objectId, final String name) {
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountTagMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountTagMapper.java
index ddad81d..e8897d7 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountTagMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountTagMapper.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,6 +28,9 @@ import com.ning.billing.analytics.model.BusinessAccountTag;
 public class BusinessAccountTagMapper implements ResultSetMapper<BusinessAccountTag> {
     @Override
     public BusinessAccountTag map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
-        return new BusinessAccountTag(r.getString(1), r.getString(2));
+        final UUID accountId = UUID.fromString(r.getString(1));
+        final String accountKey = r.getString(2);
+        final String name = r.getString(3);
+        return new BusinessAccountTag(accountId, accountKey, name);
     }
 }
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountTagSqlDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountTagSqlDao.java
index 0aac244..26bc628 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountTagSqlDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountTagSqlDao.java
@@ -33,10 +33,10 @@ public interface BusinessAccountTagSqlDao {
     List<BusinessAccountTag> getTagsForAccount(@Bind("account_key") final String accountKey);
 
     @SqlUpdate
-    int addTag(@Bind("account_key") final String accountKey, @Bind("name") final String name);
+    int addTag(@Bind("account_id") final String accountId, @Bind("account_key") final String accountKey, @Bind("name") final String name);
 
     @SqlUpdate
-    int removeTag(@Bind("account_key") final String accountKey, @Bind("name") final String name);
+    int removeTag(@Bind("account_id") final String accountId, @Bind("name") final String name);
 
     @SqlUpdate
     void test();
diff --git a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessAccountTag.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessAccountTag.java
index 1461c6d..877ab42 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessAccountTag.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessAccountTag.java
@@ -16,14 +16,22 @@
 
 package com.ning.billing.analytics.model;
 
+import java.util.UUID;
+
 public class BusinessAccountTag extends BusinessTag {
+    private final UUID accountId;
     private final String accountKey;
 
-    public BusinessAccountTag(final String accountKey, final String name) {
+    public BusinessAccountTag(final UUID accountId, final String accountKey, final String name) {
         super(name);
+        this.accountId = accountId;
         this.accountKey = accountKey;
     }
 
+    public UUID getAccountId() {
+        return accountId;
+    }
+
     public String getAccountKey() {
         return accountKey;
     }
@@ -32,7 +40,8 @@ public class BusinessAccountTag extends BusinessTag {
     public String toString() {
         final StringBuilder sb = new StringBuilder();
         sb.append("BusinessAccountTag");
-        sb.append("{accountKey='").append(accountKey).append('\'');
+        sb.append("{accountId='").append(accountId).append('\'');
+        sb.append(", accountKey='").append(accountKey).append('\'');
         sb.append(", name='").append(getName()).append('\'');
         sb.append('}');
         return sb.toString();
@@ -49,6 +58,9 @@ public class BusinessAccountTag extends BusinessTag {
 
         final BusinessAccountTag that = (BusinessAccountTag) o;
 
+        if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
+            return false;
+        }
         if (accountKey != null ? !accountKey.equals(that.accountKey) : that.accountKey != null) {
             return false;
         }
@@ -61,7 +73,8 @@ public class BusinessAccountTag extends BusinessTag {
 
     @Override
     public int hashCode() {
-        int result = accountKey != null ? accountKey.hashCode() : 0;
+        int result = accountId != null ? accountId.hashCode() : 0;
+        result = 31 * result + (accountKey != null ? accountKey.hashCode() : 0);
         result = 31 * result + (getName() != null ? getName().hashCode() : 0);
         return result;
     }
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountTagSqlDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountTagSqlDao.sql.stg
index af34473..1b4762c 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountTagSqlDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountTagSqlDao.sql.stg
@@ -2,27 +2,30 @@ group BusinessAccountTag;
 
 getTagsForAccount(account_key) ::=<<
 select
-  account_key
+  account_id
+, account_key
 , name
 from bac_tags
 where account_key = :account_key
 ;
 >>
 
-addTag(account_key, name) ::=<<
+addTag(account_id, account_key, name) ::=<<
 insert into bac_tags (
-  account_key
+  account_id
+, account_key
 , name
 ) values (
-  :account_key
+  :account_id
+, :account_key
 , :name
 );
 >>
 
-removeTag(account_key, name) ::= <<
-delete from bac_tags where account_key = :account_key and name = :name;
+removeTag(account_id, name) ::= <<
+delete from bac_tags where account_id = :account_id and name = :name;
 >>
 
 test() ::= <<
 select 1 from bac_tags;
->>
\ No newline at end of file
+>>
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 a2b1b4f..03c9fda 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -137,6 +137,7 @@ create unique index bos_key_index on bos (external_key, status);
 drop table if exists bac_tags;
 create table bac_tags (
   record_id int(11) unsigned not null auto_increment
+, account_id char(36) not null
 , account_key varchar(50) not null comment 'Account external key'
 , name varchar(20) not null
 , primary key(record_id)
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessAccountTagSqlDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessAccountTagSqlDao.java
index 20ccfc8..8c05270 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessAccountTagSqlDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessAccountTagSqlDao.java
@@ -38,44 +38,48 @@ public class TestBusinessAccountTagSqlDao extends TestWithEmbeddedDB {
 
     @Test(groups = "slow")
     public void testCRUD() throws Exception {
+        final UUID accountId = UUID.randomUUID();
         final String accountKey = UUID.randomUUID().toString();
         final String name = UUID.randomUUID().toString().substring(0, 20);
 
         // Verify initial state
         Assert.assertEquals(accountTagSqlDao.getTagsForAccount(accountKey).size(), 0);
-        Assert.assertEquals(accountTagSqlDao.removeTag(accountKey, name), 0);
+        Assert.assertEquals(accountTagSqlDao.removeTag(accountId.toString(), name), 0);
 
         // Add an entry
-        Assert.assertEquals(accountTagSqlDao.addTag(accountKey, name), 1);
+        Assert.assertEquals(accountTagSqlDao.addTag(accountId.toString(), accountKey, name), 1);
         final List<BusinessAccountTag> tagsForAccount = accountTagSqlDao.getTagsForAccount(accountKey);
         Assert.assertEquals(tagsForAccount.size(), 1);
 
         // Retrieve it
         final BusinessAccountTag accountTag = tagsForAccount.get(0);
+        Assert.assertEquals(accountTag.getAccountId(), accountId);
         Assert.assertEquals(accountTag.getAccountKey(), accountKey);
         Assert.assertEquals(accountTag.getName(), name);
 
         // Delete it
-        Assert.assertEquals(accountTagSqlDao.removeTag(accountKey, name), 1);
+        Assert.assertEquals(accountTagSqlDao.removeTag(accountId.toString(), name), 1);
         Assert.assertEquals(accountTagSqlDao.getTagsForAccount(accountKey).size(), 0);
     }
 
     @Test(groups = "slow")
     public void testSegmentation() throws Exception {
+        final UUID accountId1 = UUID.randomUUID();
         final String accountKey1 = UUID.randomUUID().toString();
         final String name1 = UUID.randomUUID().toString().substring(0, 20);
+        final UUID accountId2 = UUID.randomUUID();
         final String accountKey2 = UUID.randomUUID().toString();
         final String name2 = UUID.randomUUID().toString().substring(0, 20);
 
         // Add a tag to both accounts
-        Assert.assertEquals(accountTagSqlDao.addTag(accountKey1, name1), 1);
-        Assert.assertEquals(accountTagSqlDao.addTag(accountKey2, name2), 1);
+        Assert.assertEquals(accountTagSqlDao.addTag(accountId1.toString(), accountKey1, name1), 1);
+        Assert.assertEquals(accountTagSqlDao.addTag(accountId2.toString(), accountKey2, name2), 1);
 
         Assert.assertEquals(accountTagSqlDao.getTagsForAccount(accountKey1).size(), 1);
         Assert.assertEquals(accountTagSqlDao.getTagsForAccount(accountKey2).size(), 1);
 
         // Remove the tag for the first account
-        Assert.assertEquals(accountTagSqlDao.removeTag(accountKey1, name1), 1);
+        Assert.assertEquals(accountTagSqlDao.removeTag(accountId1.toString(), name1), 1);
 
         Assert.assertEquals(accountTagSqlDao.getTagsForAccount(accountKey1).size(), 0);
         Assert.assertEquals(accountTagSqlDao.getTagsForAccount(accountKey2).size(), 1);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessAccountTag.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessAccountTag.java
index 1d9c072..4d0014e 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessAccountTag.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessAccountTag.java
@@ -26,16 +26,18 @@ import com.ning.billing.analytics.AnalyticsTestSuite;
 public class TestBusinessAccountTag extends AnalyticsTestSuite {
     @Test(groups = "fast")
     public void testEquals() throws Exception {
+        final UUID accountId = UUID.randomUUID();
         final String accountKey = UUID.randomUUID().toString();
         final String name = UUID.randomUUID().toString();
-        final BusinessAccountTag accountTag = new BusinessAccountTag(accountKey, name);
+        final BusinessAccountTag accountTag = new BusinessAccountTag(accountId, accountKey, name);
         Assert.assertSame(accountTag, accountTag);
         Assert.assertEquals(accountTag, accountTag);
         Assert.assertTrue(accountTag.equals(accountTag));
+        Assert.assertEquals(accountTag.getAccountId(), accountId);
         Assert.assertEquals(accountTag.getAccountKey(), accountKey);
         Assert.assertEquals(accountTag.getName(), name);
 
-        final BusinessAccountTag otherAccountTag = new BusinessAccountTag(UUID.randomUUID().toString(), UUID.randomUUID().toString());
+        final BusinessAccountTag otherAccountTag = new BusinessAccountTag(UUID.randomUUID(), UUID.randomUUID().toString(), UUID.randomUUID().toString());
         Assert.assertFalse(accountTag.equals(otherAccountTag));
     }
 }