-- =====================================
-- Initiale Dokumente
-- =====================================

-- API Dokumentation
INSERT INTO documents (title, author, content) 
VALUES (
    'API Documentation - Document Handler',
    'DocTopus System',
    '= Document Handler API Dokumentation
:toc:
:toclevels: 3

== Übersicht

Der Document Handler verwaltet alle CRUD-Operationen für Dokumente in DocTopus.
Der Handler bietet eine RESTful API mit vier Hauptfunktionen.

== Funktionen

=== 1. DocumentsHandler
**Typ:** Router-Funktion +
**HTTP-Methoden:** GET, POST, PUT, DELETE

Die Hauptfunktion, die alle eingehenden Anfragen verteilt.
Analysiert die Request-URL und leitet an die entsprechende Funktion weiter.

[cols="1,1,1,3"]
|===
|Methode|URL-Pattern|Datenbank-Op|Beschreibung

|GET
|`/documents`
|SELECT
|Listet alle Dokumente auf

|POST
|`/documents`
|INSERT
|Erstellt ein neues Dokument

|PUT
|`/documents/{id}`
|UPDATE
|Aktualisiert ein bestehendes Dokument

|DELETE
|`/documents/{id}`
|DELETE
|Löscht ein Dokument
|===

=== 2. listDocuments
**Typ:** GET Handler +
**Authentifizierung:** Erforderlich +
**Response:** JSON Array von Documents

Ruft alle Dokumente aus der Datenbank ab, sortiert nach neuester Änderung.

*SQL Query:*
[source,sql]
----
SELECT id, title, content, COALESCE(author,''''), created_at, updated_at
FROM documents
ORDER BY updated_at DESC
----

*Response-Format:*
[source,json]
----
[
  {
    "id": 1,
    "title": "Projektplan",
    "content": "...",
    "author": "Max Mustermann",
    "created_at": "2026-03-30T10:00:00Z",
    "updated_at": "2026-03-30T15:30:00Z"
  }
]
----

=== 3. createDocument
**Typ:** POST Handler +
**Authentifizierung:** Erforderlich +
**Request:** JSON mit title, content, author +
**Response:** Created Document mit ID

Erstellt ein neues Dokument und gibt es mit der neu zugewiesenen ID zurück.

*Request-Format:*
[source,json]
----
{
  "title": "Neues Dokument",
  "content": "Dokumentinhalt hier...",
  "author": "John Doe"
}
----

*Validierung:*
- `title` ist erforderlich (nicht leer)
- `content` ist erforderlich (nicht leer)
- `author` ist optional

*Response (HTTP 201):*
[source,json]
----
{
  "id": 5,
  "title": "Neues Dokument",
  "content": "Dokumentinhalt hier...",
  "author": "John Doe",
  "created_at": "2026-03-30T16:00:00Z",
  "updated_at": "2026-03-30T16:00:00Z"
}
----

=== 4. updateDocument
**Typ:** PUT Handler +
**Authentifizierung:** Erforderlich +
**Parameter:** Document ID +
**Request:** JSON mit title, content +
**Response:** Updated Document

Aktualisiert ein bestehendes Dokument und speichert die neue `updated_at` Zeit.

*Request-Format:*
[source,json]
----
{
  "title": "Aktualisierter Titel",
  "content": "Aktualisierter Inhalt..."
}
----

*Validierung:*
- `title` ist erforderlich
- `content` ist erforderlich
- Document mit der angegebenen ID muss existieren

*Fehlerbehandlung:*
- `404 Not Found`: Document mit der ID existiert nicht
- `400 Bad Request`: Ungültige Eingabe

=== 5. deleteDocument
**Typ:** DELETE Handler +
**Authentifizierung:** Erforderlich +
**Parameter:** Document ID +
**Response:** HTTP 204 No Content

Löscht ein Dokument aus der Datenbank.

*Fehlerbehandlung:*
- `404 Not Found`: Document mit der ID existiert nicht
- `500 Internal Server Error`: Datenbankfehler

== Datenbankschema

[source,sql]
----
CREATE TABLE documents (
    id SERIAL PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    author VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
----

== Fehlerbehandlung

[cols="2,3"]
|===
|Fehler|Bedeutung

|400 Bad Request
|Ungültige JSON oder fehlende erforderliche Felder

|404 Not Found
|Document mit der angegebenen ID existiert nicht

|500 Internal Server Error
|Datenbankfehler oder unerwarteter Fehler

|405 Method Not Allowed
|HTTP-Methode wird für diese Route nicht unterstützt
|===

== Authentifizierung

Alle Document Handler Endpoints erfordern ein gültiges JWT Token.
Dieses wird über den `Authorization: Bearer <token>` Header übermittelt.

== Hinweise

- Alle Timestamps sind in UTC gespeichert
- `updated_at` wird automatisch auf die aktuelle Zeit gesetzt beim Update
- Löschen ist ein permanenter Vorgang mit normaler Datenbankbereinigung
');

-- Deployment Checklist
INSERT INTO documents (title, author, content)
VALUES (
    'Deployment Checklist',
    'DocTopus Team',
    '= Deployment Checklist
:toc:

== Pre-Deployment

- [ ] Alle Tests bestanden
- [ ] Code-Review abgeschlossen
- [ ] Dependencies aktualisiert
- [ ] Environment-Variablen konfiguriert
- [ ] Database Backups durchgeführt

== Deployment Steps

. Docker Container bauen
. Database Migrations ausführen
. Service starten
. Health-Check durchführen
. Monitoring aktivieren

== Post-Deployment

- [ ] Logs überprüfen
- [ ] API Tests durchführen
- [ ] User-Funktionalität verifizieren
- [ ] Performance-Metriken prüfen
');

-- Willkommen bei DocTopus
INSERT INTO documents (title, author, content)
VALUES (
    'Willkommen bei DocTopus',
    'DocTopus Team',
    '= Willkommen bei DocTopus
:toc:

== Was ist DocTopus?

DocTopus ist eine sichere Dokumentenverwaltungsanwendung mit:

- **Benutzerauthentifizierung** via JWT
- **Dokumentverwaltung** (CRUD-Operationen)
- **Echtzeit-Synchronisation**
- **RESTful API**

== Erste Schritte

. Melden Sie sich an
. Erstellen Sie eine neues Dokument
. Bearbeiten Sie den Inhalt
. Speichern Sie Ihre Änderungen

== Features

=== Dokumentenverwaltung
- Erstellen, Bearbeiten, Löschen von Dokumenten
- Automatische Zeitstempel
- Autoren-Tracking

=== Sicherheit
- JWT-basierte Authentifizierung
- Benutzer-Sessions
- Verschlüsselte Passwörter

=== Benutzerinterface
- Responsive Design
- Moderne Editor-Oberfläche
- Einfache Dokumentenliste

Viel Erfolg mit DocTopus!
');
