docs(feature-plan): Replace WordPress with DokuWiki integration

- Replaced open_workshop_api (WordPress REST API) with open_workshop_dokuwiki
- DokuWiki chosen for equipment documentation:
  - File-based, no separate database needed
  - Built-in versioning and history
  - Wiki syntax perfect for technical docs
  - Granular ACL (Odoo writable, all readable)
  - XML-RPC API for bidirectional sync

- Planned DokuWiki features:
  - Automatic wiki page per equipment
  - Namespace structure: ausruestung:bereich:maschinenname
  - Template system with equipment data
  - Smart button 'Wiki öffnen' in Equipment form
  - Auto-sync on equipment changes

- WordPress integration now optional:
  - Can be added later for public presentation
  - DokuWiki handles documentation (priority)
  - WordPress for marketing/SEO (future)

- Updated architecture diagram and implementation status
- open_workshop_api moved to 'optional' status
This commit is contained in:
Matthias Lotz 2025-12-13 17:50:51 +01:00
parent 1b203eeb10
commit 92490aeb9c

View File

@ -68,7 +68,8 @@ open_workshop/
├── open_workshop/ # ✅ Alt-Modul (installable=False, Kompatibilität)
├── open_workshop_base/ # ✅ FERTIG Backend, _inherits maintenance.equipment
├── open_workshop_pos/ # ✅ FERTIG POS-Integration (JS, XML, UI)
└── open_workshop_api/ # ⏳ GEPLANT REST API für WordPress
├── open_workshop_dokuwiki/ # ⏳ IN ENTWICKLUNG DokuWiki-Integration
└── open_workshop_api/ # 💤 OPTIONAL REST API (zurückgestellt)
```
**Entfernt:** open_workshop_maintenance (verworfen - Funktionalität direkt in open_workshop_base integriert)
@ -140,87 +141,154 @@ Vollständig separiertes POS-Modul mit:
---
# 5. Modul: open_workshop_api ⏳ GEPLANT
# 5. Modul: open_workshop_dokuwiki ⏳ IN ENTWICKLUNG
**Status: NOCH NICHT IMPLEMENTIERT**
**Status: IN ENTWICKLUNG (Branch: feature/dokuwiki-integration)**
Dieses Modul stellt die **REST API** bereit, über die WordPress öffentlich verfügbare Daten abholt.
Dieses Modul integriert **DokuWiki** als Dokumentationssystem für Equipment.
## 5.1 Ziele
- Minimaler externer Zugriff (nur API-Endpunkte)
- JSON-Ausgabe für WordPress
- Keine Odoo-Website erforderlich
- Odoo selbst bleibt **nicht öffentlich erreichbar**
- Automatische Wiki-Seiten für jedes Equipment
- Strukturierte Dokumentation mit Templates
- Bidirektionale Synchronisation (Odoo → DokuWiki)
- Versionierung durch DokuWiki eingebaut
- ACL: Odoo-Namespace nur für Odoo beschreibbar, für alle lesbar
## 5.2 API-Endpunkte
## 5.2 Architektur
Pflicht:
```
Odoo (maintenance.equipment)
XML-RPC Client
DokuWiki API (wiki.putPage)
ausruestung:bereich:maschinenname
```
## 5.3 DokuWiki-Namespace-Struktur
```
ausruestung:holzwerkstatt:formatkreissaege
ausruestung:lasercutter:epilog_fusion_m2
ausruestung:elektronik:loetstation_1
```
**Namespace-Regeln:**
- Hauptnamespace: `ausruestung:`
- Zweite Ebene: Bereich (ows_area_id)
- Dritte Ebene: Equipment-Name (normalisiert, lowercase, ohne Sonderzeichen)
## 5.4 Template-System
Automatisch generierte Seiten mit folgender Struktur:
```wiki
====== [Equipment Name] ======
===== Grunddaten =====
* **Seriennummer:** [serial_no]
* **Bereich:** [area_id.name]
* **Kategorie:** [category] (🟢🟡🔴)
* **Standort:** [location]
* **Hersteller:** [partner_id.name]
===== Sicherheit =====
* **Einweisungspflichtig:** [Ja/Nein basierend auf category]
* **Nutzungsprodukte:** [product_ids]
* **Einweisungsprodukte:** [training_ids]
===== Bedienung =====
[Platzhalter für Anleitung - manuell editierbar]
===== Wartung =====
* **Nächste Wartung:** [next_action_date]
* **Wartungshistorie:** Link zu Maintenance Requests
===== Notizen =====
[note aus equipment.note oder editierbar]
```
## 5.5 Technische Umsetzung
**Python-Bibliothek:**
- `dokuwiki` (Python XML-RPC Client für DokuWiki)
- Installation: `pip install dokuwiki`
**API-Methoden:**
```python
# DokuWiki XML-RPC API
wiki.putPage(page_id, content, summary, minor) # Seite erstellen/aktualisieren
wiki.getPage(page_id) # Seite lesen
wiki.getAllPages() # Alle Seiten auflisten
```
**Odoo-Integration:**
- Neues Model: `ows.dokuwiki.config` (DokuWiki-URL, Credentials)
- Methode auf `maintenance.equipment`: `sync_to_dokuwiki()`
- Automated Action: Bei Equipment-Änderung → Wiki aktualisieren
- Smart Button: "Wiki öffnen" → Link zur DokuWiki-Seite
## 5.6 Sicherheitsmechanismen
**DokuWiki ACL:**
```
ausruestung:* @ALL 1 # Lesezugriff für alle
ausruestung:* @odoo 8 # Schreibzugriff nur für Odoo-User
```
**Odoo-Seite:**
- Credentials in System-Parameter oder ir.config_parameter
- Verschlüsselte Speicherung des API-Passworts
- Logging aller Wiki-Änderungen
## 5.7 Vorteile DokuWiki
**Leichtgewichtig** File-based, keine separate Datenbank
**Versionierung** Eingebautes History-System
**Wiki-Syntax** Perfekt für strukturierte Dokumentation
**ACL-System** Granulare Berechtigungen
**Suchfunktion** Volltext-Suche eingebaut
**Plugins** Erweiterbar (Markdown, Galleries, etc.)
**Open Source** Keine Lizenzkosten
---
# 6. Modul: open_workshop_api ⏳ GEPLANT
**Status: ZURÜCKGESTELLT (DokuWiki hat Priorität)**
REST API für externe Systeme (falls später WordPress/App-Integration gewünscht).
## 6.1 Potenzielle Endpunkte
```
GET /api/v1/machines
GET /api/v1/machine/<id>
```
Empfohlen:
```
GET /api/v1/areas
GET /api/v1/files/<attachment_id>
GET /api/v1/events (später für Kurse)
```
## 5.3 JSON Beispiel
**Hinweis:** Mit DokuWiki kann die öffentliche Dokumentation direkt über das Wiki erfolgen.
Eine separate REST API ist optional und wird nur bei Bedarf implementiert.
```json
{
"id": 12,
"name": "Formatkreissäge",
"status": "available",
"area": "Holzwerkstatt",
"image_url": "https://odoo.example.org/api/v1/file/29",
"manual_url": "https://odoo.example.org/api/v1/file/55",
"training_required": true
}
```
## 6.1 Warum DokuWiki statt WordPress?
## 5.4 Sicherheitsmechanismen
- **Einfacher**: Keine separate Datenbank, file-based
- **Wiki-Syntax**: Perfekt für technische Dokumentation
- **Versionierung**: Eingebautes History-System
- **ACL**: Feinere Berechtigungskontrolle
- **Leichtgewichtig**: Weniger Overhead als WordPress
- **Integration**: XML-RPC API für bidirektionale Sync
- CORS nur für WordPress-Domain erlauben
- Optionaler Token im Header (`Authorization: Bearer <token>`)
- Kein Zugriff auf `/web`, `/api/web`, `/pos`
- Rate Limiting via Reverse Proxy
## 6.2 Zukunft: WordPress optional
---
Falls später gewünscht, kann WordPress **zusätzlich** die öffentliche Maschinenliste anzeigen:
- DokuWiki für **Dokumentation** (intern/extern lesbar)
- WordPress für **Präsentation** (extern mit Bildern, SEO)
- Beide Systeme greifen auf Odoo-Daten zu
# 6. WordPress Integration ⏳ GEPLANT
**Status: VORBEREITET (API noch nicht implementiert)**
WordPress bleibt die öffentliche Website.
## 6.1 Warum?
- Sehr hohe Performance (CDN, Caching)
- SEO-optimiert
- Keine Belastung deiner Internetleitung
- Keine Sicherheitsrisiken im internen Odoo
- Keine Lizenzkosten
## 6.2 WordPress Plugin (bereitgestellt)
Das Plugin:
- Ruft Odoo-API ab
- Rendert Maschinenliste via Shortcode
- Konsumiert JSON-Daten
- Unterstützt Token-Auth
Beispiel:
```
[openworkshop_machines]
```
Aktuell hat DokuWiki-Integration **Priorität**.
---
@ -229,46 +297,58 @@ Beispiel:
```
Internet
|
WordPress (Frontend, CDN)
DokuWiki (Dokumentation)
WordPress (optional: Präsentation)
|
fetch JSON via REST API
XML-RPC / REST API
|
----------------------------
| API Gateway (open_workshop_api)
| Exposed only: /api/v1/*
| Odoo Backend (LAN/VPN)
| open_workshop_dokuwiki
| maintenance.equipment
----------------------------
|
Odoo Backend (LAN/VPN)
Maschinen, POS, Benutzer, Einweisungen
POS, Benutzer, Einweisungen
```
**Kein direkter Zugriff auf Odoo-Weboberfläche!**
**Fokus:** Equipment-Dokumentation über DokuWiki, WordPress später optional.
---
# 8. Sicherheit
- Reverse Proxy (Traefik/Nginx) muss alle Odoo-Backoffice-URLS sperren
- Nur `/api/v1/*` darf öffentlich sein
**DokuWiki ACL:**
- Namespace `ausruestung:*` lesbar für alle (@ALL = 1)
- Namespace `ausruestung:*` schreibbar nur für Odoo (@odoo = 8)
- Manuelle Edits durch Admins möglich
**Odoo:**
- DokuWiki-Credentials in ir.config_parameter
- XML-RPC über HTTPS
- Logging aller Wiki-Operationen
- Backup-System für Wiki-Dateien
**Optional (REST API):**
- Reverse Proxy sperrt alle Odoo-URLs außer `/api/v1/*`
- HTTPS erzwingen
- Rate-Limit + Firewall-Regeln
- Token-Authentifizierung optional zusätzlich einsetzbar
- Rate-Limit + Firewall
- Token-Auth
---
# 9. Vorteile dieser Architektur
**WordPress bleibt ultraschnell** (1000 Besucher/Tag problemlos)
**DokuWiki für Dokumentation** Wiki-Syntax perfekt für Anleitungen
**Versionierung eingebaut** History für alle Änderungen
**Odoo bleibt sicher** hinter Firewall
**Keine Benutzerkosten** → alle Ehrenamtlichen können intern mitarbeiten
**Keine Benutzerkosten** alle Ehrenamtlichen können intern mitarbeiten
**Modular, wartbar, zukunftssicher**
**API erlaubt feine Steuerung**, welche Daten öffentlich sind
**Keine Last auf DSL-Leitung** (WordPress hostet extern)
**Maintenance-Integration** ohne Extra-Modul direkt in Base
**Bidirektionale Sync** Odoo aktualisiert Wiki automatisch
**Öffentlich lesbar** Anleitungen für alle verfügbar
**WordPress optional** Kann später für Marketing/SEO ergänzt werden
---
# 10. Implementierungsstand (08.12.2025)
# 10. Implementierungsstand (13.12.2025)
| Schritt | Status | Details |
|---------|--------|---------|
@ -276,45 +356,55 @@ Beispiel:
| 2. open_workshop_pos | ✅ **FERTIG** | POS-Integration komplett |
| 3. ~~open_workshop_maintenance~~ | ❌ **VERWORFEN** | Direkt in Base integriert |
| 4. Maintenance Integration | ✅ **FERTIG** | _inherits Pattern implementiert |
| 5. Migration Workflow | ✅ **FERTIG** | SQL + Python, CI/CD integriert |
| 6. open_workshop_api | ⏳ **GEPLANT** | REST API für WordPress |
| 7. WordPress Plugin | ⏳ **GEPLANT** | Frontend-Integration |
| 5. Equipment-View Integration | ✅ **FERTIG** | Related fields, Menu-Migration |
| 6. Migration Workflow | ✅ **FERTIG** | SQL + Python, CI/CD integriert |
| 7. open_workshop_dokuwiki | ⏳ **IN ENTWICKLUNG** | Branch: feature/dokuwiki-integration |
| 8. open_workshop_api | 💤 **OPTIONAL** | Zurückgestellt, bei Bedarf |
---
# 11. Nächste Schritte
1. **open_workshop_api** entwickeln
- REST Controller implementieren
- JSON-Serializer für machines/areas
- CORS und Security konfigurieren
- Token-Auth optional hinzufügen
1. **open_workshop_dokuwiki** entwickeln
- DokuWiki XML-RPC Client implementieren
- Template-System für Equipment-Seiten
- Sync-Mechanismus (Odoo → Wiki)
- Smart Button "Wiki öffnen"
- ACL-Konfiguration dokumentieren
2. **WordPress Plugin** anpassen
- API-Endpunkte konfigurieren
- Shortcode-Rendering
- Caching implementieren
2. **DokuWiki aufsetzen**
- Installation auf Server
- Namespace `ausruestung:` anlegen
- ACL konfigurieren (@odoo Gruppe)
- XML-RPC API aktivieren
3. **Testing & Deployment**
- API-Tests schreiben
- Reverse Proxy konfigurieren
- Performance-Tests
- Go-Live vorbereiten
3. **Testing**
- Equipment-Seiten automatisch generieren
- Sync bei Änderungen testen
- ACL-Rechte validieren
- Performance testen
4. **Optional: WordPress Plugin**
- Falls öffentliche Präsentation gewünscht
- REST API dann implementieren
- Caching-Layer hinzufügen
---
# 12. Endfazit
Diese Architektur hat sich bewährt:
Diese Architektur vereint das Beste aus beiden Welten:
- ✅ **Technisch korrekt** _inherits Pattern statt separatem Modul
- ✅ **Performant** Maintenance.equipment als Single Source of Truth
- ✅ **Sicher** API-Layer trennt intern/extern
- ✅ **Kostenoptimiert** Keine Odoo.sh Lizenzen nötig
- ✅ **Dokumentiert** DokuWiki für strukturierte Anleitungen
- ✅ **Versioniert** History-System eingebaut
- ✅ **Öffentlich zugänglich** Wiki lesbar für alle
- ✅ **Kostenoptimiert** Keine zusätzlichen Lizenzen
- ✅ **Langfristig erweiterbar** Modularer Aufbau
- ✅ **Produktiv im Einsatz** Migration erfolgreich abgeschlossen
Die API ist **zentrales Zukunftsmodul** für die WordPress-Integration.
**DokuWiki-Integration ist der nächste logische Schritt** für bessere Equipment-Dokumentation.
**Letztes Update: 08.12.2025**
**Letztes Update: 13.12.2025**