<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://mediawiki.wissen-ahrensburg.de/index.php?action=history&amp;feed=atom&amp;title=Wiki.js_Rust-Datenmodell</id>
	<title>Wiki.js Rust-Datenmodell - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.wissen-ahrensburg.de/index.php?action=history&amp;feed=atom&amp;title=Wiki.js_Rust-Datenmodell"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.wissen-ahrensburg.de/index.php?title=Wiki.js_Rust-Datenmodell&amp;action=history"/>
	<updated>2026-08-19T16:01:49Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Dokument</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mediawiki.wissen-ahrensburg.de/index.php?title=Wiki.js_Rust-Datenmodell&amp;diff=38&amp;oldid=prev</id>
		<title>Thorsten am 12. August 2026 um 14:39 Uhr</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.wissen-ahrensburg.de/index.php?title=Wiki.js_Rust-Datenmodell&amp;diff=38&amp;oldid=prev"/>
		<updated>2026-08-12T14:39:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 12. August 2026, 14:39 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dieses Dokument beschreibt ein reines Rust-Datenmodell (Structs/Enums, ohne externe Crates wie &amp;lt;code&amp;gt;serde&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlx&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;chrono&amp;lt;/code&amp;gt;) für das PostgreSQL-Schema von [https://github.com/requarks/wiki Wiki.js] (&amp;lt;code&amp;gt;server/models/*.js&amp;lt;/code&amp;gt; + Knex-Migrationen). Der vollständige Quelltext liegt in &amp;lt;code&amp;gt;wikijs_models.rs&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dieses Dokument beschreibt ein reines Rust-Datenmodell (Structs/Enums, ohne externe Crates wie &amp;lt;code&amp;gt;serde&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlx&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;chrono&amp;lt;/code&amp;gt;) für das PostgreSQL-Schema von [https://github.com/requarks/wiki Wiki.js] (&amp;lt;code&amp;gt;server/models/*.js&amp;lt;/code&amp;gt; + Knex-Migrationen). Der vollständige Quelltext liegt in &amp;lt;code&amp;gt;wikijs_models.rs&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l926&quot;&gt;Zeile 926:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 927:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Wiki.js]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Wiki.js]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Datenmodell]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Datenmodell]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==Hinweis==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Thorsten</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.wissen-ahrensburg.de/index.php?title=Wiki.js_Rust-Datenmodell&amp;diff=21&amp;oldid=prev</id>
		<title>Thorsten: Die Seite wurde neu angelegt: „ Dieses Dokument beschreibt ein reines Rust-Datenmodell (Structs/Enums, ohne externe Crates wie &lt;code&gt;serde&lt;/code&gt;, &lt;code&gt;sqlx&lt;/code&gt; oder &lt;code&gt;chrono&lt;/code&gt;) für das PostgreSQL-Schema von [https://github.com/requarks/wiki Wiki.js] (&lt;code&gt;server/models/*.js&lt;/code&gt; + Knex-Migrationen). Der vollständige Quelltext liegt in &lt;code&gt;wikijs_models.rs&lt;/code&gt;.  __TOC__  == Überblick ==  * Keine Abhängigkeiten — reine &lt;code&gt;std&lt;/code&gt;. * JSONB-Spalten werden…“</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.wissen-ahrensburg.de/index.php?title=Wiki.js_Rust-Datenmodell&amp;diff=21&amp;oldid=prev"/>
		<updated>2026-08-12T02:44:50Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „ Dieses Dokument beschreibt ein reines Rust-Datenmodell (Structs/Enums, ohne externe Crates wie &amp;lt;code&amp;gt;serde&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlx&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;chrono&amp;lt;/code&amp;gt;) für das PostgreSQL-Schema von [https://github.com/requarks/wiki Wiki.js] (&amp;lt;code&amp;gt;server/models/*.js&amp;lt;/code&amp;gt; + Knex-Migrationen). Der vollständige Quelltext liegt in &amp;lt;code&amp;gt;wikijs_models.rs&amp;lt;/code&amp;gt;.  __TOC__  == Überblick ==  * Keine Abhängigkeiten — reine &amp;lt;code&amp;gt;std&amp;lt;/code&amp;gt;. * JSONB-Spalten werden…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
Dieses Dokument beschreibt ein reines Rust-Datenmodell (Structs/Enums, ohne externe Crates wie &amp;lt;code&amp;gt;serde&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sqlx&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;chrono&amp;lt;/code&amp;gt;) für das PostgreSQL-Schema von [https://github.com/requarks/wiki Wiki.js] (&amp;lt;code&amp;gt;server/models/*.js&amp;lt;/code&amp;gt; + Knex-Migrationen). Der vollständige Quelltext liegt in &amp;lt;code&amp;gt;wikijs_models.rs&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Überblick ==&lt;br /&gt;
&lt;br /&gt;
* Keine Abhängigkeiten — reine &amp;lt;code&amp;gt;std&amp;lt;/code&amp;gt;.&lt;br /&gt;
* JSONB-Spalten werden als roher JSON-Text (&amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt;) abgebildet — kein eigener JSON-Typ.&lt;br /&gt;
* Zeitstempel werden über den ebenfalls selbstgebauten Typ &amp;lt;code&amp;gt;Timestamp&amp;lt;/code&amp;gt; (Unix-Zeit in Sekunden) abgebildet (siehe [[#Timestamp]]).&lt;br /&gt;
* Enums bilden die in Wiki.js als String/Int gespeicherten &amp;quot;closed sets&amp;quot; ab (z. B. &amp;lt;code&amp;gt;contentType&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kind&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;permissions&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Cargo.toml ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[dependencies]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Timestamp ==&lt;br /&gt;
&lt;br /&gt;
Einfacher Zeitstempel ohne externe Crates.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| 0 (Tupelfeld) || i64 || Unix-Zeit in Sekunden seit 1970-01-01 UTC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Pages ==&lt;br /&gt;
&lt;br /&gt;
=== Page ===&lt;br /&gt;
&lt;br /&gt;
Entspricht der Tabelle &amp;lt;code&amp;gt;pages&amp;lt;/code&amp;gt; — Kerntabelle für Wiki-Seiten.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || Primärschlüssel&lt;br /&gt;
|-&lt;br /&gt;
| path || String || Seitenpfad&lt;br /&gt;
|-&lt;br /&gt;
| hash || String || Hash des Pfads (für Lookups)&lt;br /&gt;
|-&lt;br /&gt;
| title || String || Titel&lt;br /&gt;
|-&lt;br /&gt;
| description || String || Kurzbeschreibung&lt;br /&gt;
|-&lt;br /&gt;
| is_private || bool || private Sichtbarkeit&lt;br /&gt;
|-&lt;br /&gt;
| is_published || bool || veröffentlicht?&lt;br /&gt;
|-&lt;br /&gt;
| private_ns || Option&amp;amp;lt;String&amp;amp;gt; || private Namespace-Kennung&lt;br /&gt;
|-&lt;br /&gt;
| publish_start_date || Option&amp;amp;lt;Timestamp&amp;amp;gt; || Start des Veröffentlichungsfensters&lt;br /&gt;
|-&lt;br /&gt;
| publish_end_date || Option&amp;amp;lt;Timestamp&amp;amp;gt; || Ende des Veröffentlichungsfensters&lt;br /&gt;
|-&lt;br /&gt;
| content || String || Rohinhalt (Quelltext)&lt;br /&gt;
|-&lt;br /&gt;
| content_type || [[#ContentType]] || Editor-/Renderformat&lt;br /&gt;
|-&lt;br /&gt;
| render || Option&amp;amp;lt;String&amp;amp;gt; || gerenderter HTML-Output&lt;br /&gt;
|-&lt;br /&gt;
| toc || Option&amp;amp;lt;String&amp;amp;gt; || Inhaltsverzeichnis-Baum als roher JSON-Text&lt;br /&gt;
|-&lt;br /&gt;
| extra || Option&amp;amp;lt;String&amp;amp;gt; || beliebige Zusatzdaten als roher JSON-Text&lt;br /&gt;
|-&lt;br /&gt;
| editor_key || String || genutzter Editor&lt;br /&gt;
|-&lt;br /&gt;
| locale_code || String || Sprachcode&lt;br /&gt;
|-&lt;br /&gt;
| creator_id || i32 || erstellender Benutzer&lt;br /&gt;
|-&lt;br /&gt;
| author_id || i32 || letzter Bearbeiter&lt;br /&gt;
|-&lt;br /&gt;
| owner_id || i32 || Eigentümer&lt;br /&gt;
|-&lt;br /&gt;
| css || Option&amp;amp;lt;String&amp;amp;gt; || seitenspezifisches CSS&lt;br /&gt;
|-&lt;br /&gt;
| script_css || Option&amp;amp;lt;String&amp;amp;gt; || zusätzliches CSS (Skript-Editor)&lt;br /&gt;
|-&lt;br /&gt;
| script_js || Option&amp;amp;lt;String&amp;amp;gt; || zusätzliches JS (Skript-Editor)&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp || Erstellungszeitpunkt&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp || letzte Änderung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ContentType ===&lt;br /&gt;
&lt;br /&gt;
Editor/Rendering-Format einer Seite (&amp;lt;code&amp;gt;pages.contentType&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pageHistory.contentType&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Markdown&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Html&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Asciidoc&amp;lt;/code&amp;gt; — nicht mehr aktiv genutzt, aber historisch im Schema möglich&lt;br /&gt;
&lt;br /&gt;
=== PageHistory ===&lt;br /&gt;
&lt;br /&gt;
Entspricht der Tabelle &amp;lt;code&amp;gt;pageHistory&amp;lt;/code&amp;gt; — Versionsverlauf, gleiche Spalten wie [[#Page]] plus &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;version_date&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || Primärschlüssel&lt;br /&gt;
|-&lt;br /&gt;
| page_id || i32 || zugehörige Seite&lt;br /&gt;
|-&lt;br /&gt;
| path || String || Seitenpfad zum Zeitpunkt der Version&lt;br /&gt;
|-&lt;br /&gt;
| hash || String || Hash des Pfads&lt;br /&gt;
|-&lt;br /&gt;
| title || String || Titel zum Zeitpunkt der Version&lt;br /&gt;
|-&lt;br /&gt;
| description || String || Kurzbeschreibung&lt;br /&gt;
|-&lt;br /&gt;
| is_private || bool || private Sichtbarkeit&lt;br /&gt;
|-&lt;br /&gt;
| content || String || Rohinhalt dieser Version&lt;br /&gt;
|-&lt;br /&gt;
| content_type || [[#ContentType]] || Editor-/Renderformat&lt;br /&gt;
|-&lt;br /&gt;
| render || Option&amp;amp;lt;String&amp;amp;gt; || gerenderter HTML-Output&lt;br /&gt;
|-&lt;br /&gt;
| toc || Option&amp;amp;lt;String&amp;amp;gt; || Inhaltsverzeichnis-Baum als roher JSON-Text&lt;br /&gt;
|-&lt;br /&gt;
| editor_key || String || genutzter Editor&lt;br /&gt;
|-&lt;br /&gt;
| locale_code || String || Sprachcode&lt;br /&gt;
|-&lt;br /&gt;
| action || [[#PageHistoryAction]] || Art der Änderung&lt;br /&gt;
|-&lt;br /&gt;
| version_date || Timestamp || Zeitpunkt der Version&lt;br /&gt;
|-&lt;br /&gt;
| author_id || i32 || Bearbeiter dieser Version&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PageHistoryAction ===&lt;br /&gt;
&lt;br /&gt;
Art der historisierten Änderung (&amp;lt;code&amp;gt;pageHistory.action&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Initial&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Edit&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Delete&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Move&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Restore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PageLink ===&lt;br /&gt;
&lt;br /&gt;
Entspricht der Tabelle &amp;lt;code&amp;gt;pageLinks&amp;lt;/code&amp;gt; — extrahierte Verlinkungen zwischen Seiten (für Broken-Link-Check).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || Primärschlüssel&lt;br /&gt;
|-&lt;br /&gt;
| path || String || Ziel-Pfad des Links&lt;br /&gt;
|-&lt;br /&gt;
| locale_code || String || Sprachcode des Ziels&lt;br /&gt;
|-&lt;br /&gt;
| page_id || i32 || Quellseite des Links&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
&lt;br /&gt;
=== Tag ===&lt;br /&gt;
&lt;br /&gt;
Entspricht der Tabelle &amp;lt;code&amp;gt;tags&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || Primärschlüssel&lt;br /&gt;
|-&lt;br /&gt;
| tag || String || Tag-Slug&lt;br /&gt;
|-&lt;br /&gt;
| title || Option&amp;amp;lt;String&amp;amp;gt; || Anzeigename&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp || Erstellungszeitpunkt&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp || letzte Änderung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PageTag ===&lt;br /&gt;
&lt;br /&gt;
Join-Tabelle &amp;lt;code&amp;gt;pageTags&amp;lt;/code&amp;gt; (n:m zwischen [[#Page]] und [[#Tag]]).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| page_id || i32 || FK auf [[#Page]]&lt;br /&gt;
|-&lt;br /&gt;
| tag_id || i32 || FK auf [[#Tag]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
Entspricht der Tabelle &amp;lt;code&amp;gt;users&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || Primärschlüssel&lt;br /&gt;
|-&lt;br /&gt;
| email || String || E-Mail-Adresse&lt;br /&gt;
|-&lt;br /&gt;
| name || String || Anzeigename&lt;br /&gt;
|-&lt;br /&gt;
| provider || String || Modul-ID des Auth-Providers (z. B. &amp;quot;local&amp;quot;, &amp;quot;ldap&amp;quot;, &amp;quot;google&amp;quot;, &amp;quot;azure&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| provider_id || Option&amp;amp;lt;String&amp;amp;gt; || externe Provider-ID&lt;br /&gt;
|-&lt;br /&gt;
| provider_key || Option&amp;amp;lt;String&amp;amp;gt; || Provider-Schlüssel&lt;br /&gt;
|-&lt;br /&gt;
| password || Option&amp;amp;lt;String&amp;amp;gt; || bcrypt-Hash, nur bei provider == &amp;quot;local&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| tfa_is_active || bool || Zwei-Faktor-Auth aktiv?&lt;br /&gt;
|-&lt;br /&gt;
| tfa_secret || Option&amp;amp;lt;String&amp;amp;gt; || 2FA-Secret&lt;br /&gt;
|-&lt;br /&gt;
| job_title || Option&amp;amp;lt;String&amp;amp;gt; || Berufsbezeichnung&lt;br /&gt;
|-&lt;br /&gt;
| location || Option&amp;amp;lt;String&amp;amp;gt; || Standort&lt;br /&gt;
|-&lt;br /&gt;
| picture_url || Option&amp;amp;lt;String&amp;amp;gt; || Profilbild-URL&lt;br /&gt;
|-&lt;br /&gt;
| timezone || String || Zeitzone&lt;br /&gt;
|-&lt;br /&gt;
| date_format || String || bevorzugtes Datumsformat&lt;br /&gt;
|-&lt;br /&gt;
| appearance || String || UI-Theme-Einstellung&lt;br /&gt;
|-&lt;br /&gt;
| is_system || bool || Systembenutzer?&lt;br /&gt;
|-&lt;br /&gt;
| is_active || bool || Konto aktiv?&lt;br /&gt;
|-&lt;br /&gt;
| is_verified || bool || E-Mail verifiziert?&lt;br /&gt;
|-&lt;br /&gt;
| meta || Option&amp;amp;lt;String&amp;amp;gt; || beliebige Provider-spezifische Zusatzdaten als roher JSON-Text&lt;br /&gt;
|-&lt;br /&gt;
| last_login_at || Option&amp;amp;lt;Timestamp&amp;amp;gt; || letzter Login&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp || Erstellungszeitpunkt&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp || letzte Änderung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== UserKeyKind ===&lt;br /&gt;
&lt;br /&gt;
Zweck eines temporären Tokens (&amp;lt;code&amp;gt;userKeys.kind&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Validation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ResetPwd&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ChangeEmail&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Api&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UserKey ===&lt;br /&gt;
&lt;br /&gt;
Entspricht der Tabelle &amp;lt;code&amp;gt;userKeys&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || Primärschlüssel&lt;br /&gt;
|-&lt;br /&gt;
| kind || [[#UserKeyKind]] || Zweck des Tokens&lt;br /&gt;
|-&lt;br /&gt;
| token || String || Token-Wert&lt;br /&gt;
|-&lt;br /&gt;
| user_id || i32 || FK auf [[#User]]&lt;br /&gt;
|-&lt;br /&gt;
| expiration || Timestamp || Ablaufzeitpunkt&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp || Erstellungszeitpunkt&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp || letzte Änderung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Groups ==&lt;br /&gt;
&lt;br /&gt;
=== Group ===&lt;br /&gt;
&lt;br /&gt;
Entspricht der Tabelle &amp;lt;code&amp;gt;groups&amp;lt;/code&amp;gt; — Rechte- und Gruppenverwaltung.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || Primärschlüssel&lt;br /&gt;
|-&lt;br /&gt;
| name || String || Gruppenname&lt;br /&gt;
|-&lt;br /&gt;
| is_system || bool || Systemgruppe?&lt;br /&gt;
|-&lt;br /&gt;
| permissions || Vec&amp;amp;lt;[[#Permission]]&amp;amp;gt; || globale Rechte, z. B. [ReadPages, WritePages]&lt;br /&gt;
|-&lt;br /&gt;
| page_rules || Vec&amp;amp;lt;[[#PageRule]]&amp;amp;gt; || pfadbasierte Zugriffsregeln&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp || Erstellungszeitpunkt&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp || letzte Änderung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== UserGroup ===&lt;br /&gt;
&lt;br /&gt;
Join-Tabelle &amp;lt;code&amp;gt;userGroups&amp;lt;/code&amp;gt; (n:m zwischen [[#User]] und [[#Group]]).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| user_id || i32 || FK auf [[#User]]&lt;br /&gt;
|-&lt;br /&gt;
| group_id || i32 || FK auf [[#Group]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Permission ===&lt;br /&gt;
&lt;br /&gt;
Bekannte globale Rechte, in &amp;lt;code&amp;gt;groups.permissions&amp;lt;/code&amp;gt; als String-Array (JSON) gespeichert.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ManageSystem&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ManageGroups&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ManageNavigation&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ManageTheme&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ManageApi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ManageUsers&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ManagePages&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ReadPages&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ReadAssets&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ReadComments&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;WritePages&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;WriteAssets&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;WriteComments&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ManageComments&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;DeletePages&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;DeleteAssets&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;DeleteComments&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PageRule ===&lt;br /&gt;
&lt;br /&gt;
Ein Eintrag aus &amp;lt;code&amp;gt;groups.pageRules&amp;lt;/code&amp;gt; (JSONB-Array).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || String || Regel-ID&lt;br /&gt;
|-&lt;br /&gt;
| deny || bool || Regel verweigert (statt erlaubt)?&lt;br /&gt;
|-&lt;br /&gt;
| roles || Vec&amp;amp;lt;[[#Permission]]&amp;amp;gt; || betroffene Rechte&lt;br /&gt;
|-&lt;br /&gt;
| match (r#match) || [[#PageRuleMatch]] || Art des Pfad-Matchings&lt;br /&gt;
|-&lt;br /&gt;
| path || String || Pfad-Muster&lt;br /&gt;
|-&lt;br /&gt;
| locales || Vec&amp;amp;lt;String&amp;amp;gt; || betroffene Sprachcodes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PageRuleMatch ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Start&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;End&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Regex&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Exact&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Tag&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
&lt;br /&gt;
=== Comment ===&lt;br /&gt;
&lt;br /&gt;
Entspricht der Tabelle &amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || Primärschlüssel&lt;br /&gt;
|-&lt;br /&gt;
| content || String || Rohinhalt des Kommentars&lt;br /&gt;
|-&lt;br /&gt;
| render || String || gerenderter HTML-Output&lt;br /&gt;
|-&lt;br /&gt;
| name || String || angezeigter Name&lt;br /&gt;
|-&lt;br /&gt;
| email || String || E-Mail des Verfassers&lt;br /&gt;
|-&lt;br /&gt;
| ip || String || IP-Adresse des Verfassers&lt;br /&gt;
|-&lt;br /&gt;
| page_id || i32 || FK auf [[#Page]]&lt;br /&gt;
|-&lt;br /&gt;
| author_id || i32 || FK auf [[#User]]&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp || Erstellungszeitpunkt&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp || letzte Änderung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Assets ==&lt;br /&gt;
&lt;br /&gt;
=== Asset ===&lt;br /&gt;
&lt;br /&gt;
Entspricht der Tabelle &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || Primärschlüssel&lt;br /&gt;
|-&lt;br /&gt;
| filename || String || Dateiname&lt;br /&gt;
|-&lt;br /&gt;
| ext || String || Dateiendung&lt;br /&gt;
|-&lt;br /&gt;
| kind || [[#AssetKind]] || Art der Datei&lt;br /&gt;
|-&lt;br /&gt;
| mime || String || MIME-Type&lt;br /&gt;
|-&lt;br /&gt;
| file_size || i64 || Dateigröße in Bytes&lt;br /&gt;
|-&lt;br /&gt;
| metadata || Option&amp;amp;lt;String&amp;amp;gt; || Zusatzmetadaten als roher JSON-Text&lt;br /&gt;
|-&lt;br /&gt;
| folder_id || Option&amp;amp;lt;i32&amp;amp;gt; || FK auf [[#AssetFolder]]&lt;br /&gt;
|-&lt;br /&gt;
| author_id || i32 || FK auf [[#User]]&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp || Erstellungszeitpunkt&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp || letzte Änderung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AssetKind ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Image&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Binary&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AssetFolder ===&lt;br /&gt;
&lt;br /&gt;
Entspricht der Tabelle &amp;lt;code&amp;gt;assetFolders&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || Primärschlüssel&lt;br /&gt;
|-&lt;br /&gt;
| slug || String || URL-Slug&lt;br /&gt;
|-&lt;br /&gt;
| name || String || Anzeigename&lt;br /&gt;
|-&lt;br /&gt;
| parent_id || Option&amp;amp;lt;i32&amp;amp;gt; || übergeordneter Ordner (rekursiv)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AssetData ===&lt;br /&gt;
&lt;br /&gt;
Binärdaten getrennt von den Metadaten gehalten (1:1 zu [[#Asset]]).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || FK/PK auf [[#Asset]]&lt;br /&gt;
|-&lt;br /&gt;
| data || Vec&amp;amp;lt;u8&amp;amp;gt; || Binärinhalt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== StorageTarget ===&lt;br /&gt;
&lt;br /&gt;
Sync-Status der konfigurierten Storage-Targets (Git, S3, ...), Tabelle &amp;lt;code&amp;gt;storage&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || Primärschlüssel&lt;br /&gt;
|-&lt;br /&gt;
| key || String || Target-Kennung (z. B. &amp;quot;git&amp;quot;, &amp;quot;s3&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| is_enabled || bool || aktiviert?&lt;br /&gt;
|-&lt;br /&gt;
| mode || [[#StorageMode]] || Sync-Richtung&lt;br /&gt;
|-&lt;br /&gt;
| config || String || provider-spezifische Konfiguration (als roher JSON-Text) (Repo-URL, Credentials-Ref, ...)&lt;br /&gt;
|-&lt;br /&gt;
| state || Option&amp;amp;lt;String&amp;amp;gt; || letzter bekannter Sync-Zustand (als roher JSON-Text)&lt;br /&gt;
|-&lt;br /&gt;
| sync_interval || Option&amp;amp;lt;String&amp;amp;gt; || Sync-Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== StorageMode ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Push&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Pull&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Sync&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Navigation ==&lt;br /&gt;
&lt;br /&gt;
=== NavigationTree ===&lt;br /&gt;
&lt;br /&gt;
Seitenbaum pro Locale, Tabelle &amp;lt;code&amp;gt;navigation&amp;lt;/code&amp;gt; (eine Zeile je Locale-Code).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || String || Locale-Code, z. B. &amp;quot;en&amp;quot; oder &amp;quot;de&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| config || Vec&amp;amp;lt;[[#NavigationItem]]&amp;amp;gt; || Navigationseinträge&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NavigationItem ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || String || Eintrags-ID&lt;br /&gt;
|-&lt;br /&gt;
| kind || [[#NavigationItemKind]] || Art des Eintrags&lt;br /&gt;
|-&lt;br /&gt;
| label || Option&amp;amp;lt;String&amp;amp;gt; || Anzeigetext&lt;br /&gt;
|-&lt;br /&gt;
| icon || Option&amp;amp;lt;String&amp;amp;gt; || Icon-Kennung&lt;br /&gt;
|-&lt;br /&gt;
| target_type || Option&amp;amp;lt;[[#NavigationTargetType]]&amp;amp;gt; || Ziel-Art&lt;br /&gt;
|-&lt;br /&gt;
| target || Option&amp;amp;lt;String&amp;amp;gt; || Ziel (Pfad/URL)&lt;br /&gt;
|-&lt;br /&gt;
| visibility_rules || Option&amp;amp;lt;Vec&amp;amp;lt;String&amp;amp;gt;&amp;amp;gt; || Sichtbarkeitsregeln&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NavigationItemKind ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Link&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Header&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Divider&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NavigationTargetType ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Internal&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;External&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Locales ==&lt;br /&gt;
&lt;br /&gt;
=== Locale ===&lt;br /&gt;
&lt;br /&gt;
Entspricht der Tabelle &amp;lt;code&amp;gt;locales&amp;lt;/code&amp;gt; — installierte Sprachpakete.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| code || String || Sprachcode (Primärschlüssel)&lt;br /&gt;
|-&lt;br /&gt;
| strings || String || Übersetzungs-Strings (als roher JSON-Text)&lt;br /&gt;
|-&lt;br /&gt;
| is_rtl || bool || rechts-nach-links-Schrift?&lt;br /&gt;
|-&lt;br /&gt;
| name || String || englischer Name&lt;br /&gt;
|-&lt;br /&gt;
| native_name || String || einheimischer Name&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp || Erstellungszeitpunkt&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp || letzte Änderung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== API Keys ==&lt;br /&gt;
&lt;br /&gt;
=== ApiKey ===&lt;br /&gt;
&lt;br /&gt;
Entspricht der Tabelle &amp;lt;code&amp;gt;apiKeys&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| id || i32 || Primärschlüssel&lt;br /&gt;
|-&lt;br /&gt;
| name || String || Bezeichnung&lt;br /&gt;
|-&lt;br /&gt;
| key || String || Schlüsselwert&lt;br /&gt;
|-&lt;br /&gt;
| expiration || Timestamp || Ablaufzeitpunkt&lt;br /&gt;
|-&lt;br /&gt;
| is_revoked || bool || widerrufen?&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp || Erstellungszeitpunkt&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp || letzte Änderung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
=== Setting ===&lt;br /&gt;
&lt;br /&gt;
Generischer Key/Value-Store für Sitekonfiguration, Tabelle &amp;lt;code&amp;gt;settings&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feld !! Typ !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| key || String || Einstellungsschlüssel (Primärschlüssel)&lt;br /&gt;
|-&lt;br /&gt;
| value || String || Wert (als roher JSON-Text)&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp || letzte Änderung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Vollständiger Quelltext ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/// Einfacher Zeitstempel ohne externe Crates: Unix-Zeit in Sekunden seit&lt;br /&gt;
/// 1970-01-01 UTC.&lt;br /&gt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]&lt;br /&gt;
pub struct Timestamp(pub i64);&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct Page {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub path: String,&lt;br /&gt;
    pub hash: String,&lt;br /&gt;
    pub title: String,&lt;br /&gt;
    pub description: String,&lt;br /&gt;
    pub is_private: bool,&lt;br /&gt;
    pub is_published: bool,&lt;br /&gt;
    pub private_ns: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub publish_start_date: Option&amp;lt;Timestamp&amp;gt;,&lt;br /&gt;
    pub publish_end_date: Option&amp;lt;Timestamp&amp;gt;,&lt;br /&gt;
    pub content: String,&lt;br /&gt;
    pub content_type: ContentType,&lt;br /&gt;
    pub render: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub toc: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub extra: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub editor_key: String,&lt;br /&gt;
    pub locale_code: String,&lt;br /&gt;
    pub creator_id: i32,&lt;br /&gt;
    pub author_id: i32,&lt;br /&gt;
    pub owner_id: i32,&lt;br /&gt;
    pub css: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub script_css: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub script_js: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub created_at: Timestamp,&lt;br /&gt;
    pub updated_at: Timestamp,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]&lt;br /&gt;
pub enum ContentType {&lt;br /&gt;
    Markdown,&lt;br /&gt;
    Html,&lt;br /&gt;
    Asciidoc,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct PageHistory {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub page_id: i32,&lt;br /&gt;
    pub path: String,&lt;br /&gt;
    pub hash: String,&lt;br /&gt;
    pub title: String,&lt;br /&gt;
    pub description: String,&lt;br /&gt;
    pub is_private: bool,&lt;br /&gt;
    pub content: String,&lt;br /&gt;
    pub content_type: ContentType,&lt;br /&gt;
    pub render: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub toc: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub editor_key: String,&lt;br /&gt;
    pub locale_code: String,&lt;br /&gt;
    pub action: PageHistoryAction,&lt;br /&gt;
    pub version_date: Timestamp,&lt;br /&gt;
    pub author_id: i32,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]&lt;br /&gt;
pub enum PageHistoryAction {&lt;br /&gt;
    Initial,&lt;br /&gt;
    Edit,&lt;br /&gt;
    Delete,&lt;br /&gt;
    Move,&lt;br /&gt;
    Restore,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct PageLink {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub path: String,&lt;br /&gt;
    pub locale_code: String,&lt;br /&gt;
    pub page_id: i32,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct Tag {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub tag: String,&lt;br /&gt;
    pub title: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub created_at: Timestamp,&lt;br /&gt;
    pub updated_at: Timestamp,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct PageTag {&lt;br /&gt;
    pub page_id: i32,&lt;br /&gt;
    pub tag_id: i32,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct User {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub email: String,&lt;br /&gt;
    pub name: String,&lt;br /&gt;
    pub provider: String,&lt;br /&gt;
    pub provider_id: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub provider_key: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub password: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub tfa_is_active: bool,&lt;br /&gt;
    pub tfa_secret: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub job_title: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub location: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub picture_url: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub timezone: String,&lt;br /&gt;
    pub date_format: String,&lt;br /&gt;
    pub appearance: String,&lt;br /&gt;
    pub is_system: bool,&lt;br /&gt;
    pub is_active: bool,&lt;br /&gt;
    pub is_verified: bool,&lt;br /&gt;
    pub meta: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub last_login_at: Option&amp;lt;Timestamp&amp;gt;,&lt;br /&gt;
    pub created_at: Timestamp,&lt;br /&gt;
    pub updated_at: Timestamp,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]&lt;br /&gt;
pub enum UserKeyKind {&lt;br /&gt;
    Validation,&lt;br /&gt;
    ResetPwd,&lt;br /&gt;
    ChangeEmail,&lt;br /&gt;
    Api,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct UserKey {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub kind: UserKeyKind,&lt;br /&gt;
    pub token: String,&lt;br /&gt;
    pub user_id: i32,&lt;br /&gt;
    pub expiration: Timestamp,&lt;br /&gt;
    pub created_at: Timestamp,&lt;br /&gt;
    pub updated_at: Timestamp,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct Group {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub name: String,&lt;br /&gt;
    pub is_system: bool,&lt;br /&gt;
    pub permissions: Vec&amp;lt;Permission&amp;gt;,&lt;br /&gt;
    pub page_rules: Vec&amp;lt;PageRule&amp;gt;,&lt;br /&gt;
    pub created_at: Timestamp,&lt;br /&gt;
    pub updated_at: Timestamp,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct UserGroup {&lt;br /&gt;
    pub user_id: i32,&lt;br /&gt;
    pub group_id: i32,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]&lt;br /&gt;
pub enum Permission {&lt;br /&gt;
    ManageSystem,&lt;br /&gt;
    ManageGroups,&lt;br /&gt;
    ManageNavigation,&lt;br /&gt;
    ManageTheme,&lt;br /&gt;
    ManageApi,&lt;br /&gt;
    ManageUsers,&lt;br /&gt;
    ManagePages,&lt;br /&gt;
    ReadPages,&lt;br /&gt;
    ReadAssets,&lt;br /&gt;
    ReadComments,&lt;br /&gt;
    WritePages,&lt;br /&gt;
    WriteAssets,&lt;br /&gt;
    WriteComments,&lt;br /&gt;
    ManageComments,&lt;br /&gt;
    DeletePages,&lt;br /&gt;
    DeleteAssets,&lt;br /&gt;
    DeleteComments,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct PageRule {&lt;br /&gt;
    pub id: String,&lt;br /&gt;
    pub deny: bool,&lt;br /&gt;
    pub roles: Vec&amp;lt;Permission&amp;gt;,&lt;br /&gt;
    pub r#match: PageRuleMatch,&lt;br /&gt;
    pub path: String,&lt;br /&gt;
    pub locales: Vec&amp;lt;String&amp;gt;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]&lt;br /&gt;
pub enum PageRuleMatch {&lt;br /&gt;
    Start,&lt;br /&gt;
    End,&lt;br /&gt;
    Regex,&lt;br /&gt;
    Exact,&lt;br /&gt;
    Tag,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct Comment {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub content: String,&lt;br /&gt;
    pub render: String,&lt;br /&gt;
    pub name: String,&lt;br /&gt;
    pub email: String,&lt;br /&gt;
    pub ip: String,&lt;br /&gt;
    pub page_id: i32,&lt;br /&gt;
    pub author_id: i32,&lt;br /&gt;
    pub created_at: Timestamp,&lt;br /&gt;
    pub updated_at: Timestamp,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct Asset {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub filename: String,&lt;br /&gt;
    pub ext: String,&lt;br /&gt;
    pub kind: AssetKind,&lt;br /&gt;
    pub mime: String,&lt;br /&gt;
    pub file_size: i64,&lt;br /&gt;
    pub metadata: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub folder_id: Option&amp;lt;i32&amp;gt;,&lt;br /&gt;
    pub author_id: i32,&lt;br /&gt;
    pub created_at: Timestamp,&lt;br /&gt;
    pub updated_at: Timestamp,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]&lt;br /&gt;
pub enum AssetKind {&lt;br /&gt;
    Image,&lt;br /&gt;
    Binary,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct AssetFolder {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub slug: String,&lt;br /&gt;
    pub name: String,&lt;br /&gt;
    pub parent_id: Option&amp;lt;i32&amp;gt;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct AssetData {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub data: Vec&amp;lt;u8&amp;gt;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct StorageTarget {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub key: String,&lt;br /&gt;
    pub is_enabled: bool,&lt;br /&gt;
    pub mode: StorageMode,&lt;br /&gt;
    pub config: String,&lt;br /&gt;
    pub state: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub sync_interval: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]&lt;br /&gt;
pub enum StorageMode {&lt;br /&gt;
    Push,&lt;br /&gt;
    Pull,&lt;br /&gt;
    Sync,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct NavigationTree {&lt;br /&gt;
    pub id: String,&lt;br /&gt;
    pub config: Vec&amp;lt;NavigationItem&amp;gt;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct NavigationItem {&lt;br /&gt;
    pub id: String,&lt;br /&gt;
    pub kind: NavigationItemKind,&lt;br /&gt;
    pub label: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub icon: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub target_type: Option&amp;lt;NavigationTargetType&amp;gt;,&lt;br /&gt;
    pub target: Option&amp;lt;String&amp;gt;,&lt;br /&gt;
    pub visibility_rules: Option&amp;lt;Vec&amp;lt;String&amp;gt;&amp;gt;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]&lt;br /&gt;
pub enum NavigationItemKind {&lt;br /&gt;
    Link,&lt;br /&gt;
    Header,&lt;br /&gt;
    Divider,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]&lt;br /&gt;
pub enum NavigationTargetType {&lt;br /&gt;
    Internal,&lt;br /&gt;
    External,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct Locale {&lt;br /&gt;
    pub code: String,&lt;br /&gt;
    pub strings: String,&lt;br /&gt;
    pub is_rtl: bool,&lt;br /&gt;
    pub name: String,&lt;br /&gt;
    pub native_name: String,&lt;br /&gt;
    pub created_at: Timestamp,&lt;br /&gt;
    pub updated_at: Timestamp,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct ApiKey {&lt;br /&gt;
    pub id: i32,&lt;br /&gt;
    pub name: String,&lt;br /&gt;
    pub key: String,&lt;br /&gt;
    pub expiration: Timestamp,&lt;br /&gt;
    pub is_revoked: bool,&lt;br /&gt;
    pub created_at: Timestamp,&lt;br /&gt;
    pub updated_at: Timestamp,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#[derive(Debug, Clone)]&lt;br /&gt;
pub struct Setting {&lt;br /&gt;
    pub key: String,&lt;br /&gt;
    pub value: String,&lt;br /&gt;
    pub updated_at: Timestamp,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Rust]]&lt;br /&gt;
[[Category:Wiki.js]]&lt;br /&gt;
[[Category:Datenmodell]]&lt;/div&gt;</summary>
		<author><name>Thorsten</name></author>
	</entry>
</feed>