FriendsOfREDAXO / FriendsOfREDAXO/api

Medienkategorie verschieben (`parent_id`) fehlt in der API

Open
#54 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
PHP
Stars
20
Forks
0
Avg merge
49m
Merged PRs (30d)
17

Description

## Was soll erreicht werden
Eine Medienkategorie per API (Bearer + Backend-Session) in eine andere Elternkategorie verschieben können, z. B. `parent_id` optional in `PATCH media/category/{id}`, oder eigene Route `media/category/{id}/move`.

## Problem
`media/category/update` akzeptiert nur `name`. Grund lt. Code-Kommentar: Core kann `parent_id` nicht ändern. Stimmt — geprüft: `rex_media_category_service::editCategory()` liest ausschließlich `$data['name']`. Es gibt dafür in Core weder UI noch Service-Methode.

Weil die API bewusst nichts anbietet, was Core nicht kann, bauen Konsumenten (z. B. unser `mediapool3_demo`-Addon mit Drag&Drop-Kategoriebaum) das jeweils selbst nach: rohes SQL auf `parent_id`, eigener Zyklen-Schutz, eigene Cache-Invalidierung — am API-Addon vorbei, ohne Extension Point.

## Warum
Kategorien per Drag&Drop umstrukturieren ist ein gängiges Bedürfnis für jede Custom-Medienpool-UI. Aktuell baut das jeder Konsument einzeln und uneinheitlich nach, statt eine zentrale, getestete Implementierung zu nutzen.

## Was muss gemacht werden
- Route/Parameter festlegen: `parent_id` in `update` oder eigene `move`-Route (sauberer, da "update = 1:1 Core-Spiegel" von "move = bewusste Erweiterung" trennt)
- Validierung: Zielkategorie existiert, kein Verschieben in eigenen Teilbaum (Zyklen-Schutz)
- Rechteprüfung `checkMediaPerm($user, $categoryId)` für Quelle **und** Ziel
- Direktes Update von `parent_id` (kein Core-Service vorhanden)
- Cache-Invalidierung: alte Elternkategorie, verschobene Kategorie, neue Elternkategorie
- Extension Point feuern (`MEDIA_CATEGORY_UPDATED` oder neu: `MEDIA_CATEGORY_MOVED`)
- Dokumentieren, dass dies bewusst über Core-Parität hinausgeht (Ausnahme von der "nur spiegeln"-Regel)

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reading the existing `media/category/update` route and `rex_media_category_service::editCategory()`, which currently accepts only `name`. Trace `checkMediaPerm($user, $categoryId)`, category caching, and the `MEDIA_CATEGORY_UPDATED` extension point before choosing between an update parameter and a move route. Done means validated source and target permissions, cycle prevention, parent updates, cache invalidation, an extension event, and documentation.

Written by the indexing model from the issue text.

Assessment

Tech stack
php
Domain
api, backend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.