Search in sources :

Example 1 with ApiPagination

use of com.formkiq.lambda.apigateway.ApiPagination in project formkiq-core by formkiq.

the class ApiGatewayRequestEventUtil method toPaginationToken.

/**
 * Convert {@link String} to {@link ApiPagination}.
 *
 * @param cacheService {@link CacheService}
 * @param key {@link String}
 *
 * @return {@link ApiPagination}
 */
public static ApiPagination toPaginationToken(final CacheService cacheService, final String key) {
    ApiPagination pagination = null;
    if (isNotBlank(key)) {
        String json = cacheService.read(key);
        if (isNotBlank(json)) {
            Gson gson = GsonUtil.getInstance();
            pagination = gson.fromJson(json, ApiPagination.class);
        }
    }
    return pagination;
}
Also used : ApiPagination(com.formkiq.lambda.apigateway.ApiPagination) Gson(com.google.gson.Gson)

Example 2 with ApiPagination

use of com.formkiq.lambda.apigateway.ApiPagination 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;
}
Also used : ApiPagination(com.formkiq.lambda.apigateway.ApiPagination) Gson(com.google.gson.Gson) PaginationMapToken(com.formkiq.stacks.dynamodb.PaginationMapToken)

Example 3 with ApiPagination

use of com.formkiq.lambda.apigateway.ApiPagination in project formkiq-core by formkiq.

the class ApiGatewayRequestEventUtil method getPagination.

/**
 * Find Query Parameter 'next' or 'prev' and convert to {@link ApiPagination}.
 *
 * @param cacheService {@link CacheService}
 * @param event {@link ApiGatewayRequestEvent}
 * @return {@link ApiPagination}
 */
public static ApiPagination getPagination(final CacheService cacheService, final ApiGatewayRequestEvent event) {
    ApiPagination pagination = null;
    Map<String, String> q = getQueryParameterMap(event);
    if (isPaginationNext(q)) {
        pagination = toPaginationToken(cacheService, q.get("next"));
    } else if (isPaginationPrevious(q)) {
        pagination = toPaginationToken(cacheService, q.get("previous"));
        if (pagination.getPrevious() != null) {
            pagination = toPaginationToken(cacheService, pagination.getPrevious());
        } else {
            // if @ start of list, preserve the limit
            int limit = pagination.getLimit();
            pagination = new ApiPagination();
            pagination.setLimit(limit);
        }
    }
    if (pagination != null && pagination.getLimit() < 1) {
        pagination.setLimit(MAX_RESULTS);
    }
    return pagination;
}
Also used : ApiPagination(com.formkiq.lambda.apigateway.ApiPagination)

Example 4 with ApiPagination

use of com.formkiq.lambda.apigateway.ApiPagination in project formkiq-core by formkiq.

the class DocumentIdRequestHandler method get.

@Override
public ApiRequestHandlerResponse get(final LambdaLogger logger, final ApiGatewayRequestEvent event, final ApiAuthorizer authorizer, final AwsServiceCache awsservice) throws Exception {
    String siteId = authorizer.getSiteId();
    int limit = getLimit(logger, event);
    ApiPagination token = getPagination(awsservice.documentCacheService(), event);
    String documentId = event.getPathParameters().get("documentId");
    ApiPagination pagination = getPagination(awsservice.documentCacheService(), event);
    PaginationResult<DocumentItem> presult = awsservice.documentService().findDocument(siteId, documentId, true, token != null ? token.getStartkey() : null, limit);
    DocumentItem result = presult.getResult();
    if (result == null) {
        throw new NotFoundException("Document " + documentId + " not found.");
    }
    ApiPagination current = createPagination(awsservice.documentCacheService(), event, pagination, presult.getToken(), limit);
    DynamicDocumentItem item = new DocumentItemToDynamicDocumentItem().apply(result);
    item.put("siteId", siteId != null ? siteId : DEFAULT_SITE_ID);
    item.put("previous", current.getPrevious());
    item.put("next", current.hasNext() ? current.getNext() : null);
    return new ApiRequestHandlerResponse(SC_OK, new ApiMapResponse(item));
}
Also used : ApiPagination(com.formkiq.lambda.apigateway.ApiPagination) DynamicDocumentItem(com.formkiq.stacks.dynamodb.DynamicDocumentItem) DocumentItemToDynamicDocumentItem(com.formkiq.stacks.dynamodb.DocumentItemToDynamicDocumentItem) DocumentItemToDynamicDocumentItem(com.formkiq.stacks.dynamodb.DocumentItemToDynamicDocumentItem) DynamicDocumentItem(com.formkiq.stacks.dynamodb.DynamicDocumentItem) DocumentItemToDynamicDocumentItem(com.formkiq.stacks.dynamodb.DocumentItemToDynamicDocumentItem) DocumentItem(com.formkiq.stacks.dynamodb.DocumentItem) NotFoundException(com.formkiq.lambda.apigateway.exception.NotFoundException) ApiRequestHandlerResponse(com.formkiq.lambda.apigateway.ApiRequestHandlerResponse) ApiMapResponse(com.formkiq.lambda.apigateway.ApiMapResponse)

