killbill-memoizeit
Changes
analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagMapper.java 10(+6 -4)
analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.java 5(+3 -2)
analytics/src/main/java/com/ning/billing/analytics/model/BusinessSubscriptionTransitionTag.java 15(+14 -1)
analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionTagSqlDao.sql.stg 13(+8 -5)
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));