# Roadmap 2022 / 2023

## unsortierte Sammlung von Themen

1. backend access layer

   - Refactoring der Resolver-Klassen
   - Daten-Zugriffschicht zur Kapselung der DB-Schicht
   - Transfer-Datenmodel zum Austausch von Daten zwischen den Schichten
   - technisches Transaktion-Handling und Lösung von Deadlocks
   - Konzept in Arbeit
2. capturing alias

   - Konzept fertig
   - Änderungen in Register- und Login-Prozess
3. Passwort-Verschlüsselung: Refactoring

   - Konzept aufteilen in Ausbaustufen
   - Altlasten entsorgen
   - Versionierung/Typisierung der verwendeten Verschlüsselungslogik notwendig
   - DB-Migration auf encryptionType=EMAIL
4. Passwort-Verschlüsselung: Login mit impliziter Neuverschlüsselung

   * Logik der Passwortverschlüsselung auf GradidoID einführen
   * bei Login mit encryptionType=Email oder OneTime triggern einer Neuverschlüsselung per GradidoID
   * Unabhängigkeit von Email erzeugen
   * Änderung der User-Email ermöglichen
5. Contribution-Categories

   - Bewertung und Kategorisierung von Schöpfungen: Was hat Wer für Wen geleistet?
   - Regeln auf Categories ermöglichen
   - Konzept in Arbeit
6. Statistics / Analysen
7. Contribution-Link editieren
8. User-Tagging

   - Eine UserTag dient zur einfachen Gruppierung gleichgesinnter oder örtlich gebundener User
   - Motivation des User-Taggings: bilden kleinerer lokaler User-Gruppen und jeder kennt jeden
   - Einführung einer UserTaggings-Tabelle und eine User-UserTaggings-Zuordnungs-Tabelle
   - Ein Moderator kann im AdminInterface die Liste der UserTags pflegen

     - neues TAG anlegen
     - vorhandenes TAG umbenennen
     - ein TAG löschen, sofern kein User mehr diesem TAG zugeordnet ist
   - Will ein User ein TAG zugeordnet werden, so kann dies nur ein Moderator im AdminInterface tun
   - Ein Moderator kann im AdminInterface

     - ein TAG einem User zuordnen
     - ein TAG von einem User entfernen
   - wichtige UseCases:

     - Zuordnung eines Users zu einem TAG durch einen Moderator
     - TAG spezifische Schöpfung
       - User muss für seinen Beitrag ein TAG auswählen können, dem er zuvor zugeordnet wurde
       - TAG-Moderator kann den Beitrag bestätigen, weil er den User mit dem TAG (persönlich) kennt
9. User-Beziehungen und Favoritenverwaltung

   - User-User-Zuordnung
     - aus Tx-Liste die aktuellen Favoriten ermitteln
   - Verwaltung von Zuordnungen
     - Auswahl
     - Berechtigungen
     - Gruppierung
     - Community-übergreifend
     - User-Beziehungen
10. technische Ablösung der Email und Ersatz durch GradidoID

    * APIs / Links / etc mit Email anpassen, so dass keine Email mehr verwendet wird
    * Email soll aber im Aussen für User optional noch verwendbar bleiben
    * Intern erfolgt aber auf jedenfall ein Mapping auf GradidoID egal ob per Email oder Alias angefragt wird
11. Zeitzone

    - User sieht immer seine Locale-Zeit und Monate
    - Admin sieht immer UTC-Zeit und Monate
    - wichtiges Kriterium für Schöpfung ist das TargetDate ( heißt in DB contributionDate)
    - Berechnung der möglichen Schöpfungen muss somit auf dem TargetDate der Schöpfung ermittelt werden! **(Ist-Zustand)**
    - Kann es vorkommen, dass das TargetDate der Contribution vor dem CreationDate der TX liegt? Ja
    - Beispiel: User in Tokyo Locale mit Offest +09:00

      - aktiviert Contribution-Link mit Locale: 01.11.2022 07:00:00+09:00 = TargetDate = Zieldatum der Schöpfung
      - die Contribution wird gespeichert mit

        - creationDate=31.10.2022 22:00:00 UTC
        - contributionDate=01.11.2022 07:00:00
        - (neu) clientRequestTime=01.11.2022 07:00:00+09:00
      - durch automatische Bestätigung und sofortiger Transaktion wird die TX gespeichert mit

        - creationDate=31.10.2022 22:00:00 UTC
    - **zwingende Prüfung aller Requeste: auf -12h <= ClientRequestTime <= +12h**

      - Prüfung auf Sommerzeiten und exotische Länder beachten
      - 
    - zur Analyse und Problemverfolgung von Contributions immer original ClientRequestTime mit Offset in DB speichern
    - Beispiel für täglichen Contribution-Link während des Monats:

      - 17.10.2022 22:00 +09:00 => 17.10.2022	UTC: 17.10.2022 13:00 UTC => 17.10.2022
      - 18.10.2022 02:00 +09:00 => 18.10.2022	UTC: 17.10.2022 17:00 UTC => 17.10.2022 !!!! darf nicht weil gleicher Tag !!!
    - Beispiel für täglichen Contribution-Link am Monatswechsel:

      - 31.10.2022 22:00 +09:00 => 31.10.2022	UTC: 31.10.2022 15:00 UTC => 31.10.2022
      - 01.11.2022 07:00 +09:00 => 01.11.2022	UTC: 31.10.2022 22:00 UTC => 31.10.2022 !!!! darf nicht weil gleicher Tag !!!