Example 5 with ApiPagination

use of com.formkiq.lambda.apigateway.ApiPagination 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);
}
Also used : SC_CREATED(com.formkiq.lambda.apigateway.ApiResponseStatus.SC_CREATED) Arrays(java.util.Arrays) DocumentTags(com.formkiq.stacks.dynamodb.DocumentTags) Date(java.util.Date) AwsServiceCache(com.formkiq.lambda.apigateway.AwsServiceCache) ApiAuthorizer(com.formkiq.lambda.apigateway.ApiAuthorizer) ApiResponse(com.formkiq.lambda.apigateway.ApiResponse) ApiGatewayRequestEventUtil(com.formkiq.lambda.apigateway.ApiGatewayRequestEventUtil) LambdaLogger(com.amazonaws.services.lambda.runtime.LambdaLogger) DocumentTag(com.formkiq.stacks.dynamodb.DocumentTag) SC_OK(com.formkiq.lambda.apigateway.ApiResponseStatus.SC_OK) PaginationMapToken(com.formkiq.stacks.dynamodb.PaginationMapToken) ApiDocumentTagsItemResponse(com.formkiq.stacks.api.ApiDocumentTagsItemResponse) ApiGatewayRequestHandler(com.formkiq.lambda.apigateway.ApiGatewayRequestHandler) ApiPagination(com.formkiq.lambda.apigateway.ApiPagination) ApiDocumentTagItemResponse(com.formkiq.stacks.api.ApiDocumentTagItemResponse) Collectors(java.util.stream.Collectors) BadException(com.formkiq.lambda.apigateway.exception.BadException) List(java.util.List) ApiGatewayRequestEvent(com.formkiq.lambda.apigateway.ApiGatewayRequestEvent) ApiRequestHandlerResponse(com.formkiq.lambda.apigateway.ApiRequestHandlerResponse) CacheService(com.formkiq.stacks.dynamodb.CacheService) ApiMessageResponse(com.formkiq.lambda.apigateway.ApiMessageResponse) Collections(java.util.Collections) DocumentTagType(com.formkiq.stacks.dynamodb.DocumentTagType) PaginationResults(com.formkiq.stacks.dynamodb.PaginationResults) ApiPagination(com.formkiq.lambda.apigateway.ApiPagination) DocumentTag(com.formkiq.stacks.dynamodb.DocumentTag) ApiDocumentTagItemResponse(com.formkiq.stacks.api.ApiDocumentTagItemResponse) ApiRequestHandlerResponse(com.formkiq.lambda.apigateway.ApiRequestHandlerResponse) PaginationMapToken(com.formkiq.stacks.dynamodb.PaginationMapToken) ApiDocumentTagsItemResponse(com.formkiq.stacks.api.ApiDocumentTagsItemResponse) CacheService(com.formkiq.stacks.dynamodb.CacheService)

Aggregations

ApiPagination (com.formkiq.lambda.apigateway.ApiPagination)7 ApiRequestHandlerResponse (com.formkiq.lambda.apigateway.ApiRequestHandlerResponse)4 PaginationMapToken (com.formkiq.stacks.dynamodb.PaginationMapToken)4 ApiMapResponse (com.formkiq.lambda.apigateway.ApiMapResponse)3 BadException (com.formkiq.lambda.apigateway.exception.BadException)3 DynamicDocumentItem (com.formkiq.stacks.dynamodb.DynamicDocumentItem)3 LambdaLogger (com.amazonaws.services.lambda.runtime.LambdaLogger)2 ApiAuthorizer (com.formkiq.lambda.apigateway.ApiAuthorizer)2 ApiGatewayRequestEvent (com.formkiq.lambda.apigateway.ApiGatewayRequestEvent)2 ApiGatewayRequestEventUtil (com.formkiq.lambda.apigateway.ApiGatewayRequestEventUtil)2 ApiGatewayRequestHandler (com.formkiq.lambda.apigateway.ApiGatewayRequestHandler)2 SC_OK (com.formkiq.lambda.apigateway.ApiResponseStatus.SC_OK)2 AwsServiceCache (com.formkiq.lambda.apigateway.AwsServiceCache)2 DocumentItem (com.formkiq.stacks.dynamodb.DocumentItem)2 DocumentItemToDynamicDocumentItem (com.formkiq.stacks.dynamodb.DocumentItemToDynamicDocumentItem)2 PaginationResults (com.formkiq.stacks.dynamodb.PaginationResults)2 Gson (com.google.gson.Gson)2 Date (java.util.Date)2 HashMap (java.util.HashMap)2 List (java.util.List)2