apoGM/README.md
2026-05-20 13:49:04 +02:00

86 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
```