killbill-memoizeit

analytics: add account_id in bac_fields account_key and

7/3/2012 9:23:09 PM

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldMapper.java
index 7cb7260..411af1a 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldMapper.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,10 @@ import com.ning.billing.analytics.model.BusinessAccountField;
 public class BusinessAccountFieldMapper implements ResultSetMapper<BusinessAccountField> {
     @Override
     public BusinessAccountField map(final int index, final ResultSet r, final StatementContext ctx) throws SQLException {
-        return new BusinessAccountField(r.getString(1), r.getString(2), r.getString(3));
+        final UUID accountId = UUID.fromString(r.getString(1));
+        final String accountKey = r.getString(2);
+        final String name = r.getString(3);
+        final String value = r.getString(4);
+        return new BusinessAccountField(accountId, accountKey, name, value);
     }
 }
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.java
index d982772..3bf8b43 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.java
@@ -33,10 +33,11 @@ public interface BusinessAccountFieldSqlDao {
     List<BusinessAccountField> getFieldsForAccount(@Bind("account_key") final String accountKey);
 
     @SqlUpdate
-    int addField(@Bind("account_key") final String accountKey, @Bind("name") final String name, @Bind("value") final String value);
+    int addField(@Bind("account_id") final String accountId, @Bind("account_key") final String accountKey,
+                 @Bind("name") final String name, @Bind("value") final String value);
 
     @SqlUpdate
-    int removeField(@Bind("account_key") final String accountKey, @Bind("name") final String name);
+    int removeField(@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/BusinessAccountField.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessAccountField.java
index 3d9df23..b422838 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessAccountField.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessAccountField.java
@@ -16,14 +16,22 @@
 
 package com.ning.billing.analytics.model;
 
+import java.util.UUID;
+
 public class BusinessAccountField extends BusinessField {
+    private final UUID accountId;
     private final String accountKey;
 
-    public BusinessAccountField(final String accountKey, final String name, final String value) {
+    public BusinessAccountField(final UUID accountId, final String accountKey, final String name, final String value) {
         super(name, value);
+        this.accountId = accountId;
         this.accountKey = accountKey;
     }
 
+    public UUID getAccountId() {
+        return accountId;
+    }
+
     public String getAccountKey() {
         return accountKey;
     }
@@ -32,7 +40,8 @@ public class BusinessAccountField extends BusinessField {
     public String toString() {
         final StringBuilder sb = new StringBuilder();
         sb.append("BusinessAccountField");
-        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(", value='").append(getValue()).append('\'');
         sb.append('}');
@@ -50,6 +59,9 @@ public class BusinessAccountField extends BusinessField {
 
         final BusinessAccountField that = (BusinessAccountField) 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;
         }
@@ -65,7 +77,8 @@ public class BusinessAccountField extends BusinessField {
 
     @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);
         result = 31 * result + (getValue() != null ? getValue().hashCode() : 0);
         return result;
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.sql.stg
index 8bb9e0b..2566476 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessAccountFieldSqlDao.sql.stg
@@ -2,7 +2,8 @@ group BusinessAccountField;
 
 getFieldsForAccount(account_key) ::=<<
 select
-  account_key
+  account_id
+, account_key
 , name
 , value
 from bac_fields
@@ -12,20 +13,22 @@ where account_key = :account_key
 
 addField(account_key, name, value) ::=<<
 insert into bac_fields (
-  account_key
+  account_id
+, account_key
 , name
 , value
 ) values (
-  :account_key
+  :account_id
+, :account_key
 , :name
 , :value
 );
 >>
 
-removeField(account_key, name) ::= <<
-delete from bac_fields where account_key = :account_key and name = :name;
+removeField(account_id, name) ::= <<
+delete from bac_fields where account_id = :account_id and name = :name;
 >>
 
 test() ::= <<
 select 1 from bac_fields;
->>
\ 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 69ccdc8..a2b1b4f 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -145,6 +145,7 @@ create table bac_tags (
 drop table if exists bac_fields;
 create table bac_fields (
   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(30) not null
 , value varchar(255) default null
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessAccountFieldSqlDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessAccountFieldSqlDao.java
index 69fed56..2dae790 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessAccountFieldSqlDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessAccountFieldSqlDao.java
@@ -38,46 +38,50 @@ public class TestBusinessAccountFieldSqlDao 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, 30);
         final String value = UUID.randomUUID().toString();
 
         // Verify initial state
         Assert.assertEquals(accountFieldSqlDao.getFieldsForAccount(accountKey).size(), 0);
-        Assert.assertEquals(accountFieldSqlDao.removeField(accountKey, name), 0);
+        Assert.assertEquals(accountFieldSqlDao.removeField(accountId.toString(), name), 0);
 
         // Add an entry
-        Assert.assertEquals(accountFieldSqlDao.addField(accountKey, name, value), 1);
+        Assert.assertEquals(accountFieldSqlDao.addField(accountId.toString(), accountKey, name, value), 1);
         final List<BusinessAccountField> fieldsForAccount = accountFieldSqlDao.getFieldsForAccount(accountKey);
         Assert.assertEquals(fieldsForAccount.size(), 1);
 
         // Retrieve it
         final BusinessAccountField accountField = fieldsForAccount.get(0);
+        Assert.assertEquals(accountField.getAccountId(), accountId);
         Assert.assertEquals(accountField.getAccountKey(), accountKey);
         Assert.assertEquals(accountField.getName(), name);
         Assert.assertEquals(accountField.getValue(), value);
 
         // Delete it
-        Assert.assertEquals(accountFieldSqlDao.removeField(accountKey, name), 1);
+        Assert.assertEquals(accountFieldSqlDao.removeField(accountId.toString(), name), 1);
         Assert.assertEquals(accountFieldSqlDao.getFieldsForAccount(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, 30);
+        final UUID accountId2 = UUID.randomUUID();
         final String accountKey2 = UUID.randomUUID().toString();
         final String name2 = UUID.randomUUID().toString().substring(0, 30);
 
         // Add a field to both accounts
-        Assert.assertEquals(accountFieldSqlDao.addField(accountKey1, name1, UUID.randomUUID().toString()), 1);
-        Assert.assertEquals(accountFieldSqlDao.addField(accountKey2, name2, UUID.randomUUID().toString()), 1);
+        Assert.assertEquals(accountFieldSqlDao.addField(accountId1.toString(), accountKey1, name1, UUID.randomUUID().toString()), 1);
+        Assert.assertEquals(accountFieldSqlDao.addField(accountId2.toString(), accountKey2, name2, UUID.randomUUID().toString()), 1);
 
         Assert.assertEquals(accountFieldSqlDao.getFieldsForAccount(accountKey1).size(), 1);
         Assert.assertEquals(accountFieldSqlDao.getFieldsForAccount(accountKey2).size(), 1);
 
         // Remove the field for the first account
-        Assert.assertEquals(accountFieldSqlDao.removeField(accountKey1, name1), 1);
+        Assert.assertEquals(accountFieldSqlDao.removeField(accountId1.toString(), name1), 1);
 
         Assert.assertEquals(accountFieldSqlDao.getFieldsForAccount(accountKey1).size(), 0);
         Assert.assertEquals(accountFieldSqlDao.getFieldsForAccount(accountKey2).size(), 1);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessAccountField.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessAccountField.java
index ebe3c9e..86ce86c 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessAccountField.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessAccountField.java
@@ -26,20 +26,24 @@ import com.ning.billing.analytics.AnalyticsTestSuite;
 public class TestBusinessAccountField 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 String value = UUID.randomUUID().toString();
-        final BusinessAccountField accountField = new BusinessAccountField(accountKey,
+        final BusinessAccountField accountField = new BusinessAccountField(accountId,
+                                                                           accountKey,
                                                                            name,
                                                                            value);
         Assert.assertSame(accountField, accountField);
         Assert.assertEquals(accountField, accountField);
         Assert.assertTrue(accountField.equals(accountField));
+        Assert.assertEquals(accountField.getAccountId(), accountId);
         Assert.assertEquals(accountField.getAccountKey(), accountKey);
         Assert.assertEquals(accountField.getName(), name);
         Assert.assertEquals(accountField.getValue(), value);
 
-        final BusinessAccountField otherAccountField = new BusinessAccountField(UUID.randomUUID().toString(),
+        final BusinessAccountField otherAccountField = new BusinessAccountField(UUID.randomUUID(),
+                                                                                UUID.randomUUID().toString(),
                                                                                 UUID.randomUUID().toString(),
                                                                                 UUID.randomUUID().toString());
         Assert.assertFalse(accountField.equals(otherAccountField));