diff --git a/docs/DIRECTUS-SCHEMA.md b/docs/DIRECTUS-SCHEMA.md index 05f4c98..4d4a043 100644 --- a/docs/DIRECTUS-SCHEMA.md +++ b/docs/DIRECTUS-SCHEMA.md @@ -193,7 +193,7 @@ Meldungen von Anzeigen. | Collection | Read | Create | Update | Delete | Hinweise | |------------|:----:|:------:|:------:|:------:|----------| -| `listings` | ✓ | ✓ | - | - | Nur `status=published` lesen | +| `listings` | ✓ | ✓ | ✓* | - | Nur `status=published` lesen, *Update nur `views` (via Flow) | | `listings_files` | ✓ | ✓ | - | - | Für Bilder-Upload | | `directus_files` | ✓ | ✓ | - | - | Asset-Upload | | `categories` | ✓ | - | - | - | Nur `status=published` | @@ -204,3 +204,50 @@ Meldungen von Anzeigen. | `messages` | ✓ | ✓ | - | - | Filter via `conversation` ID | | `favorites` | ✓ | ✓ | - | ✓ | Nur eigene | | `reports` | - | ✓ | - | - | Nur erstellen | + +--- + +## Directus Flows + +### Increment Listing Views + +**Zweck:** Sichert ab, dass `views` nur inkrementiert (nicht beliebig gesetzt) werden kann. + +| Schritt | Typ | Beschreibung | +|---------|-----|--------------| +| 1. Trigger | Action (Non-Blocking) | `items.update` auf `listings` | +| 2. Condition | Filter Rule | Prüft ob `views` im Payload vorhanden | +| 3. Operation | Run Script | Prüft ob **nur** `views` geändert wurde | +| 4. Condition | Filter Rule | Prüft Script-Ergebnis | + +**Schritt 2 - Condition Rule (views vorhanden):** +```json +{ + "$trigger": { + "payload": { + "views": { + "_nnull": true + } + } + } +} +``` + +**Schritt 3 - Run Script (nur views im Payload):** +```javascript +module.exports = async function(data) { + const keys = Object.keys(data.$trigger.payload) + return keys.length === 1 && keys[0] === 'views' ? 1 : 0 +} +``` + +**Schritt 4 - Condition Rule (Script-Ergebnis prüfen):** +```json +{ + "$last": { + "_eq": 1 + } +} +``` + +**Hinweis:** Ohne diese Absicherung könnte jeder `views` auf beliebige Werte setzen.