From b7a35d167bc463b920cde6dfa2d58972fed5ea36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus-Peter=20H=C3=BCbner?= Date: Tue, 13 Sep 2022 22:33:16 +0200 Subject: [PATCH 1/4] first draft --- .../Zeitzonen_Behandlung.md | 95 ++++++++ .../graphics/ZeitzonenKonstellationen.drawio | 217 ++++++++++++++++++ .../image/ZeitzonenKonstellationen.png | Bin 0 -> 47231 bytes 3 files changed, 312 insertions(+) create mode 100644 docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md create mode 100644 docu/Concepts/BusinessRequirements/graphics/ZeitzonenKonstellationen.drawio create mode 100644 docu/Concepts/BusinessRequirements/image/ZeitzonenKonstellationen.png diff --git a/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md b/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md new file mode 100644 index 000000000..cc681c33a --- /dev/null +++ b/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md @@ -0,0 +1,95 @@ +# Zeitzonen + +Die Gradido-Anwendung läuft im Backend in der Zeitzone UTC und im Frontend in der jeweiligen lokalen Zeitzone, in der der User sich anmeldet. Dadurch kann es zu zeitlichen Diskrepanzen kommen, die innerhalb der Anwendungslogik aufgelöst bzw. entsprechend behandelt werden müssen. In den folgenden Kapiteln werden die verschiedenen zeitlichen Konstellationen dargestellt und für die verschiedenen fachlichen Prozesse die daraus resultierenden Problemlösungen beschrieben. + +![img](./image/ZeitzonenKonstellationen.png) + +## Beispiel 1 + +Ein User meldet sich in einer Zeitzone t0 - 4 an. Das bedeutet der User liegt 4 Stunden gegenüber der Backend-Zeit zurück. + +Konkret hat der User die Zeit 31.08.2022 21:00:00 auf dem Server ist aber die Zeit bei 01.09.2022 01:00:00 + +Für die Erstellung einer Contribution hat der User noch folgende Gültigkeitsmonate und Beträge zur Wahl: + + Juni 2022: 500 GDD | Juli 2022: 200 GDD | August 2022: 1000 GDD + +**aber das Backend liefert nur die Beträge, die eigentlich so korrekt wären!!!!!** + + **Juli 2022: 200 GDD | August 2022: 1000 GDD | September 2022: 1000 GDD** + +Er möchte für den Juni 2022 eine Contribution mit 500 GDD erfassen. **Wird ihm der Juni noch als Schöpfungsmonat angezeigt?** + +Falls ja, dann wählt er dabei im FE im Kalender den 30.06.2022. Dann liefert das FE folgende Contribution-Daten an das Backend: + +* Gültigkeitsdatum: 30.06.2022 00:00:00 +* Memo: text +* Betrag: 500 GDD +* **Zeitzone: wird eine Zeitzone des User aus dem Context geliefert? Das fehlt: entweder über eine Zeit vom FE zum BE und ermitteln Offset im BE** + +Im Backend wird dieses dann interpretiert und verarbeitet mit: + +* **Belegung des Schöpfungsmonate-Arrays: [ 6, 7, 8] oder [7, 8, 9] da auf dem Server ja schon der 01.09.2022 ist?** +* Gültigkeitsdatum: **30.06.2022 00:00:00 oder 01.07.2022 04:00:00 ?** +* Memo: text +* Betrag 500 GDD +* created_at: 01.07.2022 04:00:00 + +**Frage: wird die Contribution dem Juni (6) oder dem Juli (7) zugeordnet?** + +1. falls Juni zugeordnet kann die Contribution mit 500 GDD eingelöst werden +2. falls Juli zugeordnet muss die Contribution mit 500 GDD abgelehnt werden, da möglicher Schöpfungsbetrag überschritten + + +## Beispiel 2 + + +Ein User meldet sich in einer Zeitzone t0 + 1 an. Das bedeutet der User liegt 1 Stunde gegenüber der Backend-Zeit voraus. + +Konkret hat der User die Zeit 01.09.2022 00:20:00 auf dem Server ist aber die Zeit bei 31.08.2022 23:20:00 + +Für die Erstellung einer Contribution hat der User noch folgende Gültigkeitsmonate und Beträge zur Wahl: + + Juli 2022: 200 GDD | August 2022: 1000 GDD | September 2022: 1000 GDD + +**oder wird ihm** + +** + Juni 2022: 500 GDD | Juli 2022: 200 GDD | August 2022: 1000 GDD** + +**angezeigt, da auf dem BE noch der 31.08.2022 ist?** + +Er möchte für den September 2022 eine Contribution mit 500 GDD erfassen und wählt dabei im FE im Kalender den 01.09.2022. Dann liefert das FE folgende Contribution-Daten an das Backend: + +* Gültigkeitsdatum: 01.09.2022 00:00:00 (siehe Logauszüge der Fehleranalyse im Ticket #2179) +* Memo: text +* Betrag: 500 GDD +* **Zeitzone: wird eine Zeitzone des User aus dem Context geliefert?** + +Im Backend wird dieses dann interpretiert und verarbeitet mit: + +* Belegung des Schöpfungsmonate-Arrays: [ 6, 7, 8] **wie kann der User dann aber vorher September 2022 für die Schöpfung auswählen?** +* Gültigkeitsdatum: 01.09.2022 00:00:00 +* Memo: text +* Betrag 500 GDD +* created_at: 31.08.2022 23:20:00 + +Es kommt zu einem **Fehler im Backend**, da im Schöpfungsmonate-Array kein September (9) vorhanden ist, da auf dem Server noch der 31.08.2022 und damit das Array nur die Monate Juni, Juli, August und nicht September beinhaltet. + + +## Erkenntnisse: + +* die dem User angezeigten Schöpfungsmonate errechnen sich aus der lokalen User-Zeit und nicht aus der Backend-Zeit + * das Backend muss somit für Ermittlung der möglichen Schöpfungsmonate und deren noch freien Schöpfungssummen den UserTimeOffset berücksichten +* der gewählte Schöpfungsmonat muss 1:1 vom Frontend in das Backend übertragen werden +* es darf kein Mapping in die Backend-Zeit erfolgen + * sondern es muss der jeweilige UserTimeOffset mitgespeichert werden +* die Logik im BE muss den übertragenen bzw. ermittelten Offset der FE-Zeit entsprechend berücksichten und nicht die Backendzeit in der Logik anwenden + * im BE darf es kein einfaches now = new Date() geben + * im BE muss stattdessen ein userNow = new Date() + UserTimeOffset verwendet werden +* ein CreatedAt / UpdatedAt / DeletedAt / ConfirmedAt wird wie bisher in BE-Zeit gespeichert + * **NEIN nicht notwendig:** plus in einer jeweils neuen Spalte CreatedOffset / UpdatedOffset / DeletedOffset / ConfirmedOffset der dabei gültige UserTimeOffset +* im FE wird immer im Request-Header der aktuelle Zeitpunkt mit Zeitzone geschrieben +* + +## Entscheidung diff --git a/docu/Concepts/BusinessRequirements/graphics/ZeitzonenKonstellationen.drawio b/docu/Concepts/BusinessRequirements/graphics/ZeitzonenKonstellationen.drawio new file mode 100644 index 000000000..52ff19af9 --- /dev/null +++ b/docu/Concepts/BusinessRequirements/graphics/ZeitzonenKonstellationen.drawio @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docu/Concepts/BusinessRequirements/image/ZeitzonenKonstellationen.png b/docu/Concepts/BusinessRequirements/image/ZeitzonenKonstellationen.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8fddbcb9ae0f29a748e90a851e39faf730b9e7 GIT binary patch literal 47231 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 literal 0 HcmV?d00001 From b024956dbdc871d6b3c5b7dbab263133fc536c4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus-Peter=20H=C3=BCbner?= Date: Wed, 14 Sep 2022 21:56:19 +0200 Subject: [PATCH 2/4] results of architecture-meeting and results of resolver method analysis to take care about user timezone offset --- .../Zeitzonen_Behandlung.md | 285 ++++++++++++++++++ 1 file changed, 285 insertions(+) diff --git a/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md b/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md index cc681c33a..64d8ffbc4 100644 --- a/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md +++ b/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md @@ -93,3 +93,288 @@ Es kommt zu einem **Fehler im Backend**, da im Schöpfungsmonate-Array kein Sept * ## Entscheidung + +* in den HTTP-Request-Header wird generell der aktuelle Timestamp des Clients eingetragen, sodass die aktuelle Uhrzeit des Users ohne weitere Signatur-Änderungen in jedem Aufruf am Backend ankommt. Moritz erstellt Ticket +* es wird eine Analyse aller Backend-Aufrufe gemacht, die die Auswertung der User-Time und dessen evtl. Timezone-Differenz in der Logik des Backend-Aufrufs benötigt. +* diese Backend-Methoden müssen fachlich so überarbeitet werden, dass immer aus dem Timezone-Offset die korrekte fachliche Logik als Ergebnis heraus kommt. In der Datanbank wird aber immer die UTC-Zeit gespeichert. +* Es werden keine zusätzlichen Datanbank-Attribute zur Speicherung des User-TimeOffsets benötigt. + + +## Analyse der Backend-Aufrufe + +Es werden alle Resolver und ihre Methoden sowie im Resolver exportierte Attribute/Methoden untersucht. + +Mit + gekennzeichnet sind diese, die mit dem UserTimeOffset interagieren und überarbeitet werden müssen. + +Mit - gekennzeichnet sind diese, die keiner weiteren Aktion bedürfen. + + +### AdminResolver + +#### + adminCreateContribution + +Hier wird der User zur übergebenen Email inklusive der Summen über die letzten drei Schöpfungsmonate aus seinen vorhandenen Contributions, egal ob bestätigt oder noch offen ermittelt. + +Hier muss der User-TimeOffset berücksichtigt werden, um die korrekten drei Schöpfungsmonate und dann daraus die korrekten Beträge der Contributions zu ermitteln. + +Zusätzlich wird als Parameter ein *creationDate* vom User mitgeliefert, das dem User-TimeOffset unterliegt. Auch dieses muss entsprechend beachtet und beim internen Aufruf von *validateContribution()* und der Initialisierung der Contribution berücksichtigt werden. + +#### - adminCreateContributionMessage + +nothing to do + +#### + adminCreateContributions + +Hier wird eine Liste von übergebenen Contributions über den internen Aufruf von *adminCreateContribution()* verarbeitet. Da dort eine Berücksichtigung des User-TimeOffsets notwendig ist, muss hier die UserTime entsprechen im Context weitergereicht werden. + +#### - adminDeleteContribution + +nothing to do + +#### + adminUpdateContribution + +analog adminCreateContribution() muss hier der User-TimeOffset berücksichtigt werden. + +#### + confirmContribution + +Hier wird intern *getUserCreation()* und *validateContribution()* aufgerufen, daher analog adminCreateContribution() + +#### + createContributionLink + +Hier werden zwar ein *ValidFrom* und ein *ValidTo* Datum übergeben, doch dürften diese keiner Beachtung eines User-TimezoneOffsets unterliegen. Trotzdem bitte noch einmal verifizieren. + +#### - creationTransactionList + +nothing to do + +#### - deleteContributionLink + +Es wird zwar der *deletedAt*-Zeitpunkt als Rückgabewert geliefert, doch m.E. dürft hier keine Berücksichtigung des User-TimezoneOffsets notwendig sein. + +#### - deleteUser + +Es wird zwar der *deletedAt*-Zeitpunkt als Rückgabewert geliefert, doch m.E. dürft hier keine Berücksichtigung des User-TimezoneOffsets notwendig sein. + +#### - listContributionLinks + +nothing to do + +#### + listTransactionLinksAdmin + +Hier wird die BE-Zeit für die Suche nach ValidUntil verwendet. Dies sollte nocheinmal verifiziert werden. + +#### + listUnconfirmedContributions + +Hier wird intern *getUserCreations()* aufgerufen für die Summen der drei Schöpfungsmonate, somit ist der User-TimezoneOffset zu berücksichtigen. + +#### + searchUsers + +Hier wird intern *getUserCreations()* aufgerufen für die Summen der drei Schöpfungsmonate, somit ist der User-TimezoneOffset zu berücksichtigen. + +#### - sendActivationEmail + +analog *UserResolver.checkOptInCode* + +#### - setUserRole + +nothing to do + +#### - unDeleteUser + +nothing to do + +#### + updateContributionLink + +Hier werden zwar ein *ValidFrom* und ein *ValidTo* Datum übergeben, doch dürften diese keiner Beachtung eines User-TimezoneOffsets unterliegen. Trotzdem bitte noch einmal verifizieren. + + +### BalanceResolver + +#### + balance + +Hier wird der aktuelle Zeitpunkt des BE verwendet, um den Decay und die Summen der Kontostände zu ermitteln. Dies müsste eigentlich von dem User-TimezoneOffset unabhängig sein. Sollte aber noch einmal dahingehend verifiziert werden. + + +### CommunityResolver + +#### - communities + +nothing to do + +#### - getCommunityInfo + +nothing to do + + +### ContributionMessageResolver + +#### - createContributionMessage + +nothing to do + +#### - listContributionMessages + +nothing to do + + +### ContributionResolver + +#### + createContribution + +Hier wird der User inklusive der Summen über die letzten drei Schöpfungsmonate aus seinen vorhandenen Contributions, egal ob bestätigt oder noch offen ermittelt. + +Hier muss der User-TimeOffset berücksichtigt werden, um die korrekten drei Schöpfungsmonate und dann daraus die korrekten Beträge der Contributions zu ermitteln. + +Zusätzlich wird als Parameter ein *creationDate* vom User mitgeliefert, das dem User-TimeOffset unterliegt. Auch dieses muss entsprechend beachtet und beim internen Aufruf von *validateContribution()* und der Initialisierung der Contribution berücksichtigt werden. + +#### - deleteContribution + +nothing to do + +#### - listAllContributions + +nothing to do + +#### - listContributions + +nothing to do + +#### + updateContribution + +Hier werden die Contributions des Users inklusive der Summen über die letzten drei Schöpfungsmonate aus seinen vorhandenen Contributions, egal ob bestätigt oder noch offen ermittelt. + +Hier muss der User-TimeOffset berücksichtigt werden, um die korrekten drei Schöpfungsmonate und dann daraus die korrekten Beträge der Contributions zu ermitteln. + +Zusätzlich wird als Parameter ein *creationDate* vom User mitgeliefert, das dem User-TimeOffset unterliegt. Auch dieses muss entsprechend beachtet und beim internen Aufruf von *validateContribution()* und dem Update der Contribution berücksichtigt werden. + + +### GdtResolver + +#### - existPid + +nothing to do + +#### - gdtBalance + +nothing to do + +#### - listGDTEntries + +nothing to do + + +### KlicktippResolver + +nothing to do + + +### StatisticsResolver + +#### + communityStatistics + +Hier werden die Daten zum aktuellen BE-Zeitpunkt ermittelt und dem User angezeigt. Aber der User hat ggf. einen anderen TimeOffset. Daher die Frage, ob die Ermittlung der Statistik-Daten mit dem User-TimeOffset stattfinden muss. + + +### TransactionLinkResolver + +#### - transactionLinkCode + +nothing to do + +#### - transactionLinkExpireDate + +nothing to do + +#### - createTransactionLink + +nothing to do + +#### - deleteTransactionLink + +nothing to do + +#### - listTransactionLinks + +nothing to do + +#### - queryTransactionLink + +nothing to do + +#### - redeemTransactionLink + +nothing to do + + +### TransactionResolver + +#### - executeTransaction + +nothing to do + +#### - sendCoins + +nothing to do + +#### + transactionList + +Hier wird der aktuelle BE-Zeitpunkt verwendet, um die Summen der vorhandenen Transactions bis zu diesem Zeitpunkt zu ermitteln. Nach ersten Einschätzungen dürfte es hier nichts zu tun geben. Aber es sollte noch einmal geprüft werden. + + +### UserResolver + +#### - activationLink + +nothing to do + +#### - checkOptInCode + +Hier wird der übergebene OptIn-Code geprüft, ob schon wieder eine erneute Email gesendet werden kann. Die Zeiten werden auf reiner BE-Zeit verglichen, von daher gibt es hier nichts zu tun. + +#### - createUser + +nothing to do + +#### - forgotPassword + +In dieser Methode wird am Ende in der Methode *sendResetPasswordEmailMailer()* die Zeit berechnet, wie lange der OptIn-Code im Link gültig ist, default 1440 min oder 24 h. + +Es ist keine User-TimeOffset zu berücksichten, da der OptInCode direkt als Parameter im Aufruf von queryOptIn verwendet und dann dort mit der BE-Time verglichen wird. + +#### - hasElopage + +nothing to do + +#### - login + +nothing to do + +#### - logout + +nothing to do + +#### - queryOptIn + +Hier wird der OptIn-Code aus der *sendResetPasswordEmailMailer()* als Parameter geliefert. Da dessen Gültigkeit zuvor in forgotPassword mit der BE-Zeit gesetzt wurde, benögt man hier keine Berücksichtigung des User-TimeOffsets. + +#### - searchAdminUsers + +nothing to do + +#### - setPassword + +nothing to do, analog *queryOptIn* + +#### - printTimeDuration + +nothing to do + +#### - updateUserInfos + +nothing to do + +#### + verifyLogin + +Hier wird der User inklusive der Summen über die letzten drei Schöpfungsmonate aus seinen vorhandenen Contribtutions, egal ob bestätigt oder noch offen ermittelt. + +Hier muss der User-TimeOffset berücksichtigt werden, um die korrekten drei Schöpfungsmonate und dann daraus die korrekten Beträge der Contributions zu ermitteln. From c1b91f94564079cfcef1d40eab956e124dfebe0b Mon Sep 17 00:00:00 2001 From: clauspeterhuebner <86960882+clauspeterhuebner@users.noreply.github.com> Date: Fri, 18 Nov 2022 00:41:50 +0100 Subject: [PATCH 3/4] Update docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md Co-authored-by: Ulf Gebhardt --- docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md b/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md index 64d8ffbc4..8f2a9e49a 100644 --- a/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md +++ b/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md @@ -96,7 +96,7 @@ Es kommt zu einem **Fehler im Backend**, da im Schöpfungsmonate-Array kein Sept * in den HTTP-Request-Header wird generell der aktuelle Timestamp des Clients eingetragen, sodass die aktuelle Uhrzeit des Users ohne weitere Signatur-Änderungen in jedem Aufruf am Backend ankommt. Moritz erstellt Ticket * es wird eine Analyse aller Backend-Aufrufe gemacht, die die Auswertung der User-Time und dessen evtl. Timezone-Differenz in der Logik des Backend-Aufrufs benötigt. -* diese Backend-Methoden müssen fachlich so überarbeitet werden, dass immer aus dem Timezone-Offset die korrekte fachliche Logik als Ergebnis heraus kommt. In der Datanbank wird aber immer die UTC-Zeit gespeichert. +* diese Backend-Methoden müssen fachlich so überarbeitet werden, dass immer aus dem Timezone-Offset die korrekte fachliche Logik als Ergebnis heraus kommt. In der Datenbank wird aber immer die UTC-Zeit gespeichert. * Es werden keine zusätzlichen Datanbank-Attribute zur Speicherung des User-TimeOffsets benötigt. From a1e8d0b2061c631a4cf3d23e94ff96fa748d03c9 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 23 Nov 2022 17:57:22 +0100 Subject: [PATCH 4/4] Update docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md --- docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md b/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md index 8f2a9e49a..771526ffb 100644 --- a/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md +++ b/docu/Concepts/BusinessRequirements/Zeitzonen_Behandlung.md @@ -247,7 +247,6 @@ Hier muss der User-TimeOffset berücksichtigt werden, um die korrekten drei Sch Zusätzlich wird als Parameter ein *creationDate* vom User mitgeliefert, das dem User-TimeOffset unterliegt. Auch dieses muss entsprechend beachtet und beim internen Aufruf von *validateContribution()* und dem Update der Contribution berücksichtigt werden. - ### GdtResolver #### - existPid