updated api backend to support count and query

This commit is contained in:
Tim Chamberlain
2022-10-19 10:43:39 -05:00
parent bf3835bd4c
commit 18a3f72c4a
9 changed files with 348 additions and 33 deletions

View File

@ -22,6 +22,9 @@
package com.kingsrook.qqq.backend.core.actions;
import java.io.Serializable;
import java.util.List;
import java.util.function.Function;
import com.kingsrook.qqq.backend.core.exceptions.QAuthenticationException;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.AbstractActionInput;
@ -41,11 +44,23 @@ public class ActionHelper
public static void validateSession(AbstractActionInput request) throws QException
{
QAuthenticationModuleDispatcher qAuthenticationModuleDispatcher = new QAuthenticationModuleDispatcher();
QAuthenticationModuleInterface authenticationModule = qAuthenticationModuleDispatcher.getQModule(request.getAuthenticationMetaData());
QAuthenticationModuleInterface authenticationModule = qAuthenticationModuleDispatcher.getQModule(request.getAuthenticationMetaData());
if(!authenticationModule.isSessionValid(request.getInstance(), request.getSession()))
{
throw new QAuthenticationException("Invalid session in request");
}
}
/*******************************************************************************
**
*******************************************************************************/
public static void editFirstValue(List<Serializable> values, Function<String, String> editFunction)
{
if(values.size() > 0)
{
values.set(0, editFunction.apply(String.valueOf(values.get(0))));
}
}
}

View File

@ -23,6 +23,9 @@ package com.kingsrook.qqq.backend.core.utils;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
@ -31,6 +34,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONArray;
@ -219,4 +224,44 @@ public class JsonUtils
return (json != null && json.matches("(?s)\\s*\\[.*"));
}
/*******************************************************************************
** Convert a json object into a QRecord
**
*******************************************************************************/
public static QRecord parseQRecord(JSONObject jsonObject, Map<String, QFieldMetaData> fields)
{
QRecord record = new QRecord();
for(String fieldName : fields.keySet())
{
QFieldMetaData metaData = fields.get(fieldName);
String backendName = metaData.getBackendName() != null ? metaData.getBackendName() : fieldName;
switch(metaData.getType())
{
case INTEGER -> record.setValue(fieldName, jsonObject.optInt(backendName));
case DECIMAL -> record.setValue(fieldName, jsonObject.optBigDecimal(backendName, null));
case BOOLEAN -> record.setValue(fieldName, jsonObject.optBoolean(backendName));
case DATE_TIME ->
{
String dateTimeString = jsonObject.optString(backendName);
if(StringUtils.hasContent(dateTimeString))
{
try
{
record.setValue(fieldName, LocalDateTime.parse(dateTimeString, DateTimeFormatter.ISO_ZONED_DATE_TIME));
}
catch(DateTimeParseException dtpe1)
{
record.setValue(fieldName, LocalDateTime.parse(dateTimeString, DateTimeFormatter.ISO_DATE_TIME));
}
}
}
default -> record.setValue(fieldName, jsonObject.optString(backendName));
}
}
return (record);
}
}

View File

@ -228,6 +228,10 @@ public class ValueUtils
ZoneId zid = (tz == null) ? ZoneId.systemDefault() : tz.toZoneId();
return LocalDateTime.ofInstant(c.toInstant(), zid);
}
else if(value instanceof String s)
{
return LocalDateTime.parse(s);
}
else
{
throw (new QValueException("Unsupported class " + value.getClass().getName() + " for converting to LocalDateTime."));