# Leihverträge – Gutenberg-Museum SvelteKit-Webapp zur Verwaltung von Leihverträgen aus Paperless-ngx, mit Vorbereitung für EasyDB-Integration. ## Schnellstart ```bash # 1. Abhängigkeiten installieren npm install # 2. Umgebungsvariablen setzen cp .env.example .env # .env anpassen: PAPERLESS_BASE_URL, PAPERLESS_API_TOKEN, PAPERLESS_DOCTYPE_NAME # 3. Entwicklungsserver starten npm run dev ``` ## Umgebungsvariablen | Variable | Bedeutung | Beispiel | |---------------------------|----------------------------------------------------|-----------------------------| | `PAPERLESS_BASE_URL` | URL der Paperless-Instanz | `http://192.168.1.10:8000` | | `PAPERLESS_API_TOKEN` | API-Token aus Paperless → Einstellungen → API | `abc123...` | | `PAPERLESS_DOCTYPE_NAME` | Exakter Name des Dokumenttyps in Paperless | `Leihvertrag` | | `EASYDB_BASE_URL` | (Platzhalter) URL der EasyDB-Instanz | `https://easydb.museum.de` | | `EASYDB_API_TOKEN` | (Platzhalter) EasyDB-Token | | | `PORT` | HTTP-Port des Node-Servers | `3000` | | `ORIGIN` | Öffentliche URL (für CSRF-Schutz) | `http://server.museum.de` | ## Deployment auf Ubuntu ```bash chmod +x deploy.sh bash deploy.sh ``` Der Service läuft dann unter `http://server:3000`. **Nginx-Reverse-Proxy empfohlen:** ```nginx server { listen 80; server_name leihvertraege.museum.intern; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` ## Architektur ``` src/ ├── lib/ │ ├── paperless.js – Paperless-ngx API Client (paginiert, gecacht) │ └── easydb.js – EasyDB Client (Platzhalter) └── routes/ ├── +page.server.js – Server-side Load (SSR) ├── +page.svelte – Haupt-UI └── api/paperless/ └── documents/ └── +server.js – REST-Endpunkt für Client-Refresh ``` ## EasyDB-Integration (geplant) Die App ist vorbereitet für: 1. **Verknüpfung**: Paperless Custom Field `easydb_id` → Link zu EasyDB-Objekt 2. **Neuer Leihvorgang**: `src/lib/easydb.js → createLeihvorgang()` implementieren 3. **Objektsuche**: `easydb.js → searchObjects()` für Autocomplete im Formular Datenfluss geplant: ``` Paperless (Leihvertrag-PDF) ──easydb_id──→ EasyDB (Objekt/Leihvorgang) ``` ## Paperless API-Token generieren Paperless → Einstellungen → API-Token → Token anzeigen/generieren ```