fix(medien): geleerte Felder speichern, Dateien und Filter aufräumen - #296
Merged
Conversation
Das Bearbeiten-Formular meldete "Änderungen gespeichert", ohne ein geleertes Feld zu leeren. Der Dialog schickte leere Eingaben als `undefined`, und das heißt für Prisma "Spalte nicht anfassen" — der alte Wert blieb stehen. Die Metadatenfelder sind jetzt `.nullable()`, das Formular schickt `null`, und nur ein weggelassenes Feld bleibt `undefined`. Dazu mehrere Fehler, die an derselben Stelle lagen: - Der Name war dauerhaft schreibgeschützt und fehlte in `update`. Ein Tippfehler beim Hochladen ließ sich nicht mehr korrigieren. - Der Statusfilter lief im Browser über die geladene Seite. "Ausstehend" konnte leer bleiben, obwohl auf Seite 3 welche lagen. Er ist jetzt Abfrageparameter, ebenso Sortierung, Ordner und die neuen "fehlt noch"-Filter. - `delete` entfernte nur den Datensatz, nicht die Datei. Verwaiste Uploads sammelten sich unbegrenzt an; `replaceFile` räumte längst auf. - `getStatistics` zählte Profilbilder mit, die die Übersicht ausblendet. "Gesamt" nannte damit eine Zahl, die sich durch Blättern nie erreichen ließ. - `tags` ist eine JSON-Spalte, wurde aber als `z.string()` geschrieben und nur gelesen, wenn zufällig ein String darin stand. Importierte Arrays erschienen leer und wurden beim Speichern überschrieben. Jetzt durchgängig ein Array. Neu ist `media.getUsage`: es listet auf, wo ein Medium verwendet wird, und markiert die beiden Beziehungen mit `onDelete: Cascade` — Bläserheft und Startseiten-Karussell verschwinden mit dem Bild. Der Löschdialog nutzt das im folgenden Schritt. Die Bedingungen in `getAll` liegen jetzt einzeln im `AND`-Array. Sichtbarkeit, Suche und Filter brauchen jedes ein eigenes `OR`; auf einem gemeinsamen Objekt überschrieb der letzte Schreibzugriff die vorherigen.
This was referenced Sep 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Erster von drei Teilen zur Medienverwaltung. Dieser hier ist reine Fehlerbehebung und für sich genommen einsatzfähig.
Der gemeldete Fehler
Das Bearbeiten-Formular meldete grün „Änderungen gespeichert“, ohne ein geleertes Feld zu leeren. Nachgestellt an
AG5Y9644.JPG: Fotograf:in geleert, gespeichert, Dialog neu geöffnet — „Ralf Stallbaum“ stand wieder da.Ursache waren zwei Stellen zusammen. Der Dialog schickte leere Eingaben als
undefined, und die Eingabe im Router war.optional()ohne.nullable(). Für Prisma heißtundefinedaber „diese Spalte nicht anfassen“ — ein geleertes und ein unberührtes Feld waren nicht unterscheidbar.Die sechs Metadatenfelder sind jetzt
.optional().nullable()(dasselbe Muster wie inbezirke.tsundcourses.ts), das Formular schicktnull. Geprüft: Feld bleibt leer, und der unberührte Alt-Text daneben bleibt unverändert —undefinedheißt also weiterhin korrekt „nicht anfassen“.Was hier sonst noch drin steckt
updatedeleteentfernte nur den Datensatz, nicht die DateireplaceFileräumt längst auf)getStatisticszählte Profilbilder mit, die die Übersicht ausblendettagsistJson?, wurde aber alsz.string()geschriebenSortierung, Ordner- und die neuen „fehlt noch“-Filter laufen ebenfalls serverseitig. Geprüft: „Ohne Urheberangabe“ liefert 53 von 57 über den ganzen Bestand, nicht über eine Seite.
Die Bedingungen in
getAllliegen jetzt einzeln imAND-Array. Sichtbarkeitsregel, Suche und Filter brauchen jede ein eigenesOR; auf einem gemeinsamenwhere-Objekt überschrieb der letzte Schreibzugriff die vorherigen.Neu:
media.getUsageListet auf, wo ein Medium verwendet wird, und markiert die beiden Beziehungen mit
onDelete: Cascade— bei Bläserheft und Startseiten-Karussell verschwindet der ganze Eintrag mit dem Bild. Der Löschdialog wertet das im dritten Teil aus.Prüfung
tscundeslintsauber, 600 Tests grün, im Browser gegen die laufende Instanz nachgestellt. Der Testwert in der Entwicklungsdatenbank wurde wiederhergestellt.Reihenfolge
feat/media-download— baut hierauf auffeat/media-overview-rework— baut auf 2 auf und ersetzt die Oberflächenänderungen hier