killbill-memoizeit

tenant: soft delete TenantKV entities Signed-off-by: Pierre-Alexandre

11/15/2012 8:31:11 PM

Details

diff --git a/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java b/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java
index 361b6f5..a7084a5 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java
@@ -110,7 +110,7 @@ public class DefaultTenantDao extends EntityDaoBase<TenantModelDao, Tenant, Tena
         return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<String>>() {
             @Override
             public List<String> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
-                final List<TenantKVModelDao> tenantKV = entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).getTenantValueForKey(key, context.getTenantRecordId());
+                final List<TenantKVModelDao> tenantKV = entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).getTenantValueForKey(key, context);
                 return ImmutableList.copyOf(Collections2.transform(tenantKV, new Function<TenantKVModelDao, String>() {
                     @Override
                     public String apply(final TenantKVModelDao in) {
@@ -126,7 +126,8 @@ public class DefaultTenantDao extends EntityDaoBase<TenantModelDao, Tenant, Tena
         transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Void>() {
             @Override
             public Void inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
-                entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).insertTenantKeyValue(UUID.randomUUID().toString(), key, value, context.getTenantRecordId(), context);
+                final TenantKVModelDao tenantKVModelDao = new TenantKVModelDao(UUID.randomUUID(), context.getCreatedDate(), context.getUpdatedDate(), key, value);
+                entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).create(tenantKVModelDao, context);
                 return null;
             }
         });
@@ -137,7 +138,7 @@ public class DefaultTenantDao extends EntityDaoBase<TenantModelDao, Tenant, Tena
         transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Void>() {
             @Override
             public Void inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
-                entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).deleteTenantKey(key, context.getTenantRecordId());
+                entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).markTenantKeyAsDeleted(key, context);
                 return null;
             }
         });
diff --git a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java
index 3eb3955..516ce59 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java
@@ -29,6 +29,7 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
 
     private String key;
     private String value;
+    private Boolean isActive;
 
     public TenantKVModelDao() { /* For the DAO mapper */ }
 
@@ -36,6 +37,7 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
         super(id, createdDate, updatedDate);
         this.key = key;
         this.value = value;
+        this.isActive = true;
     }
 
     public String getKey() {
@@ -46,12 +48,17 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
         return value;
     }
 
+    public Boolean getIsActive() {
+        return isActive;
+    }
+
     @Override
     public String toString() {
         final StringBuilder sb = new StringBuilder();
         sb.append("TenantKVModelDao");
         sb.append("{key='").append(key).append('\'');
         sb.append(", value='").append(value).append('\'');
+        sb.append(", isActive=").append(isActive);
         sb.append('}');
         return sb.toString();
     }
@@ -70,6 +77,9 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
 
         final TenantKVModelDao that = (TenantKVModelDao) o;
 
+        if (isActive != null ? !isActive.equals(that.isActive) : that.isActive != null) {
+            return false;
+        }
         if (key != null ? !key.equals(that.key) : that.key != null) {
             return false;
         }
@@ -85,6 +95,7 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
         int result = super.hashCode();
         result = 31 * result + (key != null ? key.hashCode() : 0);
         result = 31 * result + (value != null ? value.hashCode() : 0);
+        result = 31 * result + (isActive != null ? isActive.hashCode() : 0);
         return result;
     }
 
diff --git a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVSqlDao.java b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVSqlDao.java
index ccef4fd..f75be0f 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVSqlDao.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVSqlDao.java
@@ -16,60 +16,30 @@
 
 package com.ning.billing.tenant.dao;
 
-import java.sql.ResultSet;
-import java.sql.SQLException;
 import java.util.List;
-import java.util.UUID;
 
-import org.joda.time.DateTime;
-import org.skife.jdbi.v2.StatementContext;
 import org.skife.jdbi.v2.sqlobject.Bind;
 import org.skife.jdbi.v2.sqlobject.BindBean;
 import org.skife.jdbi.v2.sqlobject.SqlQuery;
 import org.skife.jdbi.v2.sqlobject.SqlUpdate;
-import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
-import org.skife.jdbi.v2.tweak.ResultSetMapper;
 
-import com.ning.billing.tenant.api.DefaultTenantKV;
 import com.ning.billing.tenant.api.TenantKV;
-import com.ning.billing.tenant.dao.TenantKVSqlDao.TenantKVMapper;
+import com.ning.billing.util.audit.ChangeType;
 import com.ning.billing.util.callcontext.InternalCallContext;
-import com.ning.billing.util.dao.MapperBase;
-import com.ning.billing.util.dao.UuidMapper;
+import com.ning.billing.util.callcontext.InternalTenantContext;
+import com.ning.billing.util.entity.dao.Audited;
 import com.ning.billing.util.entity.dao.EntitySqlDao;
 import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
 
 @EntitySqlDaoStringTemplate
-@RegisterMapper({UuidMapper.class, TenantKVMapper.class})
 public interface TenantKVSqlDao extends EntitySqlDao<TenantKVModelDao, TenantKV> {
 
-    // TODO should take a context
-
     @SqlQuery
     public List<TenantKVModelDao> getTenantValueForKey(@Bind("key") final String key,
-                                                       @Bind("tenantRecordId") Long tenantRecordId);
-
-    @SqlUpdate
-    public void insertTenantKeyValue(@Bind("id") String id,
-                                     @Bind("key") final String key,
-                                     @Bind("value") final String value,
-                                     @Bind("tenantRecordId") Long tenantRecordId,
-                                     @BindBean final InternalCallContext context);
+                                                       @BindBean final InternalTenantContext context);
 
     @SqlUpdate
-    public void deleteTenantKey(@Bind("key") final String key,
-                                @Bind("tenantRecordId") Long tenantRecordId);
-
-    public class TenantKVMapper extends MapperBase implements ResultSetMapper<TenantKV> {
-
-        @Override
-        public TenantKV map(final int index, final ResultSet result, final StatementContext context) throws SQLException {
-            final UUID id = getUUID(result, "id");
-            final String key = result.getString("t_key");
-            final String value = result.getString("t_value");
-            final DateTime createdDate = getDateTime(result, "created_date");
-            final DateTime updatedDate = getDateTime(result, "updated_date");
-            return new DefaultTenantKV(id, key, value, createdDate, updatedDate);
-        }
-    }
+    @Audited(ChangeType.DELETE)
+    public void markTenantKeyAsDeleted(@Bind("key") final String key,
+                                       @BindBean final InternalCallContext context);
 }
diff --git a/tenant/src/main/resources/com/ning/billing/tenant/dao/TenantKVSqlDao.sql.stg b/tenant/src/main/resources/com/ning/billing/tenant/dao/TenantKVSqlDao.sql.stg
index ce66a1a..20edb99 100644
--- a/tenant/src/main/resources/com/ning/billing/tenant/dao/TenantKVSqlDao.sql.stg
+++ b/tenant/src/main/resources/com/ning/billing/tenant/dao/TenantKVSqlDao.sql.stg
@@ -1,58 +1,45 @@
-group TenantKVSqlDao;
-
-
-tenantKVFields(prefix) ::= <<
-    <prefix>record_id,
-    <prefix>id,
-    <prefix>tenant_record_id,
-    <prefix>t_key,
-    <prefix>t_value,
-    <prefix>created_date,
-    <prefix>created_by,
-    <prefix>updated_date,
-    <prefix>updated_by
+group TenantKVSqlDao: EntitySqlDao;
+
+tableName() ::= "tenant_kvs"
+
+tableFields(prefix) ::= <<
+  <prefix>t_key
+, <prefix>t_value
+, <prefix>is_active
+, <prefix>created_date
+, <prefix>created_by
+, <prefix>updated_date
+, <prefix>updated_by
 >>
 
-insertTenantKeyValue() ::= <<
-   INSERT INTO tenant_kvs (
-      id
-      , tenant_record_id
-      , t_key
-      , t_value
-      , created_date
-      , created_by
-      , updated_date
-      , updated_by
-    ) VALUES (
-      :id
-      , :tenantRecordId
-      , :key
-      , :value
-      , :createdDate
-      , :userName
-      , :updatedDate
-      , :userName
-    );
+tableValues() ::= <<
+  :key
+, :value
+, :isActive
+, :createdDate
+, :createdBy
+, :updatedDate
+, :updatedBy
 >>
 
+accountRecordIdFieldWithComma() ::= ""
 
-getTenantValueForKey() ::= <<
-    SELECT <tenantKVFields()>
-    FROM tenant_kvs
-    WHERE
-        tenant_record_id = :tenantRecordId AND t_key = :key
-    ;
->>
+accountRecordIdValueWithComma() ::= ""
 
 
-deleteTenantKey() ::= <<
-    DELETE FROM tenant_kvs
-    WHERE
-        tenant_record_id = :tenantRecordId AND t_key = :key
-    ;
+getTenantValueForKey() ::= <<
+select
+  <allTableFields("t.")>
+from <tableName()> t
+where t.t_key = :key
+<AND_CHECK_TENANT("t.")>
+;
 >>
 
-
-test() ::= <<
-    SELECT 1 FROM tenants;
+markTenantKeyAsDeleted() ::= <<
+update <tableName()> t
+set t.is_active = 0
+where t.t_key = :key
+<AND_CHECK_TENANT("t.")>
+;
 >>