= Gruppenbildung

Das System bietet eine zentrale Oberfläche zum erstellen und verwalten von Gruppen.
Diese kann von anderen Systemen eingebunden werden, oder von Studierenden direkt aufgerufen werden.
Außerdem wird eine API bereitgestellt für die Nutzung in anderen Systemen.
Man kann Private und Öffentliche Gruppen erstellen.
Private Gruppen kann man nur über einen Beitrittslink beitreten.
Öffentliche Gruppen kann man ohne diesen beitreten.
Man kann nach Öffentlichen Gruppen über eine Suchfunktion suchen.

=== Problem

Die meisten Teilsysteme von MOPS arbeiten mit Gruppierungen von Studenten: Materialien für Lerngruppen/Veranstaltungen, Gruppenportfolios, Gruppenabstimmungen etc.
Jedes System müsste dementsprechend eine Gruppenverwaltung implementieren, was zeitaufwändig ist.

=== Ziele

Die Gruppenverwaltung wird bieten:

* Eine Seite zum erstellen von neuen Gruppen
* Eine Seite zum verwalten von bestehenden Gruppen
* Eine Übersicht über belegte Gruppen
* Detailansicht für Gruppen
* Eine API zum anfragen von Gruppendaten

=== Details

Über *Gruppen*:

* Es gibt private und öffentliche Gruppen
** Privat: Beitritt über Einladungslink
** Öffentlich: Beitritt über Liste
* Jede Gruppe kann einer Veranstalung zugeordnet werden (oder ist eine Veranstaltung)
* Gruppenteilnehmer können Administratorrollen innerhalb der Gruppe einnehmen
* Wenn man eine Gruppe erstellt, wird man dieser direkt hinzugefügt und als Admin registriert (unabhängig davon ob es eine öffentliche oder private Gruppe ist)
* Gruppen verschwinden, wenn sie keine Mitglieder mehr haben

Über *Admin* (interne Rolle):

* Admin's können anderen Gruppenmitgliedern Adminrechte geben
* Admin's können den Beitrittslink für private Guppen erstellen
* Admin's können andere Mitglieder aus der Gruppe entfernen

Über *Mitglied* (interne Rolle):

* Mitglieder haben keine Rechte in der Gruppe.
Sie können nur eigenständig aus der Gruppe austreten.

Für *Organisatoren* (keycloak Rolle):

* Beliebige Gruppen können erstellt/gelöscht/bearbeitet werden
* Teilnehmerlisten können per .csv importiert werden
* Monitoringfunktionen

Für *Studenten* (keycloak Rolle) :

* Übersicht mit allen belegten Gruppen
* Übersicht mit allen öffentlichen Gruppen
* Gruppen können erstellt werden
* Öffentlichen Gruppen kann beigetreten werden
* Gruppen, in welchen der Student Admin ist, können verwaltet werden

Über die *Schnittstelle*:

* Alle Gruppen können angefragt werden, zum Datenabgleich
* Eine Liste von Gruppen eines Studenten kann angefragt werden (evtl.)
* Eine einzelne Gruppe kann per ID angefragt werden (evtl.)
* etc?

=== Verwendung

Die Anwendung kann mit `docker-compse up` im Wurzelverzeichnis gestartet werden, eine API-Doku befindet sich im Dokumentation-Ordner (das swagger-zip).

Der Import über CSV erfolgt nach dem Format `id,givenname,familyname,email`

