Skip to content

GROUPS: Metadaten auf Gruppe #2165

Closed
@mtnstar

Description

@mtnstar

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions