use of com.formkiq.stacks.dynamodb.PaginationMapToken in project formkiq-core by formkiq.
the class ApiGatewayRequestEventUtil method createPagination.
/**
* Create Pagination.
*
* @param cacheService {@link CacheService}
* @param event {@link ApiGatewayRequestEvent}
* @param lastPagination {@link ApiPagination}
* @param results {@link PaginationResults}
* @param limit int
*
* @return {@link ApiPagination}
*/
public static ApiPagination createPagination(final CacheService cacheService, final ApiGatewayRequestEvent event, final ApiPagination lastPagination, final PaginationResults<?> results, final int limit) {
ApiPagination current = null;
final Map<String, String> q = getQueryParameterMap(event);
Gson gson = GsonUtil.getInstance();
PaginationMapToken token = results.getToken();
if (isPaginationPrevious(q)) {
String json = cacheService.read(q.get("previous"));
current = gson.fromJson(json, ApiPagination.class);
} else {
current = new ApiPagination();
current.setLimit(limit);
current.setPrevious(lastPagination != null ? lastPagination.getNext() : null);
current.setStartkey(token);
current.setHasNext(token != null);
cacheService.write(current.getNext(), gson.toJson(current), 1);
}
return current;
}
use of com.formkiq.stacks.dynamodb.PaginationMapToken in project formkiq-core by formkiq.
the class DocumentTagsRequestHandler method get.
@Override
public ApiRequestHandlerResponse get(final LambdaLogger logger, final ApiGatewayRequestEvent event, final ApiAuthorizer authorizer, final AwsServiceCache awsservice) throws Exception {
CacheService cacheService = awsservice.documentCacheService();
ApiPagination pagination = getPagination(cacheService, event);
int limit = pagination != null ? pagination.getLimit() : getLimit(logger, event);
PaginationMapToken ptoken = pagination != null ? pagination.getStartkey() : null;
String siteId = authorizer.getSiteId();
String documentId = event.getPathParameters().get("documentId");
PaginationResults<DocumentTag> results = awsservice.documentService().findDocumentTags(siteId, documentId, ptoken, limit);
results.getResults().forEach(r -> r.setDocumentId(null));
ApiPagination current = createPagination(cacheService, event, pagination, results.getToken(), limit);
List<DocumentTag> tags = subList(results.getResults(), limit);
List<ApiDocumentTagItemResponse> list = tags.stream().map(t -> {
ApiDocumentTagItemResponse r = new ApiDocumentTagItemResponse();
r.setDocumentId(t.getDocumentId());
r.setInsertedDate(t.getInsertedDate());
r.setKey(t.getKey());
r.setValue(t.getValue());
r.setValues(t.getValues());
r.setUserId(t.getUserId());
r.setType(t.getType() != null ? t.getType().name().toLowerCase() : null);
return r;
}).collect(Collectors.toList());
ApiDocumentTagsItemResponse resp = new ApiDocumentTagsItemResponse();
resp.setTags(list);
resp.setPrevious(current.getPrevious());
resp.setNext(current.hasNext() ? current.getNext() : null);
return new ApiRequestHandlerResponse(SC_OK, resp);
}
use of com.formkiq.stacks.dynamodb.PaginationMapToken in project formkiq-core by formkiq.
the class DocumentsRequestHandler method get.
@Override
public ApiRequestHandlerResponse get(final LambdaLogger logger, final ApiGatewayRequestEvent event, final ApiAuthorizer authorizer, final AwsServiceCache awsservice) throws Exception {
ApiPagination pagination = getPagination(awsservice.documentCacheService(), event);
final int limit = pagination != null ? pagination.getLimit() : getLimit(logger, event);
final PaginationMapToken ptoken = pagination != null ? pagination.getStartkey() : null;
String tz = getParameter(event, "tz");
String dateString = getParameter(event, "date");
if (StringUtils.isBlank(dateString)) {
if (StringUtils.isNotBlank(tz)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
ZoneOffset offset = DateUtil.getZoneOffset(tz);
sdf.setTimeZone(TimeZone.getTimeZone(offset));
dateString = sdf.format(new Date());
} else {
dateString = this.df.format(new Date());
}
}
ZonedDateTime date = transformToDate(logger, awsservice, dateString, tz);
String siteId = authorizer.getSiteId();
final PaginationResults<DocumentItem> results = awsservice.documentService().findDocumentsByDate(siteId, date, ptoken, limit);
ApiPagination current = createPagination(awsservice.documentCacheService(), event, pagination, results.getToken(), limit);
List<DocumentItem> documents = subList(results.getResults(), limit);
List<DynamicDocumentItem> items = documents.stream().map(m -> new DocumentItemToDynamicDocumentItem().apply(m)).collect(Collectors.toList());
items.forEach(i -> i.put("siteId", siteId != null ? siteId : DEFAULT_SITE_ID));
Map<String, Object> map = new HashMap<>();
map.put("documents", items);
map.put("previous", current.getPrevious());
map.put("next", current.hasNext() ? current.getNext() : null);
return new ApiRequestHandlerResponse(SC_OK, new ApiMapResponse(map));
}
use of com.formkiq.stacks.dynamodb.PaginationMapToken in project formkiq-core by formkiq.
the class SearchRequestHandler method post.
@Override
public ApiRequestHandlerResponse post(final LambdaLogger logger, final ApiGatewayRequestEvent event, final ApiAuthorizer authorizer, final AwsServiceCache awsservice) throws Exception {
DynamoDbCacheService cacheService = awsservice.documentCacheService();
ApiPagination pagination = getPagination(cacheService, event);
int limit = pagination != null ? pagination.getLimit() : getLimit(logger, event);
PaginationMapToken ptoken = pagination != null ? pagination.getStartkey() : null;
QueryRequest q = fromBodyToObject(logger, event, QueryRequest.class);
if (q == null || q.query() == null || q.query().tag() == null) {
throw new BadException("Invalid JSON body.");
}
Collection<String> documentIds = q.query().documentIds();
if (documentIds != null) {
if (documentIds.size() > MAX_DOCUMENT_IDS) {
throw new BadException("Maximum number of DocumentIds is " + MAX_DOCUMENT_IDS);
}
if (!getQueryParameterMap(event).containsKey("limit")) {
limit = documentIds.size();
}
}
String siteId = authorizer.getSiteId();
PaginationResults<DynamicDocumentItem> results = awsservice.documentSearchService().search(siteId, q.query(), ptoken, limit);
ApiPagination current = createPagination(cacheService, event, pagination, results.getToken(), limit);
List<DynamicDocumentItem> documents = subList(results.getResults(), limit);
Map<String, Object> map = new HashMap<>();
map.put("documents", documents);
map.put("previous", current.getPrevious());
map.put("next", current.hasNext() ? current.getNext() : null);
ApiMapResponse resp = new ApiMapResponse(map);
return new ApiRequestHandlerResponse(SC_OK, resp);
}
Aggregations