Skip to content

Commit

Permalink
V1.15.0 (#234)
Browse files Browse the repository at this point in the history
* 215 - Add "ocrNumberOfPages" to OCR action

* #207 - GET /documents/{documentId}/content - NoSuchKeyException

* #217 - deepLinkPath property is using the deepest-level name as path and is not modifiable

* #218 - POST /search tag range not inclusive of "end" value

* #228 - add IDP Mapping

* #227 - Modify "Only available with Pro/Enterprise" text in /documents/{id}/ocr endpoints

* #226 - Add ability to publish document

* Updated console to 3.6.0

* #232 - Add Schema Classification

* #231 - Require valid URL on deepLinkPath property

* #195 - Users API
  • Loading branch information
mfriesen committed Jul 7, 2024
1 parent 909a6f9 commit 657d64c
Show file tree
Hide file tree
Showing 292 changed files with 42,825 additions and 9,180 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
/**
* Action.
*/
@Reflectable
public class Action implements DynamodbRecord<Action>, DbKeys {

/** Record Completed date. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,16 @@ public enum ActionType {
DOCUMENTTAGGING,
/** Full Text. */
FULLTEXT,
/** Intelligent Document Processing. */
IDP,
/** Notification Action. */
NOTIFICATION,
/** OCR. */
OCR,
/** Queue. */
QUEUE,
/** WebHook. */
WEBHOOK;
WEBHOOK,
/** Publish. */
PUBLISH
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
package com.formkiq.module.actions.services;

import static com.formkiq.aws.dynamodb.SiteIdKeyGenerator.createDatabaseKey;
import static com.formkiq.aws.dynamodb.objects.Objects.notNull;
import static com.formkiq.aws.dynamodb.objects.Strings.isEmpty;
import static software.amazon.awssdk.services.dynamodb.model.AttributeValue.fromS;
import java.text.SimpleDateFormat;
Expand All @@ -47,7 +48,6 @@
import com.formkiq.aws.dynamodb.QueryConfig;
import com.formkiq.aws.dynamodb.QueryResponseToPagination;
import com.formkiq.aws.dynamodb.objects.DateUtil;
import com.formkiq.aws.dynamodb.objects.Objects;
import com.formkiq.module.actions.Action;
import com.formkiq.module.actions.ActionIndexComparator;
import com.formkiq.module.actions.ActionStatus;
Expand All @@ -73,11 +73,11 @@
public class ActionsServiceDynamoDb implements ActionsService, DbKeys {

/** {@link DynamoDbService}. */
private DynamoDbService db;
private final DynamoDbService db;
/** {@link DynamoDbClient}. */
private DynamoDbClient dbClient;
private final DynamoDbClient dbClient;
/** Document Table Name. */
private String documentTableName;
private final String documentTableName;

/**
* constructor.
Expand Down Expand Up @@ -196,13 +196,12 @@ public List<Action> getActions(final String siteId, final String documentId) {
@Override
public PaginationResults<Action> getActions(final String siteId, final String documentId,
final Map<String, AttributeValue> exclusiveStartKey, final int limit) {
return queryActions(siteId, documentId, null, exclusiveStartKey, Integer.valueOf(limit));
return queryActions(siteId, documentId, null, exclusiveStartKey, limit);
}

@Override
public boolean hasActions(final String siteId, final String documentId) {
List<Action> actions =
queryActions(siteId, documentId, Arrays.asList(PK), null, null).getResults();
List<Action> actions = queryActions(siteId, documentId, List.of(PK), null, null).getResults();
return !actions.isEmpty();
}

Expand Down Expand Up @@ -248,7 +247,7 @@ private PaginationResults<Action> queryActions(final String siteId, final String
Builder q = QueryRequest.builder().tableName(this.documentTableName).exclusiveStartKey(startKey)
.keyConditionExpression(expression).expressionAttributeValues(values).limit(limit);

if (!Objects.notNull(projectionExpression).isEmpty()) {
if (!notNull(projectionExpression).isEmpty()) {

Map<String, String> names = new HashMap<>();
int i = 1;
Expand Down Expand Up @@ -326,7 +325,7 @@ public List<Map<String, AttributeValue>> saveNewActions(final String siteId,

List<Map<String, AttributeValue>> values = new ArrayList<>();

for (Action action : actions) {
for (Action action : notNull(actions)) {

action.documentId(documentId);
action.index("" + idx);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import java.util.Map;
import com.formkiq.aws.dynamodb.DynamicObject;
import com.formkiq.aws.dynamodb.DynamoDbService;
import com.formkiq.aws.dynamodb.model.MappingRecord;
import com.formkiq.aws.dynamodb.objects.Strings;
import com.formkiq.module.actions.Action;
import com.formkiq.module.actions.ActionType;
Expand All @@ -57,7 +58,7 @@ public class ActionsValidatorImpl implements ActionsValidator {
/** Notification Email. */
private static final String NOTIFICATION_EMAIL = "NotificationEmail";
/** {@link DynamoDbService}. */
private DynamoDbService db;
private final DynamoDbService db;

/**
* constructor.
Expand All @@ -69,9 +70,7 @@ public ActionsValidatorImpl(final DynamoDbService dbService) {
}

private Map<String, String> getParameters(final Action action) {
Map<String, String> parameters =
action.parameters() != null ? action.parameters() : Collections.emptyMap();
return parameters;
return action.parameters() != null ? action.parameters() : Collections.emptyMap();
}

private boolean hasValue(final Map<String, String> parameters, final String key) {
Expand Down Expand Up @@ -162,6 +161,24 @@ private void validateQueue(final String siteId, final Action action,
}
}

private void validateIdp(final String siteId, final Action action,
final Collection<ValidationError> errors) {

Map<String, String> parameters = getParameters(action);

if (!hasValue(parameters, "mappingId")) {
errors.add(new ValidationErrorImpl().key("mappingId").error("'mappingId' is required"));

} else {
String mappingId = parameters.get("mappingId");
MappingRecord m = new MappingRecord().setDocumentId(mappingId);

if (!this.db.exists(m.fromS(m.pk(siteId)), m.fromS(m.sk()))) {
errors.add(new ValidationErrorImpl().key("mappingId").error("'mappingId' does not exist"));
}
}
}

@Override
public Collection<ValidationError> validation(final String siteId, final Action action,
final DynamicObject configs) {
Expand Down Expand Up @@ -193,6 +210,8 @@ public Collection<ValidationError> validation(final String siteId, final Action
validateNotificationEmail(configs, action, errors);
} else if (ActionType.QUEUE.equals(action.type())) {
validateQueue(siteId, action, errors);
} else if (ActionType.IDP.equals(action.type())) {
validateIdp(siteId, action, errors);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import com.formkiq.stacks.dynamodb.DocumentVersionServiceNoVersioning;
import com.formkiq.testutils.aws.DynamoDbExtension;
import com.formkiq.testutils.aws.DynamoDbTestServices;
import com.formkiq.validation.ValidationException;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;

/** Unit Tests for {@link ActionsServiceDynamoDbTest}. */
Expand Down Expand Up @@ -101,9 +102,11 @@ public void hasActions01() {

/**
* Test Delete Document & Document Actions.
*
* @throws ValidationException ValidationException
*/
@Test
public void testDeleteDocument() {
public void testDeleteDocument() throws ValidationException {
for (String siteId : Arrays.asList(null, UUID.randomUUID().toString())) {
// given
String documentId = UUID.randomUUID().toString();
Expand All @@ -125,9 +128,11 @@ public void testDeleteDocument() {

/**
* Test Document Actions.
*
* @throws ValidationException ValidationException
*/
@Test
public void testDeleteDocumentActions() {
public void testDeleteDocumentActions() throws ValidationException {
for (String siteId : Arrays.asList(null, UUID.randomUUID().toString())) {
// given
String documentId = UUID.randomUUID().toString();
Expand Down
Loading

0 comments on commit 657d64c

Please sign in to comment.