mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 13:10:44 +00:00
QQQ-16 Removing QRecordWithStatus - moving those details into QRecord
This commit is contained in:
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
Reference in New Issue
Block a user