@JsonRequest @ApiOperation(value = "Perform action for single user", authorizations = @Authorization(value = "read_key")) @Path("/single") public CompletableFuture<Boolean> send(@Named("project") RequestContext context, @ApiParam("user") String userId, @ApiParam("config") EmailActionConfig config) { return httpService.getUser(context, userId).thenApply(user -> send(context.project, user, config)); }
@JsonRequest @ApiOperation(value = "Apply batch operation", authorizations = @Authorization(value = "read_key")) @Path("/batch") public CompletableFuture<Long> batch(@Named("project") RequestContext context, @ApiParam(value = "filter", required = false) String filter, @ApiParam(value = "event_filters", required = false) List<UserStorage.EventFilter> event_filter, @ApiParam("config") EmailActionConfig config) { List<String> variables = new StringTemplate(config.content).getVariables(); variables.add(config.columnName); CompletableFuture<QueryResult> future = httpService.searchUsers(context, variables, filter, event_filter, null, null, 100000); return batch(context.project, future, config); }
@ApiOperation(value = "Create new user", request = User.class, response = Integer.class) @Path("/create") @POST public void createUser(RakamHttpRequest request) { setPropertiesInline(request, (project, user) -> service.create(project, user.id, user.properties)); }
@JsonRequest @ApiOperation(value = "Apply batch operation", authorizations = @Authorization(value = "read_key")) @Path("/batch") public CompletableFuture<Long> batchSendMessages(@Named("project") RequestContext context, @ApiParam(value = "filter", required = false) String filter, @ApiParam(value = "event_filters", required = false) List<EventFilter> event_filter, @ApiParam("config") MailAction config) { List<String> variables = new StringTemplate(config.message).getVariables(); variables.add(UserStorage.PRIMARY_KEY); Expression expression = parseExpression(filter); CompletableFuture<QueryResult> future = userService.searchUsers(context, variables, expression, event_filter, null, 100000, null); return batch(context.project, future, config); }
@ApiOperation(value = "Batch operation on a single user properties", request = SingleUserBatchOperationRequest.class, response = Integer.class, authorizations = {@Authorization(value = "write_key")}) @ApiResponses(value = {@ApiResponse(code = 404, message = "User does not exist.")}) @Path("/batch") @JsonRequest public void batchSingleUserOperations(RakamHttpRequest request) { request.bodyHandler(s -> { SingleUserBatchOperationRequest req; try { req = JsonHelper.read(s, SingleUserBatchOperationRequest.class); } catch (Exception e) { returnError(request, e.getMessage(), BAD_REQUEST); return; } String project = apiKeyService.getProjectOfApiKey(req.api.apiKey, WRITE_KEY); InetAddress socketAddress = ((InetSocketAddress) request.context().channel() .remoteAddress()).getAddress(); DefaultFullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK, wrappedBuffer(OK_MESSAGE)); List<Cookie> cookies = mapEvent(mapper -> mapper.map(project, req.data, new HttpRequestParams(request), socketAddress)); service.batch(project, req.data); setBrowser(request, response); if (cookies != null && !cookies.isEmpty()) { response.headers().add(SET_COOKIE, STRICT.encode(cookies)); } request.response(response).end(); }); }
@JsonRequest @ApiOperation(value = "Set user properties once", request = User.class, response = Integer.class) @ApiResponses(value = {@ApiResponse(code = 404, message = "User does not exist.")}) @Path("/set_properties_once") public void setPropertiesOnce(RakamHttpRequest request) { request.bodyHandler(s -> { User req; try { req = JsonHelper.readSafe(s, User.class); } catch (IOException e) { returnError(request, e.getMessage(), BAD_REQUEST); return; } String project = apiKeyService.getProjectOfApiKey(req.api.apiKey, WRITE_KEY); DefaultFullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK, wrappedBuffer(OK_MESSAGE)); response.headers().set(ACCESS_CONTROL_ALLOW_ORIGIN, request.headers().get(ORIGIN)); List<Cookie> cookies = mapProperties(project, req, request); if (cookies != null) { response.headers().add(SET_COOKIE, STRICT.encode(cookies)); } String headerList = getHeaderList(response.headers().iterator()); if (headerList != null) { response.headers().set(ACCESS_CONTROL_EXPOSE_HEADERS, headerList); } // TODO: we may cache these values and reduce the db hit. service.setUserPropertiesOnce(project, req.id, req.properties); request.response(OK_MESSAGE).end(); }); }
@JsonRequest @ApiOperation(value = "Search users", authorizations = @Authorization(value = "read_key")) @Path("/search") public CompletableFuture<QueryResult> searchUsers(@Named("project") RequestContext context, @ApiParam(value = "columns", required = false) List<String> columns, @ApiParam(value = "filter", required = false) String filter, @ApiParam(value = "event_filters", required = false) List<UserStorage.EventFilter> event_filter, @ApiParam(value = "sorting", required = false) Sorting sorting, @ApiParam(value = "offset", required = false) String offset, @ApiParam(value = "limit", required = false) Integer limit) { Expression expression = parseExpression(filter); limit = limit == null ? 100 : Math.min(5000, limit); return service.searchUsers(context, columns, expression, event_filter, sorting, limit, offset); }
List<Cookie> cookies = mapEvent(mapper -> mapper.map(project, req.data, new HttpRequestParams(request), socketAddress));
String project = apiKeyService.getProjectOfApiKey(req.api.apiKey, WRITE_KEY); List<Cookie> cookies = mapProperties(project, req, request); if (cookies != null) { response.headers().add(SET_COOKIE, STRICT.encode(cookies));
@ApiOperation(value = "Set user properties", request = User.class, response = Integer.class) @ApiResponses(value = {@ApiResponse(code = 404, message = "User does not exist.")}) @Path("/set_properties") @POST public void setProperties(RakamHttpRequest request) { setPropertiesInline(request, (project, user) -> service.setUserProperties(project, user.id, user.properties)); }