Implemented Delete

This commit is contained in:
Darin Kelkhoff
2021-11-30 18:08:03 -06:00
parent 99dd839373
commit dadb7b6c37
7 changed files with 257 additions and 5 deletions

View File

@ -0,0 +1,32 @@
package com.kingsrook.qqq.backend.core.actions;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.DeleteRequest;
import com.kingsrook.qqq.backend.core.model.actions.DeleteResult;
import com.kingsrook.qqq.backend.core.model.metadata.QBackendMetaData;
import com.kingsrook.qqq.backend.core.modules.QModuleDispatcher;
import com.kingsrook.qqq.backend.core.modules.interfaces.QModuleInterface;
/*******************************************************************************
**
*******************************************************************************/
public class DeleteAction
{
/*******************************************************************************
**
*******************************************************************************/
public DeleteResult execute(DeleteRequest deleteRequest) throws QException
{
QModuleDispatcher qModuleDispatcher = new QModuleDispatcher();
QBackendMetaData backend = deleteRequest.getBackend();
QModuleInterface qModule = qModuleDispatcher.getQModule(backend);
// todo pre-customization - just get to modify the request?
DeleteResult deleteResult = qModule.getDeleteInterface().execute(deleteRequest);
// todo post-customization - can do whatever w/ the result if you want
return deleteResult;
}
}

View File

@ -0,0 +1,68 @@
package com.kingsrook.qqq.backend.core.model.actions;
import java.io.Serializable;
import java.util.List;
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
/*******************************************************************************
**
*******************************************************************************/
public class DeleteRequest extends AbstractQTableRequest
{
private List<Serializable> primaryKeys;
/*******************************************************************************
**
*******************************************************************************/
public DeleteRequest()
{
}
/*******************************************************************************
**
*******************************************************************************/
public DeleteRequest(QInstance instance)
{
super(instance);
}
/*******************************************************************************
** Getter for ids
**
*******************************************************************************/
public List<Serializable> getPrimaryKeys()
{
return primaryKeys;
}
/*******************************************************************************
** Setter for ids
**
*******************************************************************************/
public void setPrimaryKeys(List<Serializable> primaryKeys)
{
this.primaryKeys = primaryKeys;
}
/*******************************************************************************
** Setter for ids
**
*******************************************************************************/
public DeleteRequest withPrimaryKeys(List<Serializable> primaryKeys)
{
this.primaryKeys = primaryKeys;
return (this);
}
}

View File

@ -0,0 +1,35 @@
package com.kingsrook.qqq.backend.core.model.actions;
import java.util.List;
import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
/*******************************************************************************
* Result for a delete action
*
*******************************************************************************/
public class DeleteResult extends AbstractQResult
{
List<QRecordWithStatus> records;
/*******************************************************************************
**
*******************************************************************************/
public List<QRecordWithStatus> getRecords()
{
return records;
}
/*******************************************************************************
**
*******************************************************************************/
public void setRecords(List<QRecordWithStatus> records)
{
this.records = records;
}
}

View File

@ -0,0 +1,18 @@
package com.kingsrook.qqq.backend.core.modules.interfaces;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.DeleteRequest;
import com.kingsrook.qqq.backend.core.model.actions.DeleteResult;
/*******************************************************************************
**
*******************************************************************************/
public interface DeleteInterface
{
/*******************************************************************************
**
*******************************************************************************/
DeleteResult execute(DeleteRequest deleteRequest) throws QException;
}

View File

@ -1,9 +1,6 @@
package com.kingsrook.qqq.backend.core.modules.interfaces; package com.kingsrook.qqq.backend.core.modules.interfaces;
import com.kingsrook.qqq.backend.core.actions.InsertAction;
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
@ -12,10 +9,35 @@ public interface QModuleInterface
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
QueryInterface getQueryInterface(); default QueryInterface getQueryInterface()
{
throwNotImplemented("Query");
return null;
}
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
InsertInterface getInsertInterface(); default InsertInterface getInsertInterface()
{
throwNotImplemented("Insert");
return null;
}
/*******************************************************************************
**
*******************************************************************************/
default DeleteInterface getDeleteInterface()
{
throwNotImplemented("Delete");
return null;
}
/*******************************************************************************
**
*******************************************************************************/
private void throwNotImplemented(String actionName)
{
throw new IllegalStateException(actionName + " is not implemented in this module: " + this.getClass().getSimpleName());
}
} }

View File

@ -0,0 +1,41 @@
package com.kingsrook.qqq.backend.core.modules.mock;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.DeleteRequest;
import com.kingsrook.qqq.backend.core.model.actions.DeleteResult;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
import com.kingsrook.qqq.backend.core.modules.interfaces.DeleteInterface;
/*******************************************************************************
**
*******************************************************************************/
public class MockDeleteAction implements DeleteInterface
{
/*******************************************************************************
**
*******************************************************************************/
public DeleteResult execute(DeleteRequest deleteRequest) throws QException
{
try
{
DeleteResult rs = new DeleteResult();
rs.setRecords(deleteRequest.getPrimaryKeys().stream().map(primaryKey ->
{
QRecord qRecord = new QRecord().withTableName(deleteRequest.getTableName()).withPrimaryKey(primaryKey);
return new QRecordWithStatus(qRecord);
}).toList());
return rs;
}
catch(Exception e)
{
throw new QException("Error executing delete: " + e.getMessage(), e);
}
}
}

View File

@ -0,0 +1,36 @@
package com.kingsrook.qqq.backend.core.actions;
import java.util.List;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.DeleteRequest;
import com.kingsrook.qqq.backend.core.model.actions.DeleteResult;
import com.kingsrook.qqq.backend.core.utils.TestUtils;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
/*******************************************************************************
**
*******************************************************************************/
class DeleteActionTest
{
/*******************************************************************************
**
*******************************************************************************/
@Test
public void test() throws QException
{
DeleteRequest request = new DeleteRequest(TestUtils.defineInstance());
request.setTableName("person");
request.setPrimaryKeys(List.of(1, 2));
DeleteResult result = new DeleteAction().execute(request);
assertNotNull(result);
assertEquals(2, result.getRecords().size());
assertTrue(result.getRecords().stream().allMatch(r -> r.getErrors() == null));
}
}