12. Layout
13. Lastschriften-Link
14. Registrierung mit Redeem-Link:

    * bei inaktivem Konto, sprich bisher noch keine Email-Bestätigung, keine Buchung möglich
    * somit speichern des Links zusammen mit OptIn-Code
    * damit kann in einem Resend der ConfirmationEmail der Link auch korrekt wieder mitgeliefert werden
15. Manuelle User-Registrierung für Admin

    - soll am 10.12.2022 für den Tag bei den Galliern produktiv sein
16. Dezentralisierung / Federation

    - Hyperswarm

      - funktioniert schon im Prototyp
      - alle Instanzen finden sich gegenseitig
      - ToDo:
        - Infos aus HyperSwarm in der Community speichern
        - Prüfung ob neue mir noch unbekannte Community hinzugekommen ist?
        - Triggern der Authentifizierungs- und Autorisierungs-Handshake für neue Community
    - Authentifizierungs- und Autorisierungs-Handshake
    - Inter-Community-Communication
    - **ToDos**:

      - DB-Migration für Community-Tabelle, User-Community-Zuordnungen, UserRights-Tabelle
      - Berechtigungen für Communities
      - Register- und Login-Prozess für Community-Anmeldung anpassen

        - Auswahl-Box einer Community
        - createUser mit Zuordnung zur ausgewählten Community
      - Schöpfungsprozess auf angemeldete Community anpassen

        - "Beitrag einreichen"-Dialog auf angemeldete Community anpassen
        - "meine Beiträge zum Gemeinwohl" mit Filter auf angemeldete Community anpassen
        - "Gemeinschaft"-Dialog auf angemeldete Community anpassen
      - "Mein Profil"-Dialog auf Communities anpassen

        - Umzug-Service in andere Community
        - Löschen der Mitgliedschaft zu angemeldeter Community (Deaktivierung der Zuordnung "User-Community")
      - "Senden"-Dialog mit Community-Auswahl
      - "Transaktion"-Dialog mit Filter auf angemeldeter Community
      - AdminInterface auf angemeldete Community anpassen

        - "Übersicht"-Dialog mit Filter auf angemeldete Community
        - "Nutzersuche"-Dialog mit Filter auf angemeldete Community
        - "Mehrfachschöpfung"-Dialog mit Filter auf angemeldete Comunity
      - Subject/Texte/Footer/... der Email-Benachrichtigungen auf angemeldete Community anpassen

## Priorisierung

1. Contribution-Link editieren (vlt schon im vorherigen Bugfix-Release Ende Okt. 2022 fertig)
2. Passwort-Verschlüsselung: Refactoring **Konzeption fertig!!**!
3. Manuelle User-Registrierung für Admin (10.12.2022)	**Konzeption ongoing!!**!
4. Passwort-Verschlüsselung: implizite Login-Neuverschlüsselung **Konzeption fertig!!**!
5. Layout
6. Zeitzone
7. Dezentralisierung / Federation
8. capturing alias **Konzeption fertig!!**!
9. Registrierung mit Redeem-Link: bei inaktivem Konto keine Buchung möglich
10. Subgruppierung / User-Tagging (einfacher Ansatz)
11. backend access layer
12. technische Ablösung der Email und Ersatz durch GradidoID
13. User-Beziehungen und Favoritenverwaltung
14. Lastschriften-Link
15. Contribution-Categories
16. Statistics / Analysen
