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