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 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
{
List<QRecordWithStatus> records;
List<QRecord> records;
/*******************************************************************************
**
*******************************************************************************/
public List<QRecordWithStatus> getRecords()
public List<QRecord> getRecords()
{
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;
}

View File

@ -24,7 +24,7 @@ package com.kingsrook.qqq.backend.core.model.actions.insert;
import java.util.List;
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
{
List<QRecordWithStatus> records;
List<QRecord> records;
/*******************************************************************************
**
*******************************************************************************/
public List<QRecordWithStatus> getRecords()
public List<QRecord> getRecords()
{
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;
}

View File

@ -24,7 +24,7 @@ package com.kingsrook.qqq.backend.core.model.actions.update;
import java.util.List;
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
{
List<QRecordWithStatus> records;
List<QRecord> records;
/*******************************************************************************
**
*******************************************************************************/
public List<QRecordWithStatus> getRecords()
public List<QRecord> getRecords()
{
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;
}

View File

@ -29,20 +29,53 @@ import java.util.Map;
/*******************************************************************************
* 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`
* map. Keys in this map are fieldNames from the QTableMetaData.
*
* "Display values" (e.g., labels for possible values, or formatted numbers
* (e.g., quantities with commas)) are in the displayValues map.
** 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`
** map. Keys in this map are fieldNames from the QTableMetaData.
**
** "Display values" (e.g., labels for possible values, or formatted numbers
** (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
{
private String tableName;
//x private Serializable primaryKey;
private Map<String, Serializable> values = new LinkedHashMap<>();
private Map<String, String> displayValues = new LinkedHashMap<>();
private String tableName;
private Map<String, Serializable> values = 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);
}
//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));
}
/*******************************************************************************
** 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.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;
@ -47,10 +46,10 @@ public class MockDeleteAction implements DeleteInterface
DeleteResult rs = new DeleteResult();
rs.setRecords(deleteRequest.getPrimaryKeys().stream().map(primaryKey ->
{
QRecord qRecord = new QRecord().withTableName(deleteRequest.getTableName()).withValue("id", primaryKey);
return new QRecordWithStatus(qRecord);
}).toList());
new QRecord()
.withTableName(deleteRequest.getTableName())
.withValue("id", primaryKey))
.toList());
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.model.actions.insert.InsertRequest;
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;
@ -45,10 +44,7 @@ public class MockInsertAction implements InsertInterface
{
InsertResult rs = new InsertResult();
rs.setRecords(insertRequest.getRecords().stream().map(qRecord ->
{
return new QRecordWithStatus(qRecord);
}).toList());
rs.setRecords(insertRequest.getRecords());
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.model.actions.update.UpdateRequest;
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;
@ -45,10 +44,7 @@ public class MockUpdateAction implements UpdateInterface
{
UpdateResult rs = new UpdateResult();
rs.setRecords(updateRequest.getRecords().stream().map(qRecord ->
{
return new QRecordWithStatus(qRecord);
}).toList());
rs.setRecords(updateRequest.getRecords());
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.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;
@ -55,7 +54,7 @@ class DeleteActionTest
DeleteResult result = new DeleteAction().execute(request);
assertNotNull(result);
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

@ -60,8 +60,9 @@ class JsonUtilsTest
public void test_toJsonQRecordInput()
{
QRecord qRecord = getQRecord();
String json = JsonUtils.toJson(qRecord);
assertEquals("{\"tableName\":\"foo\",\"values\":{\"foo\":\"Foo\",\"bar\":3.14159},\"displayValues\":{}}", json);
String json = JsonUtils.toJson(qRecord);
assertEquals("""
{"tableName":"foo","values":{"foo":"Foo","bar":3.14159},"displayValues":{},"backendDetails":{}}""", json);
}
@ -90,6 +91,7 @@ class JsonUtilsTest
}
/*******************************************************************************
**
*******************************************************************************/
@ -109,7 +111,7 @@ class JsonUtilsTest
public void test_toPrettyJsonQRecordInput()
{
QRecord qRecord = getQRecord();
String json = JsonUtils.toPrettyJson(qRecord);
String json = JsonUtils.toPrettyJson(qRecord);
// todo assertEquals("{\"tableName\":\"foo\",\"primaryKey\":1,\"values\":{\"foo\":\"Foo\",\"bar\":3.14159}}", json);
}