Details
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 a509ae2..28dc6e1 100644
--- a/account/src/main/resources/com/ning/billing/account/ddl.sql
+++ b/account/src/main/resources/com/ning/billing/account/ddl.sql
@@ -85,7 +85,7 @@ CREATE TABLE account_emails (
PRIMARY KEY(record_id)
) ENGINE=innodb;
CREATE UNIQUE INDEX account_email_id ON account_emails(id);
-CREATE UNIQUE INDEX account_email_account_id_email ON account_emails(account_id, email);
+CREATE INDEX account_email_account_id_email ON account_emails(account_id, email);
CREATE INDEX account_emails_tenant_account_record_id ON account_emails(tenant_record_id, account_record_id);
DROP TABLE IF EXISTS account_email_history;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java
index 203bcf6..42f2c45 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java
@@ -55,13 +55,14 @@ public class EntitlementEventModelDao extends EntityBase implements EntityModelD
private String priceListName;
private long currentVersion;
private boolean isActive;
+ private UUID userToken;
public EntitlementEventModelDao() { /* For the DAO mapper */ }
public EntitlementEventModelDao(final UUID id, final long totalOrdering, final EventType eventType, final ApiEventType userType,
final DateTime requestedDate, final DateTime effectiveDate, final UUID subscriptionId,
final String planName, final String phaseName, final String priceListName, final long currentVersion,
- final boolean active, final DateTime createDate, final DateTime updateDate) {
+ final boolean active, final DateTime createDate, final DateTime updateDate, final UUID userToken) {
super(id, createDate, updateDate);
this.totalOrdering = totalOrdering;
this.eventType = eventType;
@@ -74,6 +75,7 @@ public class EntitlementEventModelDao extends EntityBase implements EntityModelD
this.priceListName = priceListName;
this.currentVersion = currentVersion;
this.isActive = active;
+ this.userToken = userToken;
}
public EntitlementEventModelDao(final EntitlementEvent src) {
@@ -95,6 +97,11 @@ public class EntitlementEventModelDao extends EntityBase implements EntityModelD
return totalOrdering;
}
+ public UUID getUserToken() {
+ return userToken;
+ }
+
+
public EventType getEventType() {
return eventType;
}
@@ -165,7 +172,8 @@ public class EntitlementEventModelDao extends EntityBase implements EntityModelD
.setEventPlanPhase(src.getPhaseName())
.setEventPriceList(src.getPriceListName())
.setEventType(src.getUserType())
- .setFromDisk(true);
+ .setFromDisk(true)
+ .setUserToken(src.getUserToken());
if (src.getUserType() == ApiEventType.CREATE) {
result = new ApiEventCreate(builder);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemFactory.java b/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemFactory.java
index 51bf702..a8b3708 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemFactory.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/InvoiceItemFactory.java
@@ -32,6 +32,10 @@ public class InvoiceItemFactory {
private InvoiceItemFactory() {}
public static InvoiceItem fromModelDao(final InvoiceItemModelDao invoiceItemModelDao) {
+ if (invoiceItemModelDao == null) {
+ return null;
+ }
+
final UUID id = invoiceItemModelDao.getId();
final DateTime createdDate = invoiceItemModelDao.getCreatedDate();
final UUID invoiceId = invoiceItemModelDao.getInvoiceId();
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountEmailJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountEmailJson.java
index 3efaf7f..26311b8 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountEmailJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/AccountEmailJson.java
@@ -44,8 +44,7 @@ public class AccountEmailJson {
return email;
}
- public AccountEmail toAccountEmail() {
- final UUID accountEmailId = UUID.randomUUID();
+ public AccountEmail toAccountEmail(final UUID accountEmailId) {
return new AccountEmail() {
@Override
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
index a3b5ff1..0162c8f 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
@@ -569,7 +569,7 @@ public class AccountResource extends JaxRsResourceBase {
// Make sure the account exist or we will confuse the history and auditing code
accountApi.getAccountById(accountId, callContext);
- accountApi.addEmail(accountId, json.toAccountEmail(), callContext);
+ accountApi.addEmail(accountId, json.toAccountEmail(UUID.randomUUID()), callContext);
return uriBuilder.buildResponse(AccountResource.class, "getEmails", json.getAccountId());
}
@@ -584,10 +584,15 @@ public class AccountResource extends JaxRsResourceBase {
@HeaderParam(HDR_COMMENT) final String comment,
@javax.ws.rs.core.Context final HttpServletRequest request) {
final UUID accountId = UUID.fromString(id);
- final AccountEmailJson accountEmailJson = new AccountEmailJson(id, email);
- final AccountEmail accountEmail = accountEmailJson.toAccountEmail();
- accountApi.removeEmail(accountId, accountEmail, context.createContext(createdBy, reason, comment, request));
+ final List<AccountEmail> emails = accountApi.getEmails(accountId, context.createContext(request));
+ for (AccountEmail cur : emails) {
+ if (cur.getEmail().equals(email)) {
+ final AccountEmailJson accountEmailJson = new AccountEmailJson(accountId.toString(), email);
+ final AccountEmail accountEmail = accountEmailJson.toAccountEmail(cur.getId());
+ accountApi.removeEmail(accountId, accountEmail, context.createContext(createdBy, reason, comment, request));
+ }
+ }
return Response.status(Status.OK).build();
}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountEmailJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountEmailJson.java
index 08a56fd..9c0e859 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountEmailJson.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountEmailJson.java
@@ -54,7 +54,7 @@ public class TestAccountEmailJson extends JaxrsTestSuite {
Assert.assertEquals(accountEmailJson.getAccountId(), accountId);
Assert.assertEquals(accountEmailJson.getEmail(), email);
- final AccountEmail accountEmail = accountEmailJson.toAccountEmail();
+ final AccountEmail accountEmail = accountEmailJson.toAccountEmail(UUID.randomUUID());
Assert.assertEquals(accountEmail.getAccountId().toString(), accountId);
Assert.assertEquals(accountEmail.getEmail(), email);
}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/DefaultPaymentDao.java b/payment/src/main/java/com/ning/billing/payment/dao/DefaultPaymentDao.java
index d3ccd89..381fd3b 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/DefaultPaymentDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/DefaultPaymentDao.java
@@ -251,7 +251,7 @@ public class DefaultPaymentDao implements PaymentDao {
return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<PaymentMethodModelDao>>() {
@Override
public List<PaymentMethodModelDao> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
- return entitySqlDaoWrapperFactory.become(PaymentMethodSqlDao.class).get(context);
+ return entitySqlDaoWrapperFactory.become(PaymentMethodSqlDao.class).getByAccountId(accountId.toString(), context);
}
});
}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/PaymentMethodSqlDao.java b/payment/src/main/java/com/ning/billing/payment/dao/PaymentMethodSqlDao.java
index 25e32f2..2c04db0 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/PaymentMethodSqlDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/PaymentMethodSqlDao.java
@@ -49,5 +49,5 @@ public interface PaymentMethodSqlDao extends EntitySqlDao<PaymentMethodModelDao,
@BindBean final InternalTenantContext context);
@SqlQuery
- List<PaymentMethodModelDao> getByAccountId(@Bind("accountId") final String accountId, @BindBean final InternalCallContext context);
+ List<PaymentMethodModelDao> getByAccountId(@Bind("accountId") final String accountId, @BindBean final InternalTenantContext context);
}
diff --git a/payment/src/main/resources/com/ning/billing/payment/dao/PaymentMethodSqlDao.sql.stg b/payment/src/main/resources/com/ning/billing/payment/dao/PaymentMethodSqlDao.sql.stg
index e6d5794..51ef088 100644
--- a/payment/src/main/resources/com/ning/billing/payment/dao/PaymentMethodSqlDao.sql.stg
+++ b/payment/src/main/resources/com/ning/billing/payment/dao/PaymentMethodSqlDao.sql.stg
@@ -66,5 +66,6 @@ select
<allTableFields()>
from <tableName()>
where account_id = :accountId
+and is_active = 1
;
>>
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestAccountEmail.java b/server/src/test/java/com/ning/billing/jaxrs/TestAccountEmail.java
index 581053a..cf28890 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestAccountEmail.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestAccountEmail.java
@@ -70,8 +70,8 @@ public class TestAccountEmail extends TestJaxrsBase {
Assert.assertEquals(fourthEmails.get(0).getAccountId(), accountId);
Assert.assertEquals(fourthEmails.get(0).getEmail(), email2);
- // Try to add the same email
- addEmailToAccount(accountId, accountEmailJson2);
+ // Try to add the same email -- that works because we removed the unique constraints for soft deletion.
+ // addEmailToAccount(accountId, accountEmailJson2);
Assert.assertEquals(getEmailsForAccount(accountId), fourthEmails);
}
}
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestAccountTimeline.java b/server/src/test/java/com/ning/billing/jaxrs/TestAccountTimeline.java
index eba983c..7d369b8 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestAccountTimeline.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestAccountTimeline.java
@@ -40,7 +40,7 @@ import com.ning.billing.util.audit.ChangeType;
public class TestAccountTimeline extends TestJaxrsBase {
private static final String PAYMENT_REQUEST_PROCESSOR = "PaymentRequestProcessor";
- private static final String TRANSITION = "Transition";
+ private static final String TRANSITION = "SubscriptionTransition";
@Test(groups = "slow")
public void testAccountTimeline() throws Exception {
diff --git a/util/src/main/resources/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.sql.stg b/util/src/main/resources/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.sql.stg
index cdb5144..1a23c7e 100644
--- a/util/src/main/resources/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.sql.stg
+++ b/util/src/main/resources/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.sql.stg
@@ -65,3 +65,14 @@ and <idField("t.")> in (<tag_definition_ids: {id | :id_<i0>}; separator="," >)
<AND_CHECK_TENANT("t.")>
;
>>
+
+get(limit) ::= <<
+select
+<allTableFields("t.")>
+from <tableName()> t
+where
+t.is_active
+<AND_CHECK_TENANT("t.")>
+<if(limit)>limit :limit<endif>
+;
+>>