QQQ-16 Removing QRecordWithStatus - moving those details into QRecord

This commit is contained in:
2022-06-23 14:32:25 -05:00
parent 9de3300765
commit 202f3fd2bf
9 changed files with 134 additions and 71 deletions

View File

@ -24,7 +24,7 @@ package com.kingsrook.qqq.backend.core.model.actions.delete;
import java.util.List; import java.util.List;
import com.kingsrook.qqq.backend.core.model.actions.AbstractQResult; import com.kingsrook.qqq.backend.core.model.actions.AbstractQResult;
import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus; import com.kingsrook.qqq.backend.core.model.data.QRecord;
/******************************************************************************* /*******************************************************************************
@ -33,14 +33,14 @@ import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
*******************************************************************************/ *******************************************************************************/
public class DeleteResult extends AbstractQResult public class DeleteResult extends AbstractQResult
{ {
List<QRecordWithStatus> records; List<QRecord> records;
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
public List<QRecordWithStatus> getRecords() public List<QRecord> getRecords()
{ {
return records; return records;
} }
@ -50,7 +50,7 @@ public class DeleteResult extends AbstractQResult
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
public void setRecords(List<QRecordWithStatus> records) public void setRecords(List<QRecord> records)
{ {
this.records = records; this.records = records;
} }

View File

@ -24,7 +24,7 @@ package com.kingsrook.qqq.backend.core.model.actions.insert;
import java.util.List; import java.util.List;
import com.kingsrook.qqq.backend.core.model.actions.AbstractQResult; import com.kingsrook.qqq.backend.core.model.actions.AbstractQResult;
import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus; import com.kingsrook.qqq.backend.core.model.data.QRecord;
/******************************************************************************* /*******************************************************************************
@ -33,14 +33,14 @@ import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
*******************************************************************************/ *******************************************************************************/
public class InsertResult extends AbstractQResult public class InsertResult extends AbstractQResult
{ {
List<QRecordWithStatus> records; List<QRecord> records;
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
public List<QRecordWithStatus> getRecords() public List<QRecord> getRecords()
{ {
return records; return records;
} }
@ -50,7 +50,7 @@ public class InsertResult extends AbstractQResult
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
public void setRecords(List<QRecordWithStatus> records) public void setRecords(List<QRecord> records)
{ {
this.records = records; this.records = records;
} }

View File

@ -24,7 +24,7 @@ package com.kingsrook.qqq.backend.core.model.actions.update;
import java.util.List; import java.util.List;
import com.kingsrook.qqq.backend.core.model.actions.AbstractQResult; import com.kingsrook.qqq.backend.core.model.actions.AbstractQResult;
import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus; import com.kingsrook.qqq.backend.core.model.data.QRecord;
/******************************************************************************* /*******************************************************************************
@ -33,14 +33,14 @@ import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
*******************************************************************************/ *******************************************************************************/
public class UpdateResult extends AbstractQResult public class UpdateResult extends AbstractQResult
{ {
List<QRecordWithStatus> records; List<QRecord> records;
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
public List<QRecordWithStatus> getRecords() public List<QRecord> getRecords()
{ {
return records; return records;
} }
@ -50,7 +50,7 @@ public class UpdateResult extends AbstractQResult
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
public void setRecords(List<QRecordWithStatus> records) public void setRecords(List<QRecord> records)
{ {
this.records = records; this.records = records;
} }

View File

@ -29,20 +29,53 @@ import java.util.Map;
/******************************************************************************* /*******************************************************************************
* Data Record within qqq. e.g., a single row from a database. ** Data Record within qqq. e.g., a single row from a database.
* **
* Actual values (e.g., as stored in the backend system) are in the `values` ** Actual values (e.g., as stored in the backend system) are in the `values`
* map. Keys in this map are fieldNames from the QTableMetaData. ** map. Keys in this map are fieldNames from the QTableMetaData.
* **
* "Display values" (e.g., labels for possible values, or formatted numbers ** "Display values" (e.g., labels for possible values, or formatted numbers
* (e.g., quantities with commas)) are in the displayValues map. ** (e.g., quantities with commas)) are in the displayValues map.
**
** backendDetails are additional data about a record, that aren't strictly
** values, but are more like meta-data - e.g., for a file-backend, what file the
** record came from.
**
** Errors are meant to hold information about things that went wrong when
** processing a record - e.g., in a list of records that may be the output of an
** action, like a bulk load. TODO - redo as some status object?
*******************************************************************************/ *******************************************************************************/
public class QRecord implements Serializable public class QRecord implements Serializable
{ {
private String tableName; private String tableName;
//x private Serializable primaryKey;
private Map<String, Serializable> values = new LinkedHashMap<>(); private Map<String, Serializable> values = new LinkedHashMap<>();
private Map<String, String> displayValues = new LinkedHashMap<>(); private Map<String, String> displayValues = new LinkedHashMap<>();
private Map<String, Serializable> backendDetails = new LinkedHashMap<>();
// todo private List<String> errors = new ArrayList<>();
/*******************************************************************************
** Default constructor.
*******************************************************************************/
public QRecord()
{
}
/*******************************************************************************
** Copy constructor.
** TODO ... should this do deep copies?
*******************************************************************************/
public QRecord(QRecord record)
{
this.tableName = record.tableName;
this.values = record.values;
this.displayValues = record.displayValues;
this.backendDetails = record.backendDetails;
// todo! this.errors = record.errors;
}
@ -120,34 +153,6 @@ public class QRecord implements Serializable
return (this); return (this);
} }
//x /*******************************************************************************
//x ** Getter for primaryKey
//x **
//x *******************************************************************************/
//x public Serializable getPrimaryKey()
//x {
//x return primaryKey;
//x }
//x /*******************************************************************************
//x ** Setter for primaryKey
//x **
//x *******************************************************************************/
//x public void setPrimaryKey(Serializable primaryKey)
//x {
//x this.primaryKey = primaryKey;
//x }
//x /*******************************************************************************
//x ** Setter for primaryKey
//x **
//x *******************************************************************************/
//x public QRecord withPrimaryKey(Serializable primaryKey)
//x {
//x this.primaryKey = primaryKey;
//x return (this);
//x }
/******************************************************************************* /*******************************************************************************
@ -247,4 +252,70 @@ public class QRecord implements Serializable
return ((LocalDate) values.get(fieldName)); return ((LocalDate) values.get(fieldName));
} }
/*******************************************************************************
** Getter for backendDetails
**
*******************************************************************************/
public Map<String, Serializable> getBackendDetails()
{
return backendDetails;
}
/*******************************************************************************
** Setter for backendDetails
**
*******************************************************************************/
public void setBackendDetails(Map<String, Serializable> backendDetails)
{
this.backendDetails = backendDetails;
}
/*******************************************************************************
** Add one backendDetail to this record
**
*******************************************************************************/
public void addBackendDetail(String key, Serializable value)
{
this.backendDetails.put(key, value);
}
/*******************************************************************************
** Fluently Add one backendDetail to this record
**
*******************************************************************************/
public QRecord withBackendDetail(String key, Serializable value)
{
addBackendDetail(key, value);
return (this);
}
/*******************************************************************************
** Get one backendDetail from this record
**
*******************************************************************************/
public Serializable getBackendDetail(String key)
{
return this.backendDetails.get(key);
}
/*******************************************************************************
** Get one backendDetail from this record as a String
**
*******************************************************************************/
public String getBackendDetailString(String key)
{
return (String) this.backendDetails.get(key);
}
} }

View File

@ -26,7 +26,6 @@ import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteRequest; import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteRequest;
import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteResult; import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteResult;
import com.kingsrook.qqq.backend.core.model.data.QRecord; 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; import com.kingsrook.qqq.backend.core.modules.interfaces.DeleteInterface;
@ -47,10 +46,10 @@ public class MockDeleteAction implements DeleteInterface
DeleteResult rs = new DeleteResult(); DeleteResult rs = new DeleteResult();
rs.setRecords(deleteRequest.getPrimaryKeys().stream().map(primaryKey -> rs.setRecords(deleteRequest.getPrimaryKeys().stream().map(primaryKey ->
{ new QRecord()
QRecord qRecord = new QRecord().withTableName(deleteRequest.getTableName()).withValue("id", primaryKey); .withTableName(deleteRequest.getTableName())
return new QRecordWithStatus(qRecord); .withValue("id", primaryKey))
}).toList()); .toList());
return rs; return rs;
} }

View File

@ -25,7 +25,6 @@ package com.kingsrook.qqq.backend.core.modules.mock;
import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.insert.InsertRequest; import com.kingsrook.qqq.backend.core.model.actions.insert.InsertRequest;
import com.kingsrook.qqq.backend.core.model.actions.insert.InsertResult; import com.kingsrook.qqq.backend.core.model.actions.insert.InsertResult;
import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
import com.kingsrook.qqq.backend.core.modules.interfaces.InsertInterface; import com.kingsrook.qqq.backend.core.modules.interfaces.InsertInterface;
@ -45,10 +44,7 @@ public class MockInsertAction implements InsertInterface
{ {
InsertResult rs = new InsertResult(); InsertResult rs = new InsertResult();
rs.setRecords(insertRequest.getRecords().stream().map(qRecord -> rs.setRecords(insertRequest.getRecords());
{
return new QRecordWithStatus(qRecord);
}).toList());
return rs; return rs;
} }

View File

@ -25,7 +25,6 @@ package com.kingsrook.qqq.backend.core.modules.mock;
import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.update.UpdateRequest; import com.kingsrook.qqq.backend.core.model.actions.update.UpdateRequest;
import com.kingsrook.qqq.backend.core.model.actions.update.UpdateResult; import com.kingsrook.qqq.backend.core.model.actions.update.UpdateResult;
import com.kingsrook.qqq.backend.core.model.data.QRecordWithStatus;
import com.kingsrook.qqq.backend.core.modules.interfaces.UpdateInterface; import com.kingsrook.qqq.backend.core.modules.interfaces.UpdateInterface;
@ -45,10 +44,7 @@ public class MockUpdateAction implements UpdateInterface
{ {
UpdateResult rs = new UpdateResult(); UpdateResult rs = new UpdateResult();
rs.setRecords(updateRequest.getRecords().stream().map(qRecord -> rs.setRecords(updateRequest.getRecords());
{
return new QRecordWithStatus(qRecord);
}).toList());
return rs; return rs;
} }

View File

@ -28,7 +28,6 @@ import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteRequest;
import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteResult; import com.kingsrook.qqq.backend.core.model.actions.delete.DeleteResult;
import com.kingsrook.qqq.backend.core.utils.TestUtils; import com.kingsrook.qqq.backend.core.utils.TestUtils;
import org.junit.jupiter.api.Test; 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.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -55,7 +54,7 @@ class DeleteActionTest
DeleteResult result = new DeleteAction().execute(request); DeleteResult result = new DeleteAction().execute(request);
assertNotNull(result); assertNotNull(result);
assertEquals(2, result.getRecords().size()); assertEquals(2, result.getRecords().size());
assertTrue(result.getRecords().stream().allMatch(r -> r.getErrors() == null)); // todo - add errors to QRecord? assertTrue(result.getRecords().stream().allMatch(r -> r.getErrors() == null));
} }
} }

View File

@ -61,7 +61,8 @@ class JsonUtilsTest
{ {
QRecord qRecord = getQRecord(); QRecord qRecord = getQRecord();
String json = JsonUtils.toJson(qRecord); String json = JsonUtils.toJson(qRecord);
assertEquals("{\"tableName\":\"foo\",\"values\":{\"foo\":\"Foo\",\"bar\":3.14159},\"displayValues\":{}}", json); assertEquals("""
{"tableName":"foo","values":{"foo":"Foo","bar":3.14159},"displayValues":{},"backendDetails":{}}""", json);
} }
@ -90,6 +91,7 @@ class JsonUtilsTest
} }
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/