Package com.kingsrook.qqq.middleware.javalin.executors
package com.kingsrook.qqq.middleware.javalin.executors
This package contains (hopefully generally) api-version-agnostic classes
that implement the actual QQQ Middleware. That is to say, subclasses of
`AbstractMiddlewareExecutor`, which use classes from the `.io` subpackage
for I/O, to run code in a QQQ server.
As new versions of the middleware evolve, the idea is that the spec classes
for new versions will be responsible for appropriately marshalling data
in and out of the executors, via the I/O classes, with "feature flags", etc
added to those input classes as needed (say if v N+1 adds a new feature,
then a request for v N may omit the feature-flag that turns that feature on).
As functionality continues to evolve, the time may come when it's appropriate
to fork an Executor. Hypothetically, if version 5 of the QueryExecutor
bears very little resemblance to versions 1 through 4 (due to additional
pizzazz?) spawn a new QueryWithPizzazzExecutor. Of course, naming here
will be the hardest part (e.g., avoid NewNewQueryExecutorFinal2B...)
-
ClassesClassDescriptionAbstractMiddlewareExecutor<INPUT extends AbstractMiddlewareInput,
OUTPUT extends AbstractMiddlewareOutputInterface> Validate a provider's signed logout event before modifying stored OAuth2 sessions.Runs BulkLoadAssist.suggestMapping: core's suggester over an upload's header row.Runs BulkLoadAssist.profile: the header guess and column profiles of an upload (samples only where the PHI rule allows).Runs BulkLoadAssist.validate: a dry run of a profile through the table's bulk-insert process (nothing is stored).Executor for the general file download endpoint.HelpCoverageExecutor contract.HelpSearchExecutor contract.Executor for the logout endpoint.Executor for searching possible value sources.Executor for cancelling a running process.Launch a process as a durable job, as the request's session (DurableJobs enforces eligibility, permissions, caps and the assistant gate).Executor for fetching records from a process state.Get the logs of a record's associated script revision - requiring that the record be readable, as the legacy developer route does.Store a new revision of a record's associated script - requiring EDIT permission on the record's table, as the legacy developer route does.Get a record for developer mode, with its table's associated scripts - with the same permission checks and data as the legacy developer route.Read a record (under the user's table read permission and record security locks - a 403 or 404 otherwise), then build the developer panels that the instance's providers contribute for it.Executor for the record field download endpoint.Executes record search across the tables that declare search fields, as the session's user (tables it may not read are skipped; record security locks apply).Runs a relatedRecordPicker route's operation through RelatedRecordPickerAction (which does every permission and security check).Run a report and stream the generated file, as the legacy GET /reports/{reportName} route does: 404 for an unknown report, the report permission check, the report's input fields read from the request (400 for a missing required one or a value of the wrong type), and the file streamed in the requested format while it is generated.Executor for the table export endpoint.List the variants a table's backend can be scoped to, as the legacy GET /data/{table}/variants route does - and, beyond it, only for a user who may read the table (an unknown table is refused the same way) and the backend's variant options table.Stream the request's file into the uploads storage table as the caller.Typed executor for the preferences API.Executor for the version endpoint: describes the API's semantic version, features and registered extensions, so clients can check compatibility before they sign in.Executor for rendering a widget.