Closed carlobeltrame closed 1 year ago
Ich kann mich mit dem Vorschlag gut anfreunden. Als Diskussionsgrundlage habe ich versucht ein entsprechendes UML zu erstellen.
Gemäss Skizze von @carlobeltrame sollten Features ein-/ausgeschalten werden. Hier bin ich unsicher, ob dies Spalten auf CampTemplate / Camp sind, oder ob es hier weitere Normalisierung bedarf.
Sobald das Lager erstellt ist - und die Initialen ActivityCategories und ContentTypeConfigs anhand deren Templates erstellt wurden, können diese beliebig verändert werden.
Obwohl CantentTypeConfig Einstellungen wie 'Required' und 'Multiple' haben, könnte ich mir vorstellen, dass man diese innerhalb der Activity beliebig verletzen darf - so dass die Benutzer freie Hand haben. Zugleich könnten wir ausweisen, wo diese Einstellungen verletzt werden. Was einem Coach/Experten einen Quercheck erlaubt.
z.B. ActivityCategory "LS" muss ContentType "Block-Ziel" enthalten (Required ContentType) Kontrolle würde fehlende ContentTypes ausweisen.
Anhand von 'Required' könnten wir neue Activities mit einem initialen ContentType-Set erstellen.
Es dürfen auch ActivityContents mit ContentTypes erstellt werden, welche innerhalb von ContentTypeConfig nicht vorhanden sind. Diese gemäss dem Vorschlag von @carlobeltrame "... weiter Inhalte".
Jeweils zur Dokumentation welches Template verwendet wurde. Zeigt auf, welche Templates wie oft verwendet werden. Zeiger sind 'nullable' und ohne Logik.
Für MVP denk ich, stellen wir eine Liste von CampTemplates zur Verfügung. Post-MVP kann ich mir vorstellen, dass man eigne CampTemplates erstellen kann. Dazu gibt es dann wieder bissel was zu diskutieren:
Theoretisch könnte man aus einem Camp eine Vorlage erstellen - und diese so wiederverwenden. Damit die Menge an Vorlagen nicht explodiert, könnten wir Post-MVP auch die Funktion "Camp aus Camp" erstellen. Hierbei würden die Orangen Entitäten kopiert - jedoch nicht die weissen.
ContentType
wird schwieriger durch Templates
=> Markierung als Deprecated & mögliche Migration (lieber als Versionierung)The decided MVP points from this issue have been implemented, resulting in the camp templates and the flexible activity layouts we have today. In the domains of rules + checks as well as exports for different types of camps, we can work on those after the go-live.
Anforderungen
eCamp soll von diversen Gruppen (Pfadi, Jubla, Cevi, Schulklassen ...) für verschiedene Arten von Lagern (J+S- und nicht-J+S-Lager, Kurse, Klassenlager, Musiklager, ...) nutzbar sein. Die Regeln für diese Kombinationen können sich laufend ändern, alte Lager sollen nach Regeländerungen weiterhin unverändert verfügbar bleiben, und jedes Lager bringt eigene Spezialfälle mit sich. Daher möchte ich die Neuentwicklung von eCamp dazu nutzen, eCamp v3 flexibler zu gestalten als eCamp v2.
Einige grobe strukturelle Punkte in denen sich Lager unterscheiden können sind:
Diese Faktoren beeinflussen drei grobe Bereiche, und zwar jeweils für ein ganzes Lager wie auch für einen einzelnen Block:
Da die Lager auch z.B. innerhalb einer einzigen Organisation (PBS) stark variieren können, reicht es vermutlich nicht aus, für jede Organisation eine angepasste Instanz von eCamp v3 zu betreiben. Meiner Meinung nach sollte Konfiguration der Regeln und verfügbaren Features durch die Lagerleitung wo möglich über hart ausprogrammierte Regeln bevorzugt werden. Ausserdem sollte z.B. bei ändernder Formulierung eines PBS-Ausbildungsziels keinerlei Aufwand durch Programmierer nötig sein. Aus diesen Gründen erscheint mir der bisherige Approach mit CampTypes und ausprogrammierten Regeln à la
if is_j_s then
/if is_course then
nicht besonders gut geeignet.tl;dr beschlossene Massnahmen
Ziel: Bis 23. Februar
Vision
Ich möchte der Lagerleitung in den angesprochenen Punkten möglichst grosse Flexibilität mit einfacher Benutzbarkeit bieten. Dazu schlage ich die Herangehensweise "alles erlauben und durch Vorlagen vereinfachen" sowie "intelligent sortierte, suchbare, globale Listen von Vorlagen und ContentTypes" vor (überspitzt formuliert).
Wenn ich eCamp von null auf neu bauen würde, würde ich es mir ungefähr wie folgt vorstellen (grosse Teile davon sind klar Post-MVP-Territorium):
Speicherbare Daten
Kontrollen und Regeln
Exporte
(alle Exporte könnten stattdessen auch als externe Services implementiert werden, die mit der API sprechen)
Vorschlag für MVP
Es ist klar, dass die oben beschriebene Vision grosse Änderungen am bestehenden Modell mit sich bringen würde. Der grösste Teil dieser Änderungen und Details kann auch noch Post-MVP genauer spezifiziert und umgesetzt werden. Fürs MVP schlage ich folgende Änderungen vor, um den Weg für zukünftige Erweiterungen in diese Richtung offen zu halten:
Nachteile dieser Herangehensweise
Vergleich zum bisherigen Approach mit CampTypes (siehe auch https://github.com/ecamp/ecamp3/pull/691#issuecomment-741128463)