Rework ContentSequence(Items) and RadioReport Interaction
Ticket in German as this is too complicated for the clocktime of creation:
Aus dem Gespräch mit Robert soll ein sauberes und klares Konzept für den Umgang mit ContentSequence, ContentSequenceItem und RadioReport geschaffen werden. Festzustellen ist, dass aktuell kein Konzept konsistent angewendet wird. Wir möchten daher einen klaren Zustand schaffen.
@robert: Entgegen unserer Diskussion habe ich im Konzept eine Änderung vollzogen, nämlich die oberste ContentSequence die eh nur ein Element erhalten würde entfernt und direkt die ContentSequenceItem gewählt. Das vorab möglicher Irritation durch Vorwissen vorzubeugen :)
Zielkonzept Datenmodell
- Jedem
RadioReportist ein einzigesContentSequenceItemzugeordnet. DerRadioReportist damit ein abgeschlossener Knotenpunkt, keine Auflistung mehr. - Das zugeorndete
ContentSequenceItemrepräsentiert die zusammengefasste (!) Summe des Inhaltes desRadioReport. Es kann überContentSequenceItem.audiofileeine einzige (originale) Audiodatei zugeordnet werden.- Ist der
RadioReportvom Typpodcastoderfull_show, repräsentiert er eine Episode. Das zugeordneteContentSequenceItemrepräsentiertContentSequenceItem.audiofiledamit den kompletten Mitschnitt der Episode als eine (summierte) Audiodatei. - Ist der
RadioReporteiner der allgemeineren Beitragstypen, repräsentiert diesesContentSequenceItem.audiofileden vollständigen Beitrag, wiederum als eine einzige Audiodatei. - Das Datenmodell ist für beide Fälle weiterhin exakt gleich
- Ist der
- Enthält der
RadioReportzusätzlich einen Ablauf / besteht aus mehreren Teilen, wird eine neueContentSequenceangelegt und alsContentSequenceItem.nested_sequencezugeordnet. In dieseContentSequencefindet die Planung statt - Das alleinstehende
ContentSequenceItem(das neueRadioReport.content_sequence) ist selbst nicht Teil der (optionalen)ContentSequence. - Mehrteilige Beiträge die keine zusammenfassene Audiodatei besitzen, sondern explixit aus einzelnen Audiodateien besteht, haben für
RadioReport.content_sequence_itemkeinContentSequenceItem.audiofilegesetzt. Zurückgegeben wird die Liste der (zur veröffentlichung erlaubten)AudiofilesderContentSequenceItems die sich inRadioReport.content_sequence_item.nested_sequencebefinden.
Beispiel: Beitrag mit nur einer (gesammten) Audiodatei
graph LR;
RadioReport-->ContentSequenceItem;
ContentSequenceItem-->Audiofile;
Beispiel: Beitrag mit mehreren Teilen
graph LR;
RadioReport-->ContentSequenceItem;
ContentSequenceItem-->ContentSequence;
ContentSequenceItem.->Audiofile;
ContentSequence-->ContentSequenceItem1
ContentSequence-->ContentSequenceItem2
ContentSequence-->ContentSequenceItem3
ContentSequenceItem1-->Audiofile1;
ContentSequenceItem2-->Audiofile2;
ContentSequenceItem3-->Audiofile3;
Notwendige Änderungen
Datenmodell
-
Das
RadioReport.content_sequenceFeld wird gelöscht. -
Ein
Audiofilewird im Datenmodell nicht mehr direkt einemRadioReportzugeordnet. Die direkte (reverse) Auflösung vonRadioReport.audiofilesexistiert damit auch nicht mehr. -
Die Auflösung von
RadioReport.audiofileskönnte übergangsweise als Weiterleitung zuRadioReport.content_sequence_item.audiofileumgesetzt werden. Dadurch werden notwenige Codeänderungen vermutlich recht deutlich reduziert und die Datenmodelländerung verborgen.
Migration
- Für jeden
RadioReportist ein neuesContentSequenceItemanzulegen - Wenn ausschließlich eine einzige Audiodatei, aber keine (nach altem Datenmodel)
ContentSequenceexistiert, wird sie direkt diesem neuenContentSequenceItemzugeordnet - Wenn mehrere Audiodateien dem
RadioReportzugeordnet sind, wird eine neueContentSequenceerstellt und dem neuenContentSequenceItemzugeordnet. Anschließend wird für jedesRadioReport.audiofilesein neues ContentSequenceItem angelegt und der Liste hinzugefügt. - Wenn nach altem (!) Datenmodell bereits eine
RadioReport.content_sequencemitContentSequenceItems existiert ist zu prüfen, ob darin einContentSequenceItemexistiert, welchesRadioReport.audiofilesreferenziert. Das betrifft vermutlich alle migrierten Datensätze von v0.12.0 nach v0.13.0.
API & Programmlogik
- Thekno API: Für die Beitragsübersicht
/recordingsgilt- Wenn
RadioReport.content_sequence_item.audiofileexistiert, kann direkt diese Datei direkt (in einer Liste mit nur einem Element? Prüfen.) raus gegeben werden. - Wenn
RadioReport.content_sequence_item.audiofilenicht existiert, werden alle Audiodateien desRadioReport.content_sequence_item
- Wenn
- Internal API: Ändern der ausgelieferten
ContentSequencezuRadioReport.content_sequence_item.nested_sequence -
is_broadcasted_within_gema_range()muss dasRadioReport.content_sequence_itemexplizit mit testen. Subelemente (z.B. bei Mehrteilern) ausRadioReport.content_sequence_item.nested_sequencemüssen einzeln geprüft werden. Sequence
Darstellung
- Produktionsbackend
- Das hochladen einer Audiodatei zu einem Beitrag / Episode bleibt bestehen. Es wird allerdings nicht mehr
RadioReport.audiofilessondernRadioReport.content_sequence_item.audiofilegeändert und das entsprechende Element im Zweifel angelegt. - Ein + Zeichen darf gerne suggerieren, dass weitere Audiodateien reingeladen werden könnte. Beim Klicken sollte ein Hinweis erscheinen, dass mehrteilige Beiträge im unteren Content Sequence Builder in korrekter Reihenfolge angegeben werden sollen.
- Das hochladen einer Audiodatei zu einem Beitrag / Episode bleibt bestehen. Es wird allerdings nicht mehr
- Der Content Sequence Builder darf ausschließlich die
RadioReport.content_sequence_item.nested_sequencebearbeiten. Es gibt aber auch nix anderes mehr.
Offene Fragen
- Was machen wir in der Migration, wenn mehrere Audiodateien + eine vorhandene ContentSequenceList existiert?