Description
SAC Ticket: HIT-2
Auf Gruppen sollen künftig verschiedene Metadaten hinterlegt und verwaltet werden. Die Attribute unterscheiden sich dabei nach Gruppentyp
Tech-Spec
-
Die Basis für dieses Feature wird im Core umgesetzt (alternativ als eigenes Gem: mounted_attrs)
-
Im Group Model können im Core oder auch in Wagons Attribute definiert werden, diese sind dann für alle Layer/Gruppen verfügbar
-
Auf jedem Gruppen-Typ (STI) können verwendete Attribute definiert werden, diese sind dann nur für die jeweilige STI Gruppe verfügbar
-
Dieses Feature ersetzt die bestehenden GroupSettings, diese werden migriert und GroupSettings wird komplett aus Hitobito entfernt
-
Sämtliche MountedAttrs auf den Gruppen können via dem neuen JSON:API verwaltet werden (CRUD), (sobald /api/groups vorhanden ist)
-
Neues Model/Table: MountedAttribute:
- key: string
- entry_id: int, not_null
- entry_type, not_null
- value: text/string
Beispiel 1: Gruppen-Attribut auf STI Group Class
foundation_year, Gründungsjahr für Sektionen
class Group::Sektion < ::Group
mounted_attr :foundation_year, :integer, null: false, default: 1900
...
end
auf einer Instanz von Group::Sektion steht das Attribut als getter/setter zur Verfügung:
group = Group::Sektion.first
group.foundation_year
group.foundation_year = 1942
group.save!
Dabei wird der Wert in MountedAttr gespeichert/gelesen:
entry_id: 42, , entry_type: 'Group::Sektion', key: foundation_year, value: '1942'
Im Group#edit Form wird das Attribut automatisch auf einem Tab Sektion eingeordnet/angezeigt
Siehe auch: /issues/2116
Beispiel 2: Globales Layer-Attribut
letter_address_position, Position links/rechts Adresse für Briefe
class Group
mounted_attrs_categories: { messages: [:letter_address_position, :bla] }
if layer
mounted_attr :letter_address_position, :text, null: false, enum: [:left, :right], default: :left
end
...
end
Durch mounted_attrs_categories wird im Edit Form ein Tab 'Briefe' erstellt und das Inputfeld für die letter_address_position Einstellung wird dort angezeigt.
Key: letter_address_position
Wird im Gruppen-Form im Tab :messages angezeigt
Dieses Attribut ist nur für Layer verfügbar
Group Settings
Migration der bestehenden GroupSettings
Tech-Spec
- erste Datentypen die implementiert werden sollen: string, encrypted, integer, enum, picture (carrier wave)
- GroupSettings: text message provider(username, password, provider), messages_letter(picture, address_position)
- Für encrypted: https://guides.rubyonrails.org/active_record_encryption.html verwenden
- Anpassung JSON:API zu einem späteren Zeitpunkt (out of scope)
ToDo
- Basis Gem/Code erstellen mit MountedAttribute model, db migration
- Arel Model helper method 'mounted_attr' erstellen
- Datentypen implementieren
- null validierung implementieren
- default wert implementieren
- Migration für GroupSettings erstellen
- https://github.com/ledermann/rails-settings entfernen
- GroupSetting model aus Hitobito entfernen
- EncryptionService entfernen falls dieser nicht sonstwo gebraucht wird
- Tab Gruppe/Einstellungen entfernen, Api-Keys/Kalender Feed nach Info tab verschieben