killbill-uncached

updates to account to support first name and last name separately

11/28/2011 6:32:16 PM

Details

diff --git a/account/src/main/java/com/ning/billing/account/api/Account.java b/account/src/main/java/com/ning/billing/account/api/Account.java
index 9fcc93e..f3fbfeb 100644
--- a/account/src/main/java/com/ning/billing/account/api/Account.java
+++ b/account/src/main/java/com/ning/billing/account/api/Account.java
@@ -28,7 +28,8 @@ public class Account extends CustomizableEntityBase implements IAccount {
 
     private String externalKey;
     private String email;
-    private String name;
+    private String firstName;
+    private String lastName;
     private String phone;
     private Currency currency;
     private int billCycleDay;
@@ -48,7 +49,8 @@ public class Account extends CustomizableEntityBase implements IAccount {
         this();
         this.externalKey = data.getExternalKey();
         this.email = data.getEmail();
-        this.name = data.getName();
+        this.firstName = data.getFirstName();
+        this.lastName = data.getLastName();
         this.phone = data.getPhone();
         this.currency = data.getCurrency();
         this.billCycleDay = data.getBillCycleDay();
@@ -70,12 +72,22 @@ public class Account extends CustomizableEntityBase implements IAccount {
     }
 
     @Override
-    public String getName() {
-        return name;
+    public String getFirstName() {
+        return firstName;
     }
 
-    public Account name(String name) {
-        this.name = name;
+    public Account firstName(String firstName) {
+        this.firstName = firstName;
+        return this;
+    }
+
+    @Override
+    public String getLastName() {
+        return lastName;
+    }
+
+    public Account lastName(String lastName) {
+        this.lastName = lastName;
         return this;
     }
 
@@ -168,7 +180,8 @@ public class Account extends CustomizableEntityBase implements IAccount {
         this.originalData = dao.getAccountById(id);
         this.externalKey = originalData.getExternalKey();
         this.email = originalData.getEmail();
-        this.name = originalData.getName();
+        this.firstName = originalData.getFirstName();
+        this.lastName = originalData.getLastName();
         this.phone = originalData.getPhone();
         this.currency = originalData.getCurrency();
         this.billCycleDay = originalData.getBillCycleDay();
diff --git a/account/src/main/java/com/ning/billing/account/api/AccountChange.java b/account/src/main/java/com/ning/billing/account/api/AccountChange.java
index b13a851..e583eab 100644
--- a/account/src/main/java/com/ning/billing/account/api/AccountChange.java
+++ b/account/src/main/java/com/ning/billing/account/api/AccountChange.java
@@ -53,8 +53,11 @@ public class AccountChange implements IAccountChange {
         if (!newData.getEmail().equals(oldData.getEmail())) {
             changedFields.add(new ChangedField("email", newData.getEmail(), oldData.getEmail()));
         }
-        if (!newData.getName().equals(oldData.getName())) {
-            changedFields.add(new ChangedField("name", newData.getName(), oldData.getName()));
+        if (!newData.getFirstName().equals(oldData.getFirstName())) {
+            changedFields.add(new ChangedField("firstName", newData.getFirstName(), oldData.getFirstName()));
+        }
+        if (!newData.getLastName().equals(oldData.getLastName())) {
+            changedFields.add(new ChangedField("lastName", newData.getLastName(), oldData.getLastName()));
         }
         if (!newData.getPhone().equals(oldData.getPhone())) {
             changedFields.add(new ChangedField("phone", newData.getPhone(), oldData.getPhone()));
diff --git a/account/src/main/java/com/ning/billing/account/dao/IAccountDaoSql.java b/account/src/main/java/com/ning/billing/account/dao/IAccountDaoSql.java
index 63b3444..e92c397 100644
--- a/account/src/main/java/com/ning/billing/account/dao/IAccountDaoSql.java
+++ b/account/src/main/java/com/ning/billing/account/dao/IAccountDaoSql.java
@@ -63,11 +63,14 @@ public interface IAccountDaoSql extends Transactional<IAccountDaoSql>, CloseMe {
             UUID id = UUID.fromString(result.getString("id"));
             String externalKey = result.getString("external_key");
             String email = result.getString("email");
-            String name = result.getString("name");
+            String firstName = result.getString("first_name");
+            String lastName = result.getString("last_name");
             String phone = result.getString("phone");
             Currency currency = Currency.valueOf(result.getString("currency"));
 
-            return new Account(id).externalKey(externalKey).email(email).name(name).phone(phone).currency(currency);
+            return new Account(id).externalKey(externalKey).email(email)
+                                  .firstName(firstName).lastName(lastName)
+                                  .phone(phone).currency(currency);
         }
     }
 
@@ -82,7 +85,8 @@ public interface IAccountDaoSql extends Transactional<IAccountDaoSql>, CloseMe {
                         q.bind("id", account.getId().toString());
                         q.bind("externalKey", account.getExternalKey());
                         q.bind("email", account.getEmail());
-                        q.bind("name", account.getName());
+                        q.bind("firstName", account.getFirstName());
+                        q.bind("lastName", account.getLastName());
                         q.bind("phone", account.getPhone());
                         q.bind("currency", account.getCurrency().toString());
                     }
diff --git a/account/src/main/resources/com/ning/billing/account/dao/IAccountDaoSql.sql.stg b/account/src/main/resources/com/ning/billing/account/dao/IAccountDaoSql.sql.stg
index b8faa2a..8edbbef 100644
--- a/account/src/main/resources/com/ning/billing/account/dao/IAccountDaoSql.sql.stg
+++ b/account/src/main/resources/com/ning/billing/account/dao/IAccountDaoSql.sql.stg
@@ -1,36 +1,32 @@
 group IAccountDaoSql;
 
 insertAccount() ::= <<
-    insert into accounts (id, external_key, email, name, phone, currency)
-    values (:id, :externalKey, :email, :name, :phone, :currency);
+    insert into accounts (id, external_key, email, first_name, last_name, phone, currency)
+    values (:id, :externalKey, :email, :firstName, :lastName, :phone, :currency);
 >>
 
 updateAccount() ::= <<
     update accounts
-    set external_key = :externalKey, email = :email, name = :name, phone = :phone, currency = :currency
+    set external_key = :externalKey, email = :email, first_name = :firstName, last_name = :lastName,
+        phone = :phone, currency = :currency
     where id = :id;
 >>
 
 getAccountByKey() ::= <<
-    select id, external_key, email, name, phone, currency
+    select id, external_key, email, first_name, last_name, phone, currency
     from accounts
-    where
-      external_key = :externalKey
-    ;
+    where external_key = :externalKey;
 >>
 
 getAccountById() ::= <<
-    select id, external_key, email, name, phone, currency
+    select id, external_key, email, first_name, last_name, phone, currency
     from accounts
-    where
-      id = :id
-    ;
+    where id = :id;
 >>
 
 getAccounts() ::= <<
-    select id, external_key, email, name, phone, currency
-    from accounts
-    ;
+    select id, external_key, email, first_name, last_name, phone, currency
+    from accounts;
 >>
 
 test() ::= <<
diff --git a/account/src/main/resources/com/ning/billing/account/ddl.sql b/account/src/main/resources/com/ning/billing/account/ddl.sql
index 6a9a23c..b6f3c0b 100644
--- a/account/src/main/resources/com/ning/billing/account/ddl.sql
+++ b/account/src/main/resources/com/ning/billing/account/ddl.sql
@@ -3,12 +3,14 @@ CREATE TABLE accounts (
     id char(36) NOT NULL,
     external_key varchar(128) NULL,
     email varchar(50) DEFAULT NULL,
-    name varchar(100) NOT NULL,
+    first_name varchar(100) NOT NULL,
+    last_name varchar(100) NOT NULL,
     phone varchar(13) DEFAULT NULL,
     currency char(3) NOT NULL,
     PRIMARY KEY(id)
 ) ENGINE=innodb;
 CREATE UNIQUE INDEX accounts_external_key ON accounts(external_key);
+CREATE UNIQUE INDEX accounts_email ON accounts(email);
 
 DROP TABLE IF EXISTS custom_fields;
 CREATE TABLE custom_fields (
diff --git a/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java b/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java
index 05619d3..635af22 100644
--- a/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java
+++ b/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java
@@ -29,14 +29,14 @@ import static org.testng.Assert.*;
 @Test(groups = {"account-dao"})
 public class TestSimpleAccountDao extends AccountDaoTestBase {
     private final String key = "test1234";
-    private final String name = "Wesley";
+    private final String firstName = "Wesley";
     private final String email = "dreadpirateroberts@therevenge.com";
 
     private Account createTestAccount() {
         Account account = Account.create();
         String thisKey = key + UUID.randomUUID().toString();
-        String thisName = name + UUID.randomUUID().toString();
-        account.externalKey(thisKey).name(thisName).email(email).currency(Currency.USD);
+        String lastName = UUID.randomUUID().toString();
+        account.externalKey(thisKey).firstName(firstName).lastName(lastName).email(email).currency(Currency.USD);
         return account;
     }
 
@@ -64,14 +64,16 @@ public class TestSimpleAccountDao extends AccountDaoTestBase {
         Account account = createTestAccount();
         UUID id = account.getId();
         String key = account.getExternalKey();
-        String name = account.getName();
+        String firstName = account.getFirstName();
+        String lastName = account.getLastName();
         account.save();
 
         account = Account.loadAccount(id);
         assertNotNull(account);
         assertEquals(account.getId(), id);
         assertEquals(account.getExternalKey(), key);
-        assertEquals(account.getName(), name);
+        assertEquals(account.getFirstName(), firstName);
+        assertEquals(account.getLastName(), lastName);
 
     }
 
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java b/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
index d9f4009..44466f4 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockAccount.java
@@ -35,7 +35,13 @@ public class MockAccount implements IAccount
     }
 
     @Override
-    public String getName()
+    public String getFirstName()
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getLastName()
     {
         throw new UnsupportedOperationException();
     }
diff --git a/api/src/main/java/com/ning/billing/account/api/IAccountData.java b/api/src/main/java/com/ning/billing/account/api/IAccountData.java
index dc85eb8..2f2eb92 100644
--- a/api/src/main/java/com/ning/billing/account/api/IAccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/IAccountData.java
@@ -22,7 +22,9 @@ public interface IAccountData {
 
     public String getExternalKey();
 
-    public String getName();
+    public String getFirstName();
+
+    public String getLastName();
 
     public String getEmail();
 
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
index 3485ba8..d42cc61 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
@@ -279,8 +279,12 @@ public abstract class TestUserApiBase {
     protected IAccount getAccount() {
         IAccount account = new IAccount() {
             @Override
-            public String getName() {
-                return "accountName";
+            public String getFirstName() {
+                return "accountFirstName";
+            }
+            @Override
+            public String getLastName() {
+                return "accountLastName";
             }
             @Override
             public String getEmail() {