killbill-memoizeit

analytics: add bundle_id in bos account_key and bundle_key

7/3/2012 9:38:02 PM

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusBinder.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusBinder.java
index 1e0575e..879b2ee 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusBinder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusBinder.java
@@ -39,6 +39,7 @@ public @interface BusinessOverdueStatusBinder {
             return new Binder<BusinessOverdueStatusBinder, BusinessOverdueStatus>() {
                 public void bind(final SQLStatement q, final BusinessOverdueStatusBinder bind, final BusinessOverdueStatus overdueStatus) {
                     q.bind("account_key", overdueStatus.getAccountKey());
+                    q.bind("bundle_id", overdueStatus.getBundleId().toString());
                     q.bind("external_key", overdueStatus.getExternalKey());
                     q.bind("status", overdueStatus.getStatus());
 
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusMapper.java
index 819c9ab..35ef90e 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessOverdueStatusMapper.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.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
@@ -29,12 +30,13 @@ import com.ning.billing.analytics.model.BusinessOverdueStatus;
 public class BusinessOverdueStatusMapper implements ResultSetMapper<BusinessOverdueStatus> {
     @Override
     public BusinessOverdueStatus 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 status = r.getString(3);
-        final DateTime startDate = new DateTime(r.getLong(4), DateTimeZone.UTC);
-        final DateTime endDate = new DateTime(r.getLong(5), DateTimeZone.UTC);
+        final UUID bundleId = UUID.fromString(r.getString(1));
+        final String externalKey = r.getString(2);
+        final String accountKey = r.getString(3);
+        final String status = r.getString(4);
+        final DateTime startDate = new DateTime(r.getLong(5), DateTimeZone.UTC);
+        final DateTime endDate = new DateTime(r.getLong(6), DateTimeZone.UTC);
 
-        return new BusinessOverdueStatus(accountKey, endDate, externalKey, startDate, status);
+        return new BusinessOverdueStatus(accountKey, bundleId, endDate, externalKey, startDate, status);
     }
 }
diff --git a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessOverdueStatus.java b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessOverdueStatus.java
index e76a02e..bd74d14 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/model/BusinessOverdueStatus.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/model/BusinessOverdueStatus.java
@@ -16,18 +16,22 @@
 
 package com.ning.billing.analytics.model;
 
+import java.util.UUID;
+
 import org.joda.time.DateTime;
 
 public class BusinessOverdueStatus {
     private final String accountKey;
+    private final UUID bundleId;
     private final String externalKey;
     private final String status;
     private final DateTime startDate;
     private final DateTime endDate;
 
-    public BusinessOverdueStatus(final String accountKey, final DateTime endDate, final String externalKey,
-                                 final DateTime startDate, final String status) {
+    public BusinessOverdueStatus(final String accountKey, final UUID bundleId, final DateTime endDate,
+                                 final String externalKey, final DateTime startDate, final String status) {
         this.accountKey = accountKey;
+        this.bundleId = bundleId;
         this.endDate = endDate;
         this.externalKey = externalKey;
         this.startDate = startDate;
@@ -38,6 +42,10 @@ public class BusinessOverdueStatus {
         return accountKey;
     }
 
+    public UUID getBundleId() {
+        return bundleId;
+    }
+
     public DateTime getEndDate() {
         return endDate;
     }
@@ -59,6 +67,7 @@ public class BusinessOverdueStatus {
         final StringBuilder sb = new StringBuilder();
         sb.append("BusinessOverdueStatus");
         sb.append("{accountKey=").append(accountKey);
+        sb.append(", bundleId='").append(bundleId).append('\'');
         sb.append(", endDate='").append(endDate).append('\'');
         sb.append(", externalKey='").append(externalKey).append('\'');
         sb.append(", status='").append(status).append('\'');
@@ -81,6 +90,9 @@ public class BusinessOverdueStatus {
         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 (endDate != null ? !endDate.equals(that.endDate) : that.endDate != null) {
             return false;
         }
@@ -100,6 +112,7 @@ public class BusinessOverdueStatus {
     @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 + (status != null ? status.hashCode() : 0);
         result = 31 * result + (startDate != null ? startDate.hashCode() : 0);
diff --git a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessOverdueStatusSqlDao.sql.stg b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessOverdueStatusSqlDao.sql.stg
index c1c7140..a785959 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessOverdueStatusSqlDao.sql.stg
+++ b/analytics/src/main/resources/com/ning/billing/analytics/dao/BusinessOverdueStatusSqlDao.sql.stg
@@ -2,7 +2,8 @@ group BusinessOverdueStatus;
 
 getOverdueStatusesForBundle(external_key) ::= <<
 select
-  external_key
+  bundle_id
+, external_key
 , account_key
 , status
 , start_date
@@ -15,13 +16,15 @@ order by start_date asc
 
 createOverdueStatus() ::= <<
 insert into bos (
-  external_key
+  bundle_id
+, external_key
 , account_key
 , status
 , start_date
 , end_date
 ) values (
-  :external_key
+  :bundle_id
+, :external_key
 , :account_key
 , :status
 , :start_date
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 03c9fda..897ee8e 100644
--- a/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
+++ b/analytics/src/main/resources/com/ning/billing/analytics/ddl.sql
@@ -125,6 +125,7 @@ create unique index bip_key_index on bip (attempt_id);
 drop table if exists bos;
 create table bos (
   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'
 , status varchar(50) not null
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessOverdueStatusSqlDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessOverdueStatusSqlDao.java
index f21d3af..7153da2 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessOverdueStatusSqlDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestBusinessOverdueStatusSqlDao.java
@@ -40,8 +40,9 @@ public class TestBusinessOverdueStatusSqlDao extends TestWithEmbeddedDB {
     @Test(groups = "slow")
     public void testCreate() throws Exception {
         final String accountKey = UUID.randomUUID().toString();
+        final UUID bundleId = UUID.randomUUID();
         final String externalKey = UUID.randomUUID().toString();
-        final BusinessOverdueStatus firstOverdueStatus = createOverdueStatus(accountKey, externalKey);
+        final BusinessOverdueStatus firstOverdueStatus = createOverdueStatus(accountKey, bundleId, externalKey);
 
         // Verify initial state
         Assert.assertEquals(overdueStatusSqlDao.getOverdueStatusesForBundle(externalKey).size(), 0);
@@ -54,7 +55,7 @@ public class TestBusinessOverdueStatusSqlDao extends TestWithEmbeddedDB {
         Assert.assertEquals(overdueStatusSqlDao.getOverdueStatusesForBundle(externalKey).get(0), firstOverdueStatus);
 
         // Add a second one
-        final BusinessOverdueStatus secondOverdueStatus = createOverdueStatus(accountKey, externalKey);
+        final BusinessOverdueStatus secondOverdueStatus = createOverdueStatus(accountKey, bundleId, externalKey);
         Assert.assertEquals(overdueStatusSqlDao.createOverdueStatus(secondOverdueStatus), 1);
 
         // Retrieve both
@@ -73,11 +74,11 @@ public class TestBusinessOverdueStatusSqlDao extends TestWithEmbeddedDB {
         }
     }
 
-    private BusinessOverdueStatus createOverdueStatus(final String accountKey, final String externalKey) {
+    private BusinessOverdueStatus createOverdueStatus(final String accountKey, final UUID bundleId, final String externalKey) {
         final DateTime endDate = new DateTime(DateTimeZone.UTC);
         final DateTime startDate = new DateTime(DateTimeZone.UTC);
         final String status = UUID.randomUUID().toString();
 
-        return new BusinessOverdueStatus(accountKey, endDate, externalKey, startDate, status);
+        return new BusinessOverdueStatus(accountKey, bundleId, endDate, externalKey, startDate, status);
     }
 }
diff --git a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessOverdueStatus.java b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessOverdueStatus.java
index 6edcbf9..be467e9 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessOverdueStatus.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/model/TestBusinessOverdueStatus.java
@@ -29,21 +29,24 @@ public class TestBusinessOverdueStatus extends AnalyticsTestSuite {
     @Test(groups = "fast")
     public void testEquals() throws Exception {
         final String accountKey = UUID.randomUUID().toString();
+        final UUID bundleId = UUID.randomUUID();
         final DateTime endDate = new DateTime(DateTimeZone.UTC);
         final String externalKey = UUID.randomUUID().toString();
         final DateTime startDate = new DateTime(DateTimeZone.UTC);
         final String status = UUID.randomUUID().toString();
-        final BusinessOverdueStatus overdueStatus = new BusinessOverdueStatus(accountKey, endDate, externalKey, startDate, status);
+        final BusinessOverdueStatus overdueStatus = new BusinessOverdueStatus(accountKey, bundleId, endDate, externalKey, startDate, status);
         Assert.assertSame(overdueStatus, overdueStatus);
         Assert.assertEquals(overdueStatus, overdueStatus);
         Assert.assertTrue(overdueStatus.equals(overdueStatus));
         Assert.assertEquals(overdueStatus.getAccountKey(), accountKey);
+        Assert.assertEquals(overdueStatus.getBundleId(), bundleId);
         Assert.assertEquals(overdueStatus.getEndDate(), endDate);
         Assert.assertEquals(overdueStatus.getExternalKey(), externalKey);
         Assert.assertEquals(overdueStatus.getStartDate(), startDate);
         Assert.assertEquals(overdueStatus.getStatus(), status);
 
         final BusinessOverdueStatus otherOverdueStatus = new BusinessOverdueStatus(UUID.randomUUID().toString(),
+                                                                                   UUID.randomUUID(),
                                                                                    new DateTime(DateTimeZone.UTC),
                                                                                    UUID.randomUUID().toString(),
                                                                                    new DateTime(DateTimeZone.UTC),