= QQQ
:doctype: article
:toc: left
:toclevels: 2
:source-highlighter: coderay

include::Introduction.adoc[leveloffset=+1]

== Meta Data
// Organizational units
include::metaData/QInstance.adoc[leveloffset=+1]
include::metaData/Backends.adoc[leveloffset=+1]
include::metaData/Apps.adoc[leveloffset=+1]

// Primary meta-data types
include::metaData/Tables.adoc[leveloffset=+1]
include::metaData/Processes.adoc[leveloffset=+1]
include::metaData/Widgets.adoc[leveloffset=+1]

// Helper meta-data types
include::metaData/Fields.adoc[leveloffset=+1]
include::metaData/PossibleValueSources.adoc[leveloffset=+1]
include::metaData/Joins.adoc[leveloffset=+1]
include::metaData/SecurtiyKeyTypes.adoc[leveloffset=+1]
include::metaData/Reports.adoc[leveloffset=+1]
include::metaData/Icons.adoc[leveloffset=+1]
include::metaData/PermissionRules.adoc[leveloffset=+1]

== Services

include::misc/ScheduledJobs.adoc[leveloffset=+1]

=== Web server (Javalin)
#todo#

=== API server (OpenAPI)
#todo#

== Custom Application Code
include::misc/QContext.adoc[leveloffset=+1]
include::misc/QRecords.adoc[leveloffset=+1]
include::misc/QRecordEntities.adoc[leveloffset=+1]
include::misc/ProcessBackendSteps.adoc[leveloffset=+1]
include::misc/RenderingWidgets.adoc[leveloffset=+1]

=== Table Customizers
#todo#

== QQQ Core Actions
include::actions/QueryAction.adoc[leveloffset=+1]

include::actions/GetAction.adoc[leveloffset=+1]

=== CountAction
#todo#

=== AggregateAction
#todo#

include::actions/InsertAction.adoc[leveloffset=+1]

=== UpdateAction
#todo#

=== DeleteAction
#todo#

=== AuditAction
#todo#

== QQQ Default Implementations
include::implementations/TableSync.adoc[leveloffset=+1]
// later... include::actions/RenderTemplateAction.adoc[leveloffset=+1]

== QQQ Utility Classes
include::utilities/RecordLookupHelper.adoc[leveloffset=+1]
