From a87acfbd14c697e484db3289bf3d4fd1ab7576cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus-Peter=20H=C3=BCbner?= Date: Thu, 23 Mar 2023 22:05:03 +0100 Subject: [PATCH 01/20] adapt document to new rules and conventions --- .../BusinessRequirements/UC_Set_UserAlias.md | 67 ++++++++++++------- 1 file changed, 44 insertions(+), 23 deletions(-) diff --git a/docu/Concepts/BusinessRequirements/UC_Set_UserAlias.md b/docu/Concepts/BusinessRequirements/UC_Set_UserAlias.md index a5cb07e0e..6340b04a4 100644 --- a/docu/Concepts/BusinessRequirements/UC_Set_UserAlias.md +++ b/docu/Concepts/BusinessRequirements/UC_Set_UserAlias.md @@ -26,18 +26,51 @@ Dies ist ein rein technischer Key und wird nur **innerhalb** der Anwendung zur I Die GradidoID ist zwar auch ein rein technischer Key, doch wird dieser als eine UUID der Version 4 erstellt. Dies basiert auf einer (pseudo)zufällig generierten Zahl aus 16 Bytes mit einer theoretischen Konfliktfreiheit von ![2^{{122}}\approx 5{,}3169\cdot 10^{{36}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1924927d783e2d3969734633e134f643b6f9a8cd) in hexadezimaler Notation nach einem Pattern von fünf Gruppen durch Bindestrich getrennt - z.B. `550e8400-e29b-41d4-a716-446655440000` -Somit kann die GradidoID auch System übergreifend zwischen Communities ausgetauscht werden und bietet dennoch eine weitestgehende eindeutige theoretisch konfliktfreie Identifikation des Users. System intern ist die Eindeutigkeit bei der Erstellung eines neuen Users auf jedenfall sichergestellt. Sollte ein User den Wechsel von einer Community in eine andere gradido-Community wünschen, so soll falls möglich die GradidoID für den User erhalten bleiben und übernommen werden können. Dies muss beim Umzug in der Ziel-Community geprüft werden. Falls diese GradidoID aus der Quell-Community wider erwarten existieren sollte, dann muss doch einen neue GradidoID für den User erzeugt werden. +Somit kann die GradidoID auch System übergreifend zwischen Communities ausgetauscht werden und bietet dennoch eine weitestgehende eindeutige theoretisch konfliktfreie Identifikation des Users. System intern ist die Eindeutigkeit bei der Erstellung eines neuen Users auf jedenfall sichergestellt. Sollte ein User den Wechsel von einer Community in eine andere gradido-Community wünschen, so soll falls möglich die GradidoID für den User erhalten bleiben und übernommen werden können. Dies muss beim Umzug in der Ziel-Community geprüft werden. Falls diese GradidoID aus der Quell-Community wider erwarten existieren sollte, dann muss doch einen neue GradidoID für den User in der Ziel-Community erzeugt werden. #### Alias Der Alias eines Users ist als rein fachlicher Key ausgelegt, der frei vom User definiert werden kann. Bei der Definition dieses frei definierbaren und menschenlesbaren Schlüsselwertes stellt die Gradido-Anwendung sicher, dass der vom User eingegebene Wert nicht schon von einem anderen User dieser Community verwendet wird. Für die Anlage eines Alias gelten folgende Konventionen: -- mindestens 5 Zeichen - * alphanumerisch - * keine Umlaute - * nach folgender Regel erlaubt (RegEx: [a-zA-Z0-9]-|_[a-zA-Z0-9]) -- Blacklist für Schlüsselworte, die frei definiert werden können -- vordefinierte/reservierte System relevante Namen dürfen maximal aus 4 Zeichen bestehen +* alpha-nummerisch +* 2 <= Länge des alias <=20 +* beginnt mit einem Buchstaben +* keine Umlaute +* keine Sonderzeichen ausser dem Bindestrich "-" und dem Unterstrich "_" +* nicht mehr als 2 Wiederholungen des gleichen Zeichens direkt hintereinander +* kein Unterscheidung von Groß-Kleinschreibung, es findet eine Konvertierung auf Kleinschreibung statt + +Blackliste für nicht vom User verwendbare alias-Definitionen: + +Notation: das %-Zeichen dient als Platzhalter für 0 oder beliebig viele der erlaubten Zeichen + +* %gradido% (= die Sequenz gradido darf nicht enthalten sein) +* %community% (= die Sequenz community darf nicht enthalten sein) +* %communities% (= die Sequenz communities darf nicht enthalten sein) +* %admin% (= die Sequenz admin darf nicht enthalten sein) +* %gast% (= die Sequenz gast darf nicht enthalten sein) +* %guest% (= die Sequenz guest darf nicht enthalten sein) +* support% (= darf nicht mit der Sequenz support beginnen) +* user% (= darf nicht mit der Sequenz user beginnen) +* usr% (= darf nicht mit der Sequenz usr beginnen) +* home% (= darf nicht mit der Sequenz home beginnen) +* chief% (= darf nicht mit der Sequenz chief beginnen) +* chef% (= darf nicht mit der Sequenz chef beginnen) +* master% (= darf nicht mit der Sequenz master beginnen) +* email% (= darf nicht mit der Sequenz email beginnen) +* mail% (= darf nicht mit der Sequenz mail beginnen) +* root% (= darf nicht mit der Sequenz root beginnen) +* tmp% (= darf nicht mit der Sequenz tmp beginnen) +* temp% (= darf nicht mit der Sequenz temp beginnen) +* gdd% (= darf nicht mit der Sequenz gdd beginnen) +* gdt% (= darf nicht mit der Sequenz gdt beginnen) +* gdb% (= darf nicht mit der Sequenz gdb beginnen) +* age (= darf nicht age lauten) +* gmw (= darf nicht gmw lauten) +* auf (= darf nicht auf lauten) +* ... + +Um für die Zukunft für eine Community im Rahmen der Dreifachen-Geldschöpfung und deren Verwaltung bestimmte Alias-Werte nicht an allgemeine User zu verlieren, werden in der Blackliste jetzt schon solche Belegungen reserviert. Damit können diese ggf. später wieder für system relevante User der Community wieder freigegeben werden. #### Email @@ -49,7 +82,7 @@ Die Email wird weiterhin als Kommunikationskanal ausserhalb der Gradido-Anwendun Die Erfassung des Alias erfolgt als zusätzliche Eingabe direkt bei der Registrierung eines neuen Users oder als weiterer Schritt direkt nach dem Login. -Dieser UseCase ist in die **Ausbaustufe-1** und **Ausbaustufe-x** unterteilt. +Dieser UseCase ist in die **Ausbaustufe-1** und **Ausbaustufe-x** unterteilt. Alle beschriebenen Anforderungen der **Ausbaustufe-1** können mit Produktivsetzung des Issues #1798 - [GradidoID 1: adapt and migrate database schema](https://github.com/gradido/gradido/issues/1798) und dem [PR #2058 - GradidoID 1: adapt and migrate database schema](https://github.com/gradido/gradido/pull/2058) umgesetzt werden. @@ -63,7 +96,7 @@ In der Eingabemaske der Registrierung wird nun zusätzlich das Feld *Alias* ange ![img](./image/RegisterWithAlias.png) -Mit dem (optionalen ?) Button "Eindeutigkeit prüfen" wird dem User die Möglichkeit gegeben vorab die Eindeutigkeit seiner *Alias*-Eingabe zu verifizieren ohne den Dialog über den "Registrieren"-Button zu verlassen. Denn es muss sichergestellt sein, dass noch kein existierender User der Community genau diesen *Alias* evtl. schon verwendet. +Mit dem (optionalen ?) Button "Eindeutigkeit prüfen" wird dem User die Möglichkeit gegeben vorab die Eindeutigkeit seiner *Alias*-Eingabe zu verifizieren ohne den Dialog über den "Registrieren"-Button zu verlassen. Denn es muss sichergestellt sein, dass noch kein existierender User der Community genau diesen *Alias* evtl. schon verwendet. Wird diese Prüfung vom User nicht ausgeführt bevor er den Dialog mit dem "Registrieren"-Button abschließt, so erfolgt die *Alias*-Eindeutigkeitsprüfung als erster Schritt bevor die anderen Eingaben als neuer User geprüft und angelegt werden. @@ -93,20 +126,8 @@ Der Sprung nach der Login-Seite nach erfolgreichem Login auf die Profil-Seite ö Im Eingabe-Modus der Alias-Gruppe hat das Eingabefeld den Fokus und darin wird: * wenn noch kein Alias für den User in der Datenbank vorhanden ist, vom System ein Vorschlag unterbreitet. Der Vorschlag basiert auf dem Vornamen des Users und wird durch folgende Logik ermittelt: - * es wird mit dem Vorname des Users eine Datenbankabfrage durchgeführt, die zählt, wieviele User-Aliase es schon mit diesem Vornamen gibt und falls notwendig direkt mit einer nachfolgenden Nummer als Postfix versehen sind. - * Aufgrund der Konvention, dass ein Alias mindestens 5 Zeichen lang sein muss, sind ggf. führende Nullen mitzuberücksichten. - * **Beispiel-1**: *Max* als Vorname - * in der Datenbank gibt es schon mehrer User mit den Aliasen: *Maximilian*, *Max01*, *Max_M*, *Max-M*, *MaxMu* und *Max02*. - * Dann schlägt das System den Alias *Max03* vor, da *Max* nur 3 Zeichen lang ist und es schon zwei Aliase *Max* gefolgt mit einer Nummer gibt (*Max01* und *Max02*) - * Die Aliase *Maximilian*, *Max_M*, *Max-M* und *MaxMu* werden nicht mitgezählt, das diese nach *Max* keine direkt folgende Ziffern haben - * **Beispiel-2**: *August* als Vorname - * in der Datenbank gibt es schon mehrer User mit den Aliasen: *Augusta*, *Augustus*, *Augustinus* - * Dann schlägt das System den Alias *August* vor, da *August* schon 6 Zeichen lang ist und es noch keinen anderen User mit Alias *August* gibt - * die Aliase *Augusta*, *Augustus* und *Augustinus* werden nicht mit gezählt, da diese länger als 5 Zeichen sind und sich von *August* unterscheiden - * **Beispiel-3**: *Nick* als Vorname - * in der Datenbank gibt es schon mehrer User mit den Aliasen: *Nicko*, *Nickodemus* - * Dann schlägt das System den Alias *Nick1* vor, da *Nick* kürzer als 5 Zeichen ist und es noch keinen anderen User mit dem Alias *Nick1* gibt - * die Aliase *Nicko* und *Nickodemus* werden nicht mit gezählt, da diese länger als 5 Zeichen sind und sich von *Nick* unterscheiden + * es wird mit dem Vorname des Users eine Datenbankabfrage durchgeführt, die zählt, wieviele User-Aliase es schon mit diesem Vornamen gibt und falls notwendig direkt mit einer nachfolgenden Nummer als Postfix versehen. + * Aufgrund der Konvention für eine Alias-Definition könnte ein Vorname ggf. gegen die Alias-Regeln verstossen oder aber auch evtl. zu kurz oder lang sein. Auch ein mögliches Blockieren durch die Blacklist könnte den Vornamen des Users als alias verhindern. Dann muss der User selbst manuell seinen alias vollständig erfassen ohne, dass das System einen Vorschlag unterbreiten könnte. * wenn schon ein Alias für den User in der Datenbank vorhanden ist, dann wird dieser unverändert aus der Datenbank und ohne Systemvorschlag einfach angezeigt. Der User kann nun den im Eingabefeld angezeigten Alias verändern, wobei die Alias-Konventionen, wie oben im ersten Kapitel beschrieben einzuhalten und zu validieren sind. From 28cbf13062a936625e4e5b57ed050df00eb46ea3 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 29 Mar 2023 16:23:55 +0200 Subject: [PATCH 02/20] solution to enable import/no-cycle --- backend/.eslintrc.js | 2 +- .../event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts | 3 +- .../event/EVENT_ADMIN_CONTRIBUTION_CREATE.ts | 3 +- .../event/EVENT_ADMIN_CONTRIBUTION_DELETE.ts | 3 +- .../event/EVENT_ADMIN_CONTRIBUTION_DENY.ts | 3 +- .../EVENT_ADMIN_CONTRIBUTION_LINK_CREATE.ts | 3 +- .../EVENT_ADMIN_CONTRIBUTION_LINK_DELETE.ts | 3 +- .../EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE.ts | 3 +- ...EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE.ts | 3 +- .../event/EVENT_ADMIN_CONTRIBUTION_UPDATE.ts | 3 +- backend/src/event/EVENT_ADMIN_USER_DELETE.ts | 3 +- .../src/event/EVENT_ADMIN_USER_ROLE_SET.ts | 3 +- .../src/event/EVENT_ADMIN_USER_UNDELETE.ts | 3 +- .../src/event/EVENT_CONTRIBUTION_CREATE.ts | 3 +- .../src/event/EVENT_CONTRIBUTION_DELETE.ts | 3 +- .../event/EVENT_CONTRIBUTION_LINK_REDEEM.ts | 3 +- .../EVENT_CONTRIBUTION_MESSAGE_CREATE.ts | 3 +- .../src/event/EVENT_CONTRIBUTION_UPDATE.ts | 3 +- .../EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION.ts | 3 +- .../event/EVENT_EMAIL_ADMIN_CONFIRMATION.ts | 3 +- backend/src/event/EVENT_EMAIL_CONFIRMATION.ts | 3 +- .../src/event/EVENT_EMAIL_FORGOT_PASSWORD.ts | 3 +- .../event/EVENT_TRANSACTION_LINK_CREATE.ts | 3 +- .../event/EVENT_TRANSACTION_LINK_DELETE.ts | 3 +- .../event/EVENT_TRANSACTION_LINK_REDEEM.ts | 3 +- .../src/event/EVENT_TRANSACTION_RECEIVE.ts | 3 +- backend/src/event/EVENT_TRANSACTION_SEND.ts | 3 +- .../src/event/EVENT_USER_ACTIVATE_ACCOUNT.ts | 3 +- backend/src/event/EVENT_USER_INFO_UPDATE.ts | 3 +- backend/src/event/EVENT_USER_LOGIN.ts | 3 +- backend/src/event/EVENT_USER_LOGOUT.ts | 3 +- backend/src/event/EVENT_USER_REGISTER.ts | 3 +- backend/src/event/Event.ts | 34 ------------------- backend/src/event/Events.ts | 33 ++++++++++++++++++ .../resolver/ContributionLinkResolver.test.ts | 2 +- .../resolver/ContributionLinkResolver.ts | 2 +- .../ContributionMessageResolver.test.ts | 2 +- .../resolver/ContributionMessageResolver.ts | 2 +- .../resolver/ContributionResolver.test.ts | 2 +- .../graphql/resolver/ContributionResolver.ts | 2 +- .../resolver/TransactionLinkResolver.test.ts | 2 +- .../resolver/TransactionLinkResolver.ts | 2 +- .../resolver/TransactionResolver.test.ts | 2 +- .../graphql/resolver/TransactionResolver.ts | 2 +- .../src/graphql/resolver/UserResolver.test.ts | 2 +- backend/src/graphql/resolver/UserResolver.ts | 2 +- 46 files changed, 108 insertions(+), 78 deletions(-) create mode 100644 backend/src/event/Events.ts diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index 79276ef9d..2654104dc 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -55,7 +55,7 @@ module.exports = { 'import/named': 'error', 'import/namespace': 'error', 'import/no-absolute-path': 'error', - 'import/no-cycle': 'off', + 'import/no-cycle': 'error', 'import/no-dynamic-require': 'error', 'import/no-internal-modules': 'off', 'import/no-relative-packages': 'error', diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts index 33c9ae36e..cb1f8b32b 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { Contribution as DbContribution } from '@entity/Contribution' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_ADMIN_CONTRIBUTION_CONFIRM = async ( user: DbUser, diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CREATE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CREATE.ts index bf85345cf..64797fc26 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CREATE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CREATE.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { Contribution as DbContribution } from '@entity/Contribution' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_ADMIN_CONTRIBUTION_CREATE = async ( user: DbUser, diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DELETE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DELETE.ts index dd37c76b5..a2770b34d 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DELETE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DELETE.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { Contribution as DbContribution } from '@entity/Contribution' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_ADMIN_CONTRIBUTION_DELETE = async ( user: DbUser, diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DENY.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DENY.ts index 8d34be87f..cb9e32fbf 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DENY.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DENY.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { Contribution as DbContribution } from '@entity/Contribution' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_ADMIN_CONTRIBUTION_DENY = async ( user: DbUser, diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_CREATE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_CREATE.ts index b7ee39c36..93bfdbf4b 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_CREATE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_CREATE.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_ADMIN_CONTRIBUTION_LINK_CREATE = async ( moderator: DbUser, diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_DELETE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_DELETE.ts index b5816e45d..2794f5fa3 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_DELETE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_DELETE.ts @@ -1,7 +1,8 @@ import { User as DbUser } from '@entity/User' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_ADMIN_CONTRIBUTION_LINK_DELETE = async ( moderator: DbUser, diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE.ts index 1cd998e26..810cecf29 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE = async ( moderator: DbUser, diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE.ts index f07d38e98..ab96b78f6 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE.ts @@ -2,7 +2,8 @@ import { User as DbUser } from '@entity/User' import { Contribution as DbContribution } from '@entity/Contribution' import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE = async ( user: DbUser, diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_UPDATE.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_UPDATE.ts index 7d1bc175e..6bea692fd 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_UPDATE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_UPDATE.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { Contribution as DbContribution } from '@entity/Contribution' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_ADMIN_CONTRIBUTION_UPDATE = async ( user: DbUser, diff --git a/backend/src/event/EVENT_ADMIN_USER_DELETE.ts b/backend/src/event/EVENT_ADMIN_USER_DELETE.ts index bfd5be740..1eb7399aa 100644 --- a/backend/src/event/EVENT_ADMIN_USER_DELETE.ts +++ b/backend/src/event/EVENT_ADMIN_USER_DELETE.ts @@ -1,6 +1,7 @@ import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_ADMIN_USER_DELETE = async (user: DbUser, moderator: DbUser): Promise => Event(EventType.ADMIN_USER_DELETE, user, moderator).save() diff --git a/backend/src/event/EVENT_ADMIN_USER_ROLE_SET.ts b/backend/src/event/EVENT_ADMIN_USER_ROLE_SET.ts index 3be825ad4..37c840475 100644 --- a/backend/src/event/EVENT_ADMIN_USER_ROLE_SET.ts +++ b/backend/src/event/EVENT_ADMIN_USER_ROLE_SET.ts @@ -1,6 +1,7 @@ import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_ADMIN_USER_ROLE_SET = async ( user: DbUser, diff --git a/backend/src/event/EVENT_ADMIN_USER_UNDELETE.ts b/backend/src/event/EVENT_ADMIN_USER_UNDELETE.ts index eb861dbf1..121662ea8 100644 --- a/backend/src/event/EVENT_ADMIN_USER_UNDELETE.ts +++ b/backend/src/event/EVENT_ADMIN_USER_UNDELETE.ts @@ -1,6 +1,7 @@ import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_ADMIN_USER_UNDELETE = async ( user: DbUser, diff --git a/backend/src/event/EVENT_CONTRIBUTION_CREATE.ts b/backend/src/event/EVENT_CONTRIBUTION_CREATE.ts index f1469c725..6842bc4eb 100644 --- a/backend/src/event/EVENT_CONTRIBUTION_CREATE.ts +++ b/backend/src/event/EVENT_CONTRIBUTION_CREATE.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { Contribution as DbContribution } from '@entity/Contribution' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_CONTRIBUTION_CREATE = async ( user: DbUser, diff --git a/backend/src/event/EVENT_CONTRIBUTION_DELETE.ts b/backend/src/event/EVENT_CONTRIBUTION_DELETE.ts index 8c62e3ae6..30130662f 100644 --- a/backend/src/event/EVENT_CONTRIBUTION_DELETE.ts +++ b/backend/src/event/EVENT_CONTRIBUTION_DELETE.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { Contribution as DbContribution } from '@entity/Contribution' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_CONTRIBUTION_DELETE = async ( user: DbUser, diff --git a/backend/src/event/EVENT_CONTRIBUTION_LINK_REDEEM.ts b/backend/src/event/EVENT_CONTRIBUTION_LINK_REDEEM.ts index 9f44de95d..5138548a6 100644 --- a/backend/src/event/EVENT_CONTRIBUTION_LINK_REDEEM.ts +++ b/backend/src/event/EVENT_CONTRIBUTION_LINK_REDEEM.ts @@ -4,7 +4,8 @@ import { Transaction as DbTransaction } from '@entity/Transaction' import { Contribution as DbContribution } from '@entity/Contribution' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_CONTRIBUTION_LINK_REDEEM = async ( user: DbUser, diff --git a/backend/src/event/EVENT_CONTRIBUTION_MESSAGE_CREATE.ts b/backend/src/event/EVENT_CONTRIBUTION_MESSAGE_CREATE.ts index b06685a6d..1200834de 100644 --- a/backend/src/event/EVENT_CONTRIBUTION_MESSAGE_CREATE.ts +++ b/backend/src/event/EVENT_CONTRIBUTION_MESSAGE_CREATE.ts @@ -2,7 +2,8 @@ import { User as DbUser } from '@entity/User' import { Contribution as DbContribution } from '@entity/Contribution' import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_CONTRIBUTION_MESSAGE_CREATE = async ( user: DbUser, diff --git a/backend/src/event/EVENT_CONTRIBUTION_UPDATE.ts b/backend/src/event/EVENT_CONTRIBUTION_UPDATE.ts index c2e6951cc..38df20a4c 100644 --- a/backend/src/event/EVENT_CONTRIBUTION_UPDATE.ts +++ b/backend/src/event/EVENT_CONTRIBUTION_UPDATE.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { Contribution as DbContribution } from '@entity/Contribution' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_CONTRIBUTION_UPDATE = async ( user: DbUser, diff --git a/backend/src/event/EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION.ts b/backend/src/event/EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION.ts index c16bbfac3..ad9d27596 100644 --- a/backend/src/event/EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION.ts +++ b/backend/src/event/EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION.ts @@ -1,6 +1,7 @@ import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION = async (user: DbUser): Promise => Event(EventType.EMAIL_ACCOUNT_MULTIREGISTRATION, user, { id: 0 } as DbUser).save() diff --git a/backend/src/event/EVENT_EMAIL_ADMIN_CONFIRMATION.ts b/backend/src/event/EVENT_EMAIL_ADMIN_CONFIRMATION.ts index ae10f9fba..2ba31af9d 100644 --- a/backend/src/event/EVENT_EMAIL_ADMIN_CONFIRMATION.ts +++ b/backend/src/event/EVENT_EMAIL_ADMIN_CONFIRMATION.ts @@ -1,6 +1,7 @@ import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_EMAIL_ADMIN_CONFIRMATION = async ( user: DbUser, diff --git a/backend/src/event/EVENT_EMAIL_CONFIRMATION.ts b/backend/src/event/EVENT_EMAIL_CONFIRMATION.ts index 9d64207e0..5edef7f20 100644 --- a/backend/src/event/EVENT_EMAIL_CONFIRMATION.ts +++ b/backend/src/event/EVENT_EMAIL_CONFIRMATION.ts @@ -1,6 +1,7 @@ import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_EMAIL_CONFIRMATION = async (user: DbUser): Promise => Event(EventType.EMAIL_CONFIRMATION, user, user).save() diff --git a/backend/src/event/EVENT_EMAIL_FORGOT_PASSWORD.ts b/backend/src/event/EVENT_EMAIL_FORGOT_PASSWORD.ts index f7e328369..72d3b2b2c 100644 --- a/backend/src/event/EVENT_EMAIL_FORGOT_PASSWORD.ts +++ b/backend/src/event/EVENT_EMAIL_FORGOT_PASSWORD.ts @@ -1,6 +1,7 @@ import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_EMAIL_FORGOT_PASSWORD = async (user: DbUser): Promise => Event(EventType.EMAIL_FORGOT_PASSWORD, user, { id: 0 } as DbUser).save() diff --git a/backend/src/event/EVENT_TRANSACTION_LINK_CREATE.ts b/backend/src/event/EVENT_TRANSACTION_LINK_CREATE.ts index e766fe38e..74e4c1b42 100644 --- a/backend/src/event/EVENT_TRANSACTION_LINK_CREATE.ts +++ b/backend/src/event/EVENT_TRANSACTION_LINK_CREATE.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_TRANSACTION_LINK_CREATE = async ( user: DbUser, diff --git a/backend/src/event/EVENT_TRANSACTION_LINK_DELETE.ts b/backend/src/event/EVENT_TRANSACTION_LINK_DELETE.ts index d15c786a8..70e06bbd4 100644 --- a/backend/src/event/EVENT_TRANSACTION_LINK_DELETE.ts +++ b/backend/src/event/EVENT_TRANSACTION_LINK_DELETE.ts @@ -1,7 +1,8 @@ import { User as DbUser } from '@entity/User' import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_TRANSACTION_LINK_DELETE = async ( user: DbUser, diff --git a/backend/src/event/EVENT_TRANSACTION_LINK_REDEEM.ts b/backend/src/event/EVENT_TRANSACTION_LINK_REDEEM.ts index 5f8cd5c4d..75bc87916 100644 --- a/backend/src/event/EVENT_TRANSACTION_LINK_REDEEM.ts +++ b/backend/src/event/EVENT_TRANSACTION_LINK_REDEEM.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_TRANSACTION_LINK_REDEEM = async ( user: DbUser, diff --git a/backend/src/event/EVENT_TRANSACTION_RECEIVE.ts b/backend/src/event/EVENT_TRANSACTION_RECEIVE.ts index c6e06ccb7..a09e1c4b2 100644 --- a/backend/src/event/EVENT_TRANSACTION_RECEIVE.ts +++ b/backend/src/event/EVENT_TRANSACTION_RECEIVE.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { Transaction as DbTransaction } from '@entity/Transaction' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_TRANSACTION_RECEIVE = async ( user: DbUser, diff --git a/backend/src/event/EVENT_TRANSACTION_SEND.ts b/backend/src/event/EVENT_TRANSACTION_SEND.ts index 888162747..71c70a425 100644 --- a/backend/src/event/EVENT_TRANSACTION_SEND.ts +++ b/backend/src/event/EVENT_TRANSACTION_SEND.ts @@ -2,7 +2,8 @@ import { Decimal } from 'decimal.js-light' import { User as DbUser } from '@entity/User' import { Transaction as DbTransaction } from '@entity/Transaction' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_TRANSACTION_SEND = async ( user: DbUser, diff --git a/backend/src/event/EVENT_USER_ACTIVATE_ACCOUNT.ts b/backend/src/event/EVENT_USER_ACTIVATE_ACCOUNT.ts index 2e224d550..9b2ce31ee 100644 --- a/backend/src/event/EVENT_USER_ACTIVATE_ACCOUNT.ts +++ b/backend/src/event/EVENT_USER_ACTIVATE_ACCOUNT.ts @@ -1,6 +1,7 @@ import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_USER_ACTIVATE_ACCOUNT = async (user: DbUser): Promise => Event(EventType.USER_ACTIVATE_ACCOUNT, user, user).save() diff --git a/backend/src/event/EVENT_USER_INFO_UPDATE.ts b/backend/src/event/EVENT_USER_INFO_UPDATE.ts index 681ecd473..6b9d89738 100644 --- a/backend/src/event/EVENT_USER_INFO_UPDATE.ts +++ b/backend/src/event/EVENT_USER_INFO_UPDATE.ts @@ -1,6 +1,7 @@ import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_USER_INFO_UPDATE = async (user: DbUser): Promise => Event(EventType.USER_INFO_UPDATE, user, user).save() diff --git a/backend/src/event/EVENT_USER_LOGIN.ts b/backend/src/event/EVENT_USER_LOGIN.ts index 351ec5a95..81477b8a6 100644 --- a/backend/src/event/EVENT_USER_LOGIN.ts +++ b/backend/src/event/EVENT_USER_LOGIN.ts @@ -1,6 +1,7 @@ import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_USER_LOGIN = async (user: DbUser): Promise => Event(EventType.USER_LOGIN, user, user).save() diff --git a/backend/src/event/EVENT_USER_LOGOUT.ts b/backend/src/event/EVENT_USER_LOGOUT.ts index 4f5650fc6..c6c63405a 100644 --- a/backend/src/event/EVENT_USER_LOGOUT.ts +++ b/backend/src/event/EVENT_USER_LOGOUT.ts @@ -1,6 +1,7 @@ import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_USER_LOGOUT = async (user: DbUser): Promise => Event(EventType.USER_LOGOUT, user, user).save() diff --git a/backend/src/event/EVENT_USER_REGISTER.ts b/backend/src/event/EVENT_USER_REGISTER.ts index cdb8b22e2..45bc6b6f4 100644 --- a/backend/src/event/EVENT_USER_REGISTER.ts +++ b/backend/src/event/EVENT_USER_REGISTER.ts @@ -1,6 +1,7 @@ import { User as DbUser } from '@entity/User' import { Event as DbEvent } from '@entity/Event' -import { Event, EventType } from './Event' +import { Event } from './Event' +import { EventType } from './EventType' export const EVENT_USER_REGISTER = async (user: DbUser): Promise => Event(EventType.USER_REGISTER, user, user).save() diff --git a/backend/src/event/Event.ts b/backend/src/event/Event.ts index feb167adf..d19177b53 100644 --- a/backend/src/event/Event.ts +++ b/backend/src/event/Event.ts @@ -33,37 +33,3 @@ export const Event = ( event.amount = amount return event } - -export { EventType } - -export { EVENT_ADMIN_CONTRIBUTION_CONFIRM } from './EVENT_ADMIN_CONTRIBUTION_CONFIRM' -export { EVENT_ADMIN_CONTRIBUTION_CREATE } from './EVENT_ADMIN_CONTRIBUTION_CREATE' -export { EVENT_ADMIN_CONTRIBUTION_DELETE } from './EVENT_ADMIN_CONTRIBUTION_DELETE' -export { EVENT_ADMIN_CONTRIBUTION_DENY } from './EVENT_ADMIN_CONTRIBUTION_DENY' -export { EVENT_ADMIN_CONTRIBUTION_UPDATE } from './EVENT_ADMIN_CONTRIBUTION_UPDATE' -export { EVENT_ADMIN_CONTRIBUTION_LINK_CREATE } from './EVENT_ADMIN_CONTRIBUTION_LINK_CREATE' -export { EVENT_ADMIN_CONTRIBUTION_LINK_DELETE } from './EVENT_ADMIN_CONTRIBUTION_LINK_DELETE' -export { EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE } from './EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE' -export { EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE } from './EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE' -export { EVENT_ADMIN_USER_DELETE } from './EVENT_ADMIN_USER_DELETE' -export { EVENT_ADMIN_USER_UNDELETE } from './EVENT_ADMIN_USER_UNDELETE' -export { EVENT_ADMIN_USER_ROLE_SET } from './EVENT_ADMIN_USER_ROLE_SET' -export { EVENT_CONTRIBUTION_CREATE } from './EVENT_CONTRIBUTION_CREATE' -export { EVENT_CONTRIBUTION_DELETE } from './EVENT_CONTRIBUTION_DELETE' -export { EVENT_CONTRIBUTION_UPDATE } from './EVENT_CONTRIBUTION_UPDATE' -export { EVENT_CONTRIBUTION_MESSAGE_CREATE } from './EVENT_CONTRIBUTION_MESSAGE_CREATE' -export { EVENT_CONTRIBUTION_LINK_REDEEM } from './EVENT_CONTRIBUTION_LINK_REDEEM' -export { EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION } from './EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION' -export { EVENT_EMAIL_ADMIN_CONFIRMATION } from './EVENT_EMAIL_ADMIN_CONFIRMATION' -export { EVENT_EMAIL_CONFIRMATION } from './EVENT_EMAIL_CONFIRMATION' -export { EVENT_EMAIL_FORGOT_PASSWORD } from './EVENT_EMAIL_FORGOT_PASSWORD' -export { EVENT_TRANSACTION_SEND } from './EVENT_TRANSACTION_SEND' -export { EVENT_TRANSACTION_RECEIVE } from './EVENT_TRANSACTION_RECEIVE' -export { EVENT_TRANSACTION_LINK_CREATE } from './EVENT_TRANSACTION_LINK_CREATE' -export { EVENT_TRANSACTION_LINK_DELETE } from './EVENT_TRANSACTION_LINK_DELETE' -export { EVENT_TRANSACTION_LINK_REDEEM } from './EVENT_TRANSACTION_LINK_REDEEM' -export { EVENT_USER_ACTIVATE_ACCOUNT } from './EVENT_USER_ACTIVATE_ACCOUNT' -export { EVENT_USER_INFO_UPDATE } from './EVENT_USER_INFO_UPDATE' -export { EVENT_USER_LOGIN } from './EVENT_USER_LOGIN' -export { EVENT_USER_LOGOUT } from './EVENT_USER_LOGOUT' -export { EVENT_USER_REGISTER } from './EVENT_USER_REGISTER' diff --git a/backend/src/event/Events.ts b/backend/src/event/Events.ts new file mode 100644 index 000000000..d217cde28 --- /dev/null +++ b/backend/src/event/Events.ts @@ -0,0 +1,33 @@ +export { EventType } from './EventType' +export { Event } from './Event' +export { EVENT_ADMIN_CONTRIBUTION_CONFIRM } from './EVENT_ADMIN_CONTRIBUTION_CONFIRM' +export { EVENT_ADMIN_CONTRIBUTION_CREATE } from './EVENT_ADMIN_CONTRIBUTION_CREATE' +export { EVENT_ADMIN_CONTRIBUTION_DELETE } from './EVENT_ADMIN_CONTRIBUTION_DELETE' +export { EVENT_ADMIN_CONTRIBUTION_DENY } from './EVENT_ADMIN_CONTRIBUTION_DENY' +export { EVENT_ADMIN_CONTRIBUTION_UPDATE } from './EVENT_ADMIN_CONTRIBUTION_UPDATE' +export { EVENT_ADMIN_CONTRIBUTION_LINK_CREATE } from './EVENT_ADMIN_CONTRIBUTION_LINK_CREATE' +export { EVENT_ADMIN_CONTRIBUTION_LINK_DELETE } from './EVENT_ADMIN_CONTRIBUTION_LINK_DELETE' +export { EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE } from './EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE' +export { EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE } from './EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE' +export { EVENT_ADMIN_USER_DELETE } from './EVENT_ADMIN_USER_DELETE' +export { EVENT_ADMIN_USER_UNDELETE } from './EVENT_ADMIN_USER_UNDELETE' +export { EVENT_ADMIN_USER_ROLE_SET } from './EVENT_ADMIN_USER_ROLE_SET' +export { EVENT_CONTRIBUTION_CREATE } from './EVENT_CONTRIBUTION_CREATE' +export { EVENT_CONTRIBUTION_DELETE } from './EVENT_CONTRIBUTION_DELETE' +export { EVENT_CONTRIBUTION_UPDATE } from './EVENT_CONTRIBUTION_UPDATE' +export { EVENT_CONTRIBUTION_MESSAGE_CREATE } from './EVENT_CONTRIBUTION_MESSAGE_CREATE' +export { EVENT_CONTRIBUTION_LINK_REDEEM } from './EVENT_CONTRIBUTION_LINK_REDEEM' +export { EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION } from './EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION' +export { EVENT_EMAIL_ADMIN_CONFIRMATION } from './EVENT_EMAIL_ADMIN_CONFIRMATION' +export { EVENT_EMAIL_CONFIRMATION } from './EVENT_EMAIL_CONFIRMATION' +export { EVENT_EMAIL_FORGOT_PASSWORD } from './EVENT_EMAIL_FORGOT_PASSWORD' +export { EVENT_TRANSACTION_SEND } from './EVENT_TRANSACTION_SEND' +export { EVENT_TRANSACTION_RECEIVE } from './EVENT_TRANSACTION_RECEIVE' +export { EVENT_TRANSACTION_LINK_CREATE } from './EVENT_TRANSACTION_LINK_CREATE' +export { EVENT_TRANSACTION_LINK_DELETE } from './EVENT_TRANSACTION_LINK_DELETE' +export { EVENT_TRANSACTION_LINK_REDEEM } from './EVENT_TRANSACTION_LINK_REDEEM' +export { EVENT_USER_ACTIVATE_ACCOUNT } from './EVENT_USER_ACTIVATE_ACCOUNT' +export { EVENT_USER_INFO_UPDATE } from './EVENT_USER_INFO_UPDATE' +export { EVENT_USER_LOGIN } from './EVENT_USER_LOGIN' +export { EVENT_USER_LOGOUT } from './EVENT_USER_LOGOUT' +export { EVENT_USER_REGISTER } from './EVENT_USER_REGISTER' diff --git a/backend/src/graphql/resolver/ContributionLinkResolver.test.ts b/backend/src/graphql/resolver/ContributionLinkResolver.test.ts index 6a69e257e..d89edc695 100644 --- a/backend/src/graphql/resolver/ContributionLinkResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionLinkResolver.test.ts @@ -20,7 +20,7 @@ import { cleanDB, testEnvironment, resetToken } from '@test/helpers' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' import { userFactory } from '@/seeds/factory/user' -import { EventType } from '@/event/Event' +import { EventType } from '@/event/Events' let mutate: any, query: any, con: any let testEnv: any diff --git a/backend/src/graphql/resolver/ContributionLinkResolver.ts b/backend/src/graphql/resolver/ContributionLinkResolver.ts index 55a23187f..6328bd3bc 100644 --- a/backend/src/graphql/resolver/ContributionLinkResolver.ts +++ b/backend/src/graphql/resolver/ContributionLinkResolver.ts @@ -25,7 +25,7 @@ import { EVENT_ADMIN_CONTRIBUTION_LINK_CREATE, EVENT_ADMIN_CONTRIBUTION_LINK_DELETE, EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE, -} from '@/event/Event' +} from '@/event/Events' @Resolver() export class ContributionLinkResolver { diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts index 6b2c7c4d8..b8125f8cb 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts @@ -21,7 +21,7 @@ import { userFactory } from '@/seeds/factory/user' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' import { sendAddedContributionMessageEmail } from '@/emails/sendEmailVariants' -import { EventType } from '@/event/Event' +import { EventType } from '@/event/Events' jest.mock('@/emails/sendEmailVariants', () => { const originalModule = jest.requireActual('@/emails/sendEmailVariants') diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts index 999ccc2b1..276183894 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts @@ -21,7 +21,7 @@ import LogError from '@/server/LogError' import { EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE, EVENT_CONTRIBUTION_MESSAGE_CREATE, -} from '@/event/Event' +} from '@/event/Events' @Resolver() export class ContributionMessageResolver { diff --git a/backend/src/graphql/resolver/ContributionResolver.test.ts b/backend/src/graphql/resolver/ContributionResolver.test.ts index df8524a0c..b99c6b0c7 100644 --- a/backend/src/graphql/resolver/ContributionResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionResolver.test.ts @@ -51,7 +51,7 @@ import { userFactory } from '@/seeds/factory/user' import { creationFactory } from '@/seeds/factory/creation' import { creations } from '@/seeds/creation/index' import { peterLustig } from '@/seeds/users/peter-lustig' -import { EventType } from '@/event/Event' +import { EventType } from '@/event/Events' import { logger, i18n as localization } from '@test/testSetup' import { raeuberHotzenplotz } from '@/seeds/users/raeuber-hotzenplotz' import { UnconfirmedContribution } from '@model/UnconfirmedContribution' diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index 83cf29fc7..e5112e8b4 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -46,7 +46,7 @@ import { EVENT_ADMIN_CONTRIBUTION_DELETE, EVENT_ADMIN_CONTRIBUTION_CONFIRM, EVENT_ADMIN_CONTRIBUTION_DENY, -} from '@/event/Event' +} from '@/event/Events' import { calculateDecay } from '@/util/decay' import { sendContributionConfirmedEmail, diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts index 5c2fff0ad..1a15a65a9 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts @@ -35,7 +35,7 @@ import { listTransactionLinksAdmin } from '@/seeds/graphql/queries' import { UnconfirmedContribution } from '@model/UnconfirmedContribution' import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' import { logger } from '@test/testSetup' -import { EventType } from '@/event/Event' +import { EventType } from '@/event/Events' // mock semaphore to allow use fake timers jest.mock('@/util/TRANSACTIONS_LOCK') diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts index 6aa829ac1..3b2f7704a 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts @@ -38,7 +38,7 @@ import { EVENT_TRANSACTION_LINK_CREATE, EVENT_TRANSACTION_LINK_DELETE, EVENT_TRANSACTION_LINK_REDEEM, -} from '@/event/Event' +} from '@/event/Events' // TODO: do not export, test it inside the resolver export const transactionLinkCode = (date: Date): string => { diff --git a/backend/src/graphql/resolver/TransactionResolver.test.ts b/backend/src/graphql/resolver/TransactionResolver.test.ts index f26234363..0ac1f724a 100644 --- a/backend/src/graphql/resolver/TransactionResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionResolver.test.ts @@ -11,7 +11,7 @@ import { User } from '@entity/User' import { GraphQLError } from 'graphql' import { Event as DbEvent } from '@entity/Event' import { findUserByEmail } from './UserResolver' -import { EventType } from '@/event/Event' +import { EventType } from '@/event/Events' import { userFactory } from '@/seeds/factory/user' import { confirmContribution, diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index f38a4a07b..3620dbcef 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -34,7 +34,7 @@ import { sendTransactionLinkRedeemedEmail, sendTransactionReceivedEmail, } from '@/emails/sendEmailVariants' -import { EVENT_TRANSACTION_RECEIVE, EVENT_TRANSACTION_SEND } from '@/event/Event' +import { EVENT_TRANSACTION_RECEIVE, EVENT_TRANSACTION_SEND } from '@/event/Events' import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' import LogError from '@/server/LogError' diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index aebd0f0eb..735c27950 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -45,7 +45,7 @@ import { import { contributionLinkFactory } from '@/seeds/factory/contributionLink' import { transactionLinkFactory } from '@/seeds/factory/transactionLink' import { ContributionLink } from '@model/ContributionLink' -import { EventType } from '@/event/Event' +import { EventType } from '@/event/Events' import { peterLustig } from '@/seeds/users/peter-lustig' import { bobBaumeister } from '@/seeds/users/bob-baumeister' import { stephenHawking } from '@/seeds/users/stephen-hawking' diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 54d4f583f..8f72b3bcf 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -70,7 +70,7 @@ import { EVENT_ADMIN_USER_ROLE_SET, EVENT_ADMIN_USER_DELETE, EVENT_ADMIN_USER_UNDELETE, -} from '@/event/Event' +} from '@/event/Events' import { isValidPassword } from '@/password/EncryptorUtils' import { encryptPassword, verifyPassword } from '@/password/PasswordEncryptor' import LogError from '@/server/LogError' From 05fc48198e28fdad9d15b290aa71690c695ebd4d Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 31 Mar 2023 12:08:55 +0200 Subject: [PATCH 03/20] merge conflicts --- backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts | 2 -- backend/src/graphql/resolver/ContributionLinkResolver.test.ts | 2 +- backend/src/graphql/resolver/TransactionLinkResolver.test.ts | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts index 390662ec1..36cabba63 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts @@ -1,10 +1,8 @@ import { Contribution as DbContribution } from '@entity/Contribution' import { Event as DbEvent } from '@entity/Event' - import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' - import { Event } from './Event' import { EventType } from './EventType' diff --git a/backend/src/graphql/resolver/ContributionLinkResolver.test.ts b/backend/src/graphql/resolver/ContributionLinkResolver.test.ts index 2247318a3..318b5a230 100644 --- a/backend/src/graphql/resolver/ContributionLinkResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionLinkResolver.test.ts @@ -12,7 +12,7 @@ import { GraphQLError } from 'graphql' import { cleanDB, testEnvironment, resetToken } from '@test/helpers' import { logger } from '@test/testSetup' -import { EventType } from '@/event/Event' +import { EventType } from '@/event/Events' import { userFactory } from '@/seeds/factory/user' import { login, diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts index 70238e515..0d47b8006 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts @@ -18,7 +18,7 @@ import { UnconfirmedContribution } from '@model/UnconfirmedContribution' import { cleanDB, testEnvironment, resetToken, resetEntity } from '@test/helpers' import { logger } from '@test/testSetup' -import { EventType } from '@/event/Event' +import { EventType } from '@/event/Events' import { creations } from '@/seeds/creation/index' import { creationFactory } from '@/seeds/factory/creation' import { transactionLinkFactory } from '@/seeds/factory/transactionLink' From 1fa6d3e46943acf9f3697c4b3cb2a61cfd319a31 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 31 Mar 2023 12:10:50 +0200 Subject: [PATCH 04/20] lint fixes --- backend/src/graphql/resolver/ContributionResolver.test.ts | 4 ++-- backend/src/graphql/resolver/TransactionLinkResolver.test.ts | 1 + backend/src/graphql/resolver/TransactionResolver.test.ts | 1 + backend/src/graphql/resolver/TransactionResolver.ts | 3 +-- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/backend/src/graphql/resolver/ContributionResolver.test.ts b/backend/src/graphql/resolver/ContributionResolver.test.ts index 5bca29972..8a391618e 100644 --- a/backend/src/graphql/resolver/ContributionResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionResolver.test.ts @@ -25,12 +25,14 @@ import { contributionDateFormatter, resetEntity, } from '@test/helpers' +import { logger, i18n as localization } from '@test/testSetup' import { sendContributionConfirmedEmail, sendContributionDeletedEmail, sendContributionDeniedEmail, } from '@/emails/sendEmailVariants' +import { EventType } from '@/event/Events' import { creations } from '@/seeds/creation/index' import { creationFactory } from '@/seeds/factory/creation' import { userFactory } from '@/seeds/factory/user' @@ -56,8 +58,6 @@ import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { bobBaumeister } from '@/seeds/users/bob-baumeister' import { garrickOllivander } from '@/seeds/users/garrick-ollivander' import { peterLustig } from '@/seeds/users/peter-lustig' -import { EventType } from '@/event/Events' -import { logger, i18n as localization } from '@test/testSetup' import { raeuberHotzenplotz } from '@/seeds/users/raeuber-hotzenplotz' import { stephenHawking } from '@/seeds/users/stephen-hawking' diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts index 0d47b8006..1c79e2815 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts @@ -38,6 +38,7 @@ import { transactionLinks } from '@/seeds/transactionLink/index' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' + import { transactionLinkCode } from './TransactionLinkResolver' // mock semaphore to allow use fake timers diff --git a/backend/src/graphql/resolver/TransactionResolver.test.ts b/backend/src/graphql/resolver/TransactionResolver.test.ts index 63606e4ee..65fb13996 100644 --- a/backend/src/graphql/resolver/TransactionResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionResolver.test.ts @@ -10,6 +10,7 @@ import { Transaction } from '@entity/Transaction' import { User } from '@entity/User' import { Decimal } from 'decimal.js-light' import { GraphQLError } from 'graphql' + import { cleanDB, testEnvironment } from '@test/helpers' import { logger } from '@test/testSetup' diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index a78d51e7a..eb9b19b3f 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -25,12 +25,11 @@ import { sendTransactionReceivedEmail, } from '@/emails/sendEmailVariants' import { EVENT_TRANSACTION_RECEIVE, EVENT_TRANSACTION_SEND } from '@/event/Events' - -import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' import { Context, getUser } from '@/server/context' import LogError from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' import { communityUser } from '@/util/communityUser' +import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' import { calculateBalance } from '@/util/validate' import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualTransactions' From ae8405e8f688d6a33572684544f76beb0ecf521a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 31 Mar 2023 12:48:09 +0200 Subject: [PATCH 05/20] merge --- backend/.eslintrc.js | 4 +-- backend/src/apis/HttpRequest.ts | 2 +- backend/src/apis/KlicktippController.ts | 3 +- backend/src/auth/JWT.ts | 4 +-- backend/src/config/index.test.ts | 2 +- backend/src/config/index.ts | 4 +-- .../src/emails/sendEmailTranslated.test.ts | 2 +- backend/src/emails/sendEmailTranslated.ts | 4 +-- backend/src/emails/sendEmailVariants.test.ts | 11 +++--- backend/src/emails/sendEmailVariants.ts | 5 ++- .../federation/client/1_0/FederationClient.ts | 2 +- .../federation/client/1_1/FederationClient.ts | 2 +- backend/src/federation/validateCommunities.ts | 5 ++- .../arg/AdminCreateContributionArgs.ts | 2 +- .../arg/AdminUpdateContributionArgs.ts | 2 +- backend/src/graphql/arg/ContributionArgs.ts | 2 +- .../src/graphql/arg/ContributionLinkArgs.ts | 2 +- .../graphql/arg/ContributionMessageArgs.ts | 2 +- backend/src/graphql/arg/CreateUserArgs.ts | 2 +- backend/src/graphql/arg/Paginated.ts | 2 +- backend/src/graphql/arg/SearchUsersArgs.ts | 4 +-- backend/src/graphql/arg/SearchUsersFilters.ts | 2 +- .../src/graphql/arg/TransactionLinkArgs.ts | 2 +- .../src/graphql/arg/TransactionLinkFilters.ts | 2 +- .../src/graphql/arg/TransactionSendArgs.ts | 2 +- backend/src/graphql/arg/UnsecureLoginArgs.ts | 2 +- .../src/graphql/arg/UpdateUserInfosArgs.ts | 2 +- backend/src/graphql/directive/isAuthorized.ts | 6 ++-- backend/src/graphql/model/ContributionLink.ts | 2 +- backend/src/graphql/model/TransactionLink.ts | 3 +- .../resolver/ContributionLinkResolver.ts | 31 ++++++++--------- .../resolver/ContributionMessageResolver.ts | 12 +++---- .../graphql/resolver/ContributionResolver.ts | 34 +++++++++---------- .../graphql/resolver/EmailOptinCodes.test.ts | 2 +- backend/src/graphql/resolver/GdtResolver.ts | 10 +++--- .../resolver/TransactionLinkResolver.ts | 21 ++++++------ .../graphql/resolver/TransactionResolver.ts | 16 +++++---- .../src/graphql/resolver/UserResolver.test.ts | 4 +-- backend/src/graphql/resolver/UserResolver.ts | 28 ++++++++------- .../src/graphql/resolver/util/creations.ts | 2 +- .../resolver/util/transactionLinkList.ts | 7 ++-- backend/src/graphql/scalar/Decimal.ts | 4 +-- backend/src/graphql/schema.ts | 8 ++--- backend/src/index.ts | 5 +-- backend/src/middleware/klicktippMiddleware.ts | 2 +- backend/src/password/EncryptorUtils.ts | 5 ++- backend/src/seeds/index.ts | 4 +-- backend/src/server/LogError.test.ts | 2 +- backend/src/server/LogError.ts | 2 +- backend/src/server/context.ts | 7 ++-- backend/src/server/cors.ts | 4 +-- backend/src/server/createServer.ts | 22 +++++------- backend/src/server/logger.ts | 2 +- backend/src/server/plugins.ts | 4 +-- backend/src/typeorm/connection.ts | 7 ++-- backend/src/typeorm/repository/User.ts | 2 +- backend/src/util/decay.ts | 6 ++-- backend/src/util/klicktipp.ts | 5 ++- backend/test/helpers.ts | 3 +- backend/test/testSetup.ts | 4 +-- 60 files changed, 167 insertions(+), 189 deletions(-) diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index 9d663bdea..7231e0934 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -71,7 +71,7 @@ module.exports = { 'import/group-exports': 'off', 'import/newline-after-import': 'error', 'import/no-anonymous-default-export': 'error', - 'import/no-default-export': 'off', + 'import/no-default-export': 'error', 'import/no-duplicates': 'error', 'import/no-named-default': 'error', 'import/no-namespace': 'error', @@ -100,7 +100,7 @@ module.exports = { distinctGroup: true, }, ], - 'import/prefer-default-export': 'off', // TODO + 'import/prefer-default-export': 'off', }, overrides: [ // only for ts files diff --git a/backend/src/apis/HttpRequest.ts b/backend/src/apis/HttpRequest.ts index d8de68bb8..7272e4bfc 100644 --- a/backend/src/apis/HttpRequest.ts +++ b/backend/src/apis/HttpRequest.ts @@ -2,8 +2,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import axios from 'axios' -import LogError from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' +import { LogError } from '@/server/LogError' // eslint-disable-next-line @typescript-eslint/no-explicit-any export const apiPost = async (url: string, payload: unknown): Promise => { diff --git a/backend/src/apis/KlicktippController.ts b/backend/src/apis/KlicktippController.ts index 309cf56ee..6dcfac0bf 100644 --- a/backend/src/apis/KlicktippController.ts +++ b/backend/src/apis/KlicktippController.ts @@ -4,11 +4,12 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import CONFIG from '@/config' // eslint-disable-next-line import/no-relative-parent-imports import KlicktippConnector from 'klicktipp-api' +import { CONFIG } from '@/config' + const klicktippConnector = new KlicktippConnector() export const klicktippSignIn = async ( diff --git a/backend/src/auth/JWT.ts b/backend/src/auth/JWT.ts index 93a6a8868..75a69cd0c 100644 --- a/backend/src/auth/JWT.ts +++ b/backend/src/auth/JWT.ts @@ -1,7 +1,7 @@ import { verify, sign } from 'jsonwebtoken' -import CONFIG from '@/config/' -import LogError from '@/server/LogError' +import { CONFIG } from '@/config/' +import { LogError } from '@/server/LogError' import { CustomJwtPayload } from './CustomJwtPayload' diff --git a/backend/src/config/index.test.ts b/backend/src/config/index.test.ts index 1dabf9292..24908513a 100644 --- a/backend/src/config/index.test.ts +++ b/backend/src/config/index.test.ts @@ -1,4 +1,4 @@ -import CONFIG from './index' +import { CONFIG } from './index' describe('config/index', () => { describe('decay start block', () => { diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index e6c4e4c24..97786ce3a 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -120,7 +120,7 @@ const federation = { Number(process.env.FEDERATION_VALIDATE_COMMUNITY_TIMER) || 60000, } -const CONFIG = { +export const CONFIG = { ...constants, ...server, ...database, @@ -131,5 +131,3 @@ const CONFIG = { ...webhook, ...federation, } - -export default CONFIG diff --git a/backend/src/emails/sendEmailTranslated.test.ts b/backend/src/emails/sendEmailTranslated.test.ts index 85074344a..66efb29a9 100644 --- a/backend/src/emails/sendEmailTranslated.test.ts +++ b/backend/src/emails/sendEmailTranslated.test.ts @@ -4,7 +4,7 @@ import { createTransport } from 'nodemailer' import { logger, i18n } from '@test/testSetup' -import CONFIG from '@/config' +import { CONFIG } from '@/config' import { sendEmailTranslated } from './sendEmailTranslated' diff --git a/backend/src/emails/sendEmailTranslated.ts b/backend/src/emails/sendEmailTranslated.ts index 6d89cc257..f16e34511 100644 --- a/backend/src/emails/sendEmailTranslated.ts +++ b/backend/src/emails/sendEmailTranslated.ts @@ -5,9 +5,9 @@ import Email from 'email-templates' import i18n from 'i18n' import { createTransport } from 'nodemailer' -import CONFIG from '@/config' -import LogError from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' +import { CONFIG } from '@/config' +import { LogError } from '@/server/LogError' export const sendEmailTranslated = async (params: { receiver: { diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index 44d996fa8..9a6ad3183 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -5,12 +5,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { Decimal } from 'decimal.js-light' -import { testEnvironment } from '@test/helpers' -import { logger, i18n as localization } from '@test/testSetup' - -import CONFIG from '@/config' - -import { sendEmailTranslated } from './sendEmailTranslated' import { sendAddedContributionMessageEmail, sendAccountActivationEmail, @@ -23,6 +17,11 @@ import { sendTransactionReceivedEmail, } from './sendEmailVariants' +import { sendEmailTranslated } from './sendEmailTranslated' +import { testEnvironment } from '@test/helpers' +import { logger, i18n as localization } from '@test/testSetup' +import { CONFIG } from '@/config' + let con: any let testEnv: any diff --git a/backend/src/emails/sendEmailVariants.ts b/backend/src/emails/sendEmailVariants.ts index b45e7fc67..8f0ee0f2d 100644 --- a/backend/src/emails/sendEmailVariants.ts +++ b/backend/src/emails/sendEmailVariants.ts @@ -1,9 +1,8 @@ import { Decimal } from 'decimal.js-light' -import CONFIG from '@/config' -import { decimalSeparatorByLanguage } from '@/util/utilities' - import { sendEmailTranslated } from './sendEmailTranslated' +import { CONFIG } from '@/config' +import { decimalSeparatorByLanguage } from '@/util/utilities' export const sendAddedContributionMessageEmail = (data: { firstName: string diff --git a/backend/src/federation/client/1_0/FederationClient.ts b/backend/src/federation/client/1_0/FederationClient.ts index c4063e4c5..e7f7fc1a4 100644 --- a/backend/src/federation/client/1_0/FederationClient.ts +++ b/backend/src/federation/client/1_0/FederationClient.ts @@ -5,8 +5,8 @@ import { Community as DbCommunity } from '@entity/Community' import { gql } from 'graphql-request' import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient' -import LogError from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' +import { LogError } from '@/server/LogError' export async function requestGetPublicKey(dbCom: DbCommunity): Promise { let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' diff --git a/backend/src/federation/client/1_1/FederationClient.ts b/backend/src/federation/client/1_1/FederationClient.ts index b29960407..00f1d582e 100644 --- a/backend/src/federation/client/1_1/FederationClient.ts +++ b/backend/src/federation/client/1_1/FederationClient.ts @@ -5,8 +5,8 @@ import { Community as DbCommunity } from '@entity/Community' import { gql } from 'graphql-request' import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient' -import LogError from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' +import { LogError } from '@/server/LogError' export async function requestGetPublicKey(dbCom: DbCommunity): Promise { let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' diff --git a/backend/src/federation/validateCommunities.ts b/backend/src/federation/validateCommunities.ts index fb6bda673..f609fab51 100644 --- a/backend/src/federation/validateCommunities.ts +++ b/backend/src/federation/validateCommunities.ts @@ -1,14 +1,13 @@ import { IsNull } from '@dbTools/typeorm' import { Community as DbCommunity } from '@entity/Community' -import LogError from '@/server/LogError' -import { backendLogger as logger } from '@/server/logger' - // eslint-disable-next-line camelcase import { requestGetPublicKey as v1_0_requestGetPublicKey } from './client/1_0/FederationClient' // eslint-disable-next-line camelcase import { requestGetPublicKey as v1_1_requestGetPublicKey } from './client/1_1/FederationClient' import { ApiVersionType } from './enum/apiVersionType' +import { backendLogger as logger } from '@/server/logger' +import { LogError } from '@/server/LogError' export function startValidateCommunities(timerInterval: number): void { logger.info( diff --git a/backend/src/graphql/arg/AdminCreateContributionArgs.ts b/backend/src/graphql/arg/AdminCreateContributionArgs.ts index 65aeb82e5..8e2fa28da 100644 --- a/backend/src/graphql/arg/AdminCreateContributionArgs.ts +++ b/backend/src/graphql/arg/AdminCreateContributionArgs.ts @@ -3,7 +3,7 @@ import { ArgsType, Field, InputType } from 'type-graphql' @InputType() @ArgsType() -export default class AdminCreateContributionArgs { +export class AdminCreateContributionArgs { @Field(() => String) email: string diff --git a/backend/src/graphql/arg/AdminUpdateContributionArgs.ts b/backend/src/graphql/arg/AdminUpdateContributionArgs.ts index 6a8f00dc2..e79260c63 100644 --- a/backend/src/graphql/arg/AdminUpdateContributionArgs.ts +++ b/backend/src/graphql/arg/AdminUpdateContributionArgs.ts @@ -2,7 +2,7 @@ import { Decimal } from 'decimal.js-light' import { ArgsType, Field, Int } from 'type-graphql' @ArgsType() -export default class AdminUpdateContributionArgs { +export class AdminUpdateContributionArgs { @Field(() => Int) id: number diff --git a/backend/src/graphql/arg/ContributionArgs.ts b/backend/src/graphql/arg/ContributionArgs.ts index cc8aea41e..db688d811 100644 --- a/backend/src/graphql/arg/ContributionArgs.ts +++ b/backend/src/graphql/arg/ContributionArgs.ts @@ -3,7 +3,7 @@ import { ArgsType, Field, InputType } from 'type-graphql' @InputType() @ArgsType() -export default class ContributionArgs { +export class ContributionArgs { @Field(() => Decimal) amount: Decimal diff --git a/backend/src/graphql/arg/ContributionLinkArgs.ts b/backend/src/graphql/arg/ContributionLinkArgs.ts index d28a7808f..cef72148a 100644 --- a/backend/src/graphql/arg/ContributionLinkArgs.ts +++ b/backend/src/graphql/arg/ContributionLinkArgs.ts @@ -2,7 +2,7 @@ import { Decimal } from 'decimal.js-light' import { ArgsType, Field, Int } from 'type-graphql' @ArgsType() -export default class ContributionLinkArgs { +export class ContributionLinkArgs { @Field(() => Decimal) amount: Decimal diff --git a/backend/src/graphql/arg/ContributionMessageArgs.ts b/backend/src/graphql/arg/ContributionMessageArgs.ts index 8b44756a6..d36e1832d 100644 --- a/backend/src/graphql/arg/ContributionMessageArgs.ts +++ b/backend/src/graphql/arg/ContributionMessageArgs.ts @@ -2,7 +2,7 @@ import { ArgsType, Field, Int, InputType } from 'type-graphql' @InputType() @ArgsType() -export default class ContributionMessageArgs { +export class ContributionMessageArgs { @Field(() => Int) contributionId: number diff --git a/backend/src/graphql/arg/CreateUserArgs.ts b/backend/src/graphql/arg/CreateUserArgs.ts index 56acfd63d..cb263b84a 100644 --- a/backend/src/graphql/arg/CreateUserArgs.ts +++ b/backend/src/graphql/arg/CreateUserArgs.ts @@ -1,7 +1,7 @@ import { ArgsType, Field, Int } from 'type-graphql' @ArgsType() -export default class CreateUserArgs { +export class CreateUserArgs { @Field(() => String) email: string diff --git a/backend/src/graphql/arg/Paginated.ts b/backend/src/graphql/arg/Paginated.ts index e605c49d4..a1e792ef7 100644 --- a/backend/src/graphql/arg/Paginated.ts +++ b/backend/src/graphql/arg/Paginated.ts @@ -4,7 +4,7 @@ import { ArgsType, Field, Int } from 'type-graphql' import { Order } from '@enum/Order' @ArgsType() -export default class Paginated { +export class Paginated { @Field(() => Int, { nullable: true }) currentPage?: number diff --git a/backend/src/graphql/arg/SearchUsersArgs.ts b/backend/src/graphql/arg/SearchUsersArgs.ts index de7275f63..0ebc442c3 100644 --- a/backend/src/graphql/arg/SearchUsersArgs.ts +++ b/backend/src/graphql/arg/SearchUsersArgs.ts @@ -1,9 +1,9 @@ import { ArgsType, Field, Int } from 'type-graphql' -import SearchUsersFilters from '@arg/SearchUsersFilters' +import { SearchUsersFilters } from '@arg/SearchUsersFilters' @ArgsType() -export default class SearchUsersArgs { +export class SearchUsersArgs { @Field(() => String) searchText: string diff --git a/backend/src/graphql/arg/SearchUsersFilters.ts b/backend/src/graphql/arg/SearchUsersFilters.ts index efcdfa00d..a6ea09268 100644 --- a/backend/src/graphql/arg/SearchUsersFilters.ts +++ b/backend/src/graphql/arg/SearchUsersFilters.ts @@ -1,7 +1,7 @@ import { Field, InputType } from 'type-graphql' @InputType() -export default class SearchUsersFilters { +export class SearchUsersFilters { @Field(() => Boolean, { nullable: true, defaultValue: null }) byActivated?: boolean | null diff --git a/backend/src/graphql/arg/TransactionLinkArgs.ts b/backend/src/graphql/arg/TransactionLinkArgs.ts index 19720e321..f44ef0356 100644 --- a/backend/src/graphql/arg/TransactionLinkArgs.ts +++ b/backend/src/graphql/arg/TransactionLinkArgs.ts @@ -2,7 +2,7 @@ import { Decimal } from 'decimal.js-light' import { ArgsType, Field } from 'type-graphql' @ArgsType() -export default class TransactionLinkArgs { +export class TransactionLinkArgs { @Field(() => Decimal) amount: Decimal diff --git a/backend/src/graphql/arg/TransactionLinkFilters.ts b/backend/src/graphql/arg/TransactionLinkFilters.ts index 13d630d17..de8643260 100644 --- a/backend/src/graphql/arg/TransactionLinkFilters.ts +++ b/backend/src/graphql/arg/TransactionLinkFilters.ts @@ -2,7 +2,7 @@ import { Field, InputType } from 'type-graphql' @InputType() -export default class TransactionLinkFilters { +export class TransactionLinkFilters { @Field(() => Boolean, { nullable: true }) withDeleted?: boolean diff --git a/backend/src/graphql/arg/TransactionSendArgs.ts b/backend/src/graphql/arg/TransactionSendArgs.ts index d91cecbcd..05779ec22 100644 --- a/backend/src/graphql/arg/TransactionSendArgs.ts +++ b/backend/src/graphql/arg/TransactionSendArgs.ts @@ -2,7 +2,7 @@ import { Decimal } from 'decimal.js-light' import { ArgsType, Field } from 'type-graphql' @ArgsType() -export default class TransactionSendArgs { +export class TransactionSendArgs { @Field(() => String) email: string diff --git a/backend/src/graphql/arg/UnsecureLoginArgs.ts b/backend/src/graphql/arg/UnsecureLoginArgs.ts index a2a7bb683..ad5a934f9 100644 --- a/backend/src/graphql/arg/UnsecureLoginArgs.ts +++ b/backend/src/graphql/arg/UnsecureLoginArgs.ts @@ -1,7 +1,7 @@ import { ArgsType, Field, Int } from 'type-graphql' @ArgsType() -export default class UnsecureLoginArgs { +export class UnsecureLoginArgs { @Field(() => String) email: string diff --git a/backend/src/graphql/arg/UpdateUserInfosArgs.ts b/backend/src/graphql/arg/UpdateUserInfosArgs.ts index 985d3fed6..2f9df8dd7 100644 --- a/backend/src/graphql/arg/UpdateUserInfosArgs.ts +++ b/backend/src/graphql/arg/UpdateUserInfosArgs.ts @@ -1,7 +1,7 @@ import { ArgsType, Field, Int } from 'type-graphql' @ArgsType() -export default class UpdateUserInfosArgs { +export class UpdateUserInfosArgs { @Field({ nullable: true }) firstName?: string diff --git a/backend/src/graphql/directive/isAuthorized.ts b/backend/src/graphql/directive/isAuthorized.ts index a018fd230..f65a7579a 100644 --- a/backend/src/graphql/directive/isAuthorized.ts +++ b/backend/src/graphql/directive/isAuthorized.ts @@ -9,9 +9,9 @@ import { INALIENABLE_RIGHTS } from '@/auth/INALIENABLE_RIGHTS' import { decode, encode } from '@/auth/JWT' import { RIGHTS } from '@/auth/RIGHTS' import { ROLE_UNAUTHORIZED, ROLE_USER, ROLE_ADMIN } from '@/auth/ROLES' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' -const isAuthorized: AuthChecker = async ({ context }, rights) => { +export const isAuthorized: AuthChecker = async ({ context }, rights) => { context.role = ROLE_UNAUTHORIZED // unauthorized user // is rights an inalienable right? @@ -55,5 +55,3 @@ const isAuthorized: AuthChecker = async ({ context }, rights) => { context.setHeaders.push({ key: 'token', value: encode(decoded.gradidoID) }) return true } - -export default isAuthorized diff --git a/backend/src/graphql/model/ContributionLink.ts b/backend/src/graphql/model/ContributionLink.ts index e47ffc6ed..1576fc97a 100644 --- a/backend/src/graphql/model/ContributionLink.ts +++ b/backend/src/graphql/model/ContributionLink.ts @@ -2,7 +2,7 @@ import { ContributionLink as dbContributionLink } from '@entity/ContributionLink import { Decimal } from 'decimal.js-light' import { ObjectType, Field, Int } from 'type-graphql' -import CONFIG from '@/config' +import { CONFIG } from '@/config' @ObjectType() export class ContributionLink { diff --git a/backend/src/graphql/model/TransactionLink.ts b/backend/src/graphql/model/TransactionLink.ts index 7356e97c6..3a6330839 100644 --- a/backend/src/graphql/model/TransactionLink.ts +++ b/backend/src/graphql/model/TransactionLink.ts @@ -1,8 +1,9 @@ import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' + import { Decimal } from 'decimal.js-light' import { ObjectType, Field, Int } from 'type-graphql' -import CONFIG from '@/config' +import { CONFIG } from '@/config' import { User } from './User' diff --git a/backend/src/graphql/resolver/ContributionLinkResolver.ts b/backend/src/graphql/resolver/ContributionLinkResolver.ts index 462dbf99f..7f87ccd8c 100644 --- a/backend/src/graphql/resolver/ContributionLinkResolver.ts +++ b/backend/src/graphql/resolver/ContributionLinkResolver.ts @@ -3,22 +3,6 @@ import { ContributionLink as DbContributionLink } from '@entity/ContributionLink import { Decimal } from 'decimal.js-light' import { Resolver, Args, Arg, Authorized, Mutation, Query, Int, Ctx } from 'type-graphql' -// TODO: this is a strange construct -import ContributionLinkArgs from '@arg/ContributionLinkArgs' -import Paginated from '@arg/Paginated' -import { Order } from '@enum/Order' -import { ContributionLink } from '@model/ContributionLink' -import { ContributionLinkList } from '@model/ContributionLinkList' - -import { RIGHTS } from '@/auth/RIGHTS' -import { - EVENT_ADMIN_CONTRIBUTION_LINK_CREATE, - EVENT_ADMIN_CONTRIBUTION_LINK_DELETE, - EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE, -} from '@/event/Events' -import { Context, getUser } from '@/server/context' -import LogError from '@/server/LogError' - import { CONTRIBUTIONLINK_NAME_MAX_CHARS, CONTRIBUTIONLINK_NAME_MIN_CHARS, @@ -27,6 +11,21 @@ import { } from './const/const' import { transactionLinkCode as contributionLinkCode } from './TransactionLinkResolver' import { isStartEndDateValid } from './util/creations' +import { ContributionLinkList } from '@model/ContributionLinkList' +import { ContributionLink } from '@model/ContributionLink' +import { ContributionLinkArgs } from '@arg/ContributionLinkArgs' +import { RIGHTS } from '@/auth/RIGHTS' +import { Order } from '@enum/Order' +import { Paginated } from '@arg/Paginated' + +// TODO: this is a strange construct +import { LogError } from '@/server/LogError' +import { Context, getUser } from '@/server/context' +import { + EVENT_ADMIN_CONTRIBUTION_LINK_CREATE, + EVENT_ADMIN_CONTRIBUTION_LINK_DELETE, + EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE, +} from '@/event/Events' @Resolver() export class ContributionLinkResolver { diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts index 4f454d420..90bfccb9c 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts @@ -6,21 +6,21 @@ import { User as DbUser } from '@entity/User' import { UserContact as DbUserContact } from '@entity/UserContact' import { Arg, Args, Authorized, Ctx, Int, Mutation, Query, Resolver } from 'type-graphql' -import ContributionMessageArgs from '@arg/ContributionMessageArgs' -import Paginated from '@arg/Paginated' -import { ContributionStatus } from '@enum/ContributionStatus' -import { ContributionMessageType } from '@enum/MessageType' -import { Order } from '@enum/Order' import { ContributionMessage, ContributionMessageListResult } from '@model/ContributionMessage' +import { ContributionMessageArgs } from '@arg/ContributionMessageArgs' +import { ContributionMessageType } from '@enum/MessageType' +import { ContributionStatus } from '@enum/ContributionStatus' +import { Order } from '@enum/Order' +import { Paginated } from '@arg/Paginated' import { RIGHTS } from '@/auth/RIGHTS' import { sendAddedContributionMessageEmail } from '@/emails/sendEmailVariants' +import { LogError } from '@/server/LogError' import { EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE, EVENT_CONTRIBUTION_MESSAGE_CREATE, } from '@/event/Events' import { Context, getUser } from '@/server/context' -import LogError from '@/server/LogError' @Resolver() export class ContributionMessageResolver { diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index 60f03020a..5fd86136b 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -8,27 +8,22 @@ import { UserContact } from '@entity/UserContact' import { Decimal } from 'decimal.js-light' import { Arg, Args, Authorized, Ctx, Int, Mutation, Query, Resolver } from 'type-graphql' -import AdminCreateContributionArgs from '@arg/AdminCreateContributionArgs' -import AdminUpdateContributionArgs from '@arg/AdminUpdateContributionArgs' -import ContributionArgs from '@arg/ContributionArgs' -import Paginated from '@arg/Paginated' -import { ContributionStatus } from '@enum/ContributionStatus' -import { ContributionType } from '@enum/ContributionType' -import { ContributionMessageType } from '@enum/MessageType' -import { Order } from '@enum/Order' -import { TransactionTypeId } from '@enum/TransactionTypeId' import { AdminUpdateContribution } from '@model/AdminUpdateContribution' import { Contribution, ContributionListResult } from '@model/Contribution' import { Decay } from '@model/Decay' import { OpenCreation } from '@model/OpenCreation' import { UnconfirmedContribution } from '@model/UnconfirmedContribution' +import { TransactionTypeId } from '@enum/TransactionTypeId' +import { Order } from '@enum/Order' +import { ContributionType } from '@enum/ContributionType' +import { ContributionStatus } from '@enum/ContributionStatus' +import { ContributionMessageType } from '@enum/MessageType' +import { ContributionArgs } from '@arg/ContributionArgs' +import { Paginated } from '@arg/Paginated' +import { AdminCreateContributionArgs } from '@arg/AdminCreateContributionArgs' +import { AdminUpdateContributionArgs } from '@arg/AdminUpdateContributionArgs' import { RIGHTS } from '@/auth/RIGHTS' -import { - sendContributionConfirmedEmail, - sendContributionDeletedEmail, - sendContributionDeniedEmail, -} from '@/emails/sendEmailVariants' import { EVENT_CONTRIBUTION_CREATE, EVENT_CONTRIBUTION_DELETE, @@ -40,10 +35,7 @@ import { EVENT_ADMIN_CONTRIBUTION_DENY, } from '@/event/Events' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' -import LogError from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' -import { calculateDecay } from '@/util/decay' -import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' import { @@ -55,6 +47,14 @@ import { } from './util/creations' import { findContributions } from './util/findContributions' import { getLastTransaction } from './util/getLastTransaction' +import { calculateDecay } from '@/util/decay' +import { + sendContributionConfirmedEmail, + sendContributionDeletedEmail, + sendContributionDeniedEmail, +} from '@/emails/sendEmailVariants' +import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' +import { LogError } from '@/server/LogError' @Resolver() export class ContributionResolver { diff --git a/backend/src/graphql/resolver/EmailOptinCodes.test.ts b/backend/src/graphql/resolver/EmailOptinCodes.test.ts index cc8d4e534..d901987b8 100644 --- a/backend/src/graphql/resolver/EmailOptinCodes.test.ts +++ b/backend/src/graphql/resolver/EmailOptinCodes.test.ts @@ -9,9 +9,9 @@ import { GraphQLError } from 'graphql' import { testEnvironment, cleanDB } from '@test/helpers' -import CONFIG from '@/config' import { createUser, setPassword, forgotPassword } from '@/seeds/graphql/mutations' import { queryOptIn } from '@/seeds/graphql/queries' +import { CONFIG } from '@/config' let mutate: any, query: any, con: any let testEnv: any diff --git a/backend/src/graphql/resolver/GdtResolver.ts b/backend/src/graphql/resolver/GdtResolver.ts index 53fc23295..906d9b5f2 100644 --- a/backend/src/graphql/resolver/GdtResolver.ts +++ b/backend/src/graphql/resolver/GdtResolver.ts @@ -3,15 +3,15 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ import { Resolver, Query, Args, Ctx, Authorized, Arg, Int, Float } from 'type-graphql' -import Paginated from '@arg/Paginated' -import { Order } from '@enum/Order' import { GdtEntryList } from '@model/GdtEntryList' +import { Order } from '@enum/Order' +import { Paginated } from '@arg/Paginated' +import { Context, getUser } from '@/server/context' +import { CONFIG } from '@/config' import { apiGet, apiPost } from '@/apis/HttpRequest' import { RIGHTS } from '@/auth/RIGHTS' -import CONFIG from '@/config' -import { Context, getUser } from '@/server/context' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' @Resolver() export class GdtResolver { diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts index f69878cac..68183af12 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts @@ -9,9 +9,6 @@ import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' import { Resolver, Args, Arg, Authorized, Ctx, Mutation, Query, Int } from 'type-graphql' -import Paginated from '@arg/Paginated' -import TransactionLinkArgs from '@arg/TransactionLinkArgs' -import TransactionLinkFilters from '@arg/TransactionLinkFilters' import { ContributionCycleType } from '@enum/ContributionCycleType' import { ContributionStatus } from '@enum/ContributionStatus' import { ContributionType } from '@enum/ContributionType' @@ -20,26 +17,28 @@ import { ContributionLink } from '@model/ContributionLink' import { Decay } from '@model/Decay' import { TransactionLink, TransactionLinkResult } from '@model/TransactionLink' import { User } from '@model/User' -import QueryLinkResult from '@union/QueryLinkResult' +import { transactionLinkList } from './util/transactionLinkList' +import { TransactionLinkArgs } from '@arg/TransactionLinkArgs' +import { Paginated } from '@arg/Paginated' +import { TransactionLinkFilters } from '@arg/TransactionLinkFilters' +import { backendLogger as logger } from '@/server/logger' +import { Context, getUser, getClientTimezoneOffset } from '@/server/context' +import { calculateBalance } from '@/util/validate' import { RIGHTS } from '@/auth/RIGHTS' +import { calculateDecay } from '@/util/decay' +import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' +import { LogError } from '@/server/LogError' import { EVENT_CONTRIBUTION_LINK_REDEEM, EVENT_TRANSACTION_LINK_CREATE, EVENT_TRANSACTION_LINK_DELETE, EVENT_TRANSACTION_LINK_REDEEM, } from '@/event/Events' -import { Context, getUser, getClientTimezoneOffset } from '@/server/context' -import LogError from '@/server/LogError' -import { backendLogger as logger } from '@/server/logger' -import { calculateDecay } from '@/util/decay' -import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' -import { calculateBalance } from '@/util/validate' import { executeTransaction } from './TransactionResolver' import { getUserCreation, validateContribution } from './util/creations' import { getLastTransaction } from './util/getLastTransaction' -import transactionLinkList from './util/transactionLinkList' // TODO: do not export, test it inside the resolver export const transactionLinkCode = (date: Date): string => { diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index eb9b19b3f..93ffb3861 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -9,8 +9,6 @@ import { User as dbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' import { Resolver, Query, Args, Authorized, Ctx, Mutation } from 'type-graphql' -import Paginated from '@arg/Paginated' -import TransactionSendArgs from '@arg/TransactionSendArgs' import { Order } from '@enum/Order' import { TransactionTypeId } from '@enum/TransactionTypeId' import { Transaction } from '@model/Transaction' @@ -19,18 +17,19 @@ import { User } from '@model/User' import { TransactionRepository } from '@repository/Transaction' import { TransactionLinkRepository } from '@repository/TransactionLink' +import { calculateBalance } from '@/util/validate' +import { TransactionSendArgs } from '@arg/TransactionSendArgs' +import { Paginated } from '@arg/Paginated' + +import { backendLogger as logger } from '@/server/logger' +import { Context, getUser } from '@/server/context' import { RIGHTS } from '@/auth/RIGHTS' import { sendTransactionLinkRedeemedEmail, sendTransactionReceivedEmail, } from '@/emails/sendEmailVariants' import { EVENT_TRANSACTION_RECEIVE, EVENT_TRANSACTION_SEND } from '@/event/Events' -import { Context, getUser } from '@/server/context' -import LogError from '@/server/LogError' -import { backendLogger as logger } from '@/server/logger' import { communityUser } from '@/util/communityUser' -import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' -import { calculateBalance } from '@/util/validate' import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualTransactions' import { BalanceResolver } from './BalanceResolver' @@ -38,6 +37,9 @@ import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' import { findUserByEmail } from './UserResolver' import { getLastTransaction } from './util/getLastTransaction' +import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' +import { LogError } from '@/server/LogError' + export const executeTransaction = async ( amount: Decimal, memo: string, diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index 341a4be56..91b0a6ae6 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -20,7 +20,6 @@ import { ContributionLink } from '@model/ContributionLink' import { testEnvironment, headerPushMock, resetToken, cleanDB } from '@test/helpers' import { logger, i18n as localization } from '@test/testSetup' -import CONFIG from '@/config' import { sendAccountActivationEmail, sendAccountMultiRegistrationEmail, @@ -48,9 +47,10 @@ import { } from '@/seeds/graphql/mutations' import { verifyLogin, queryOptIn, searchAdminUsers, searchUsers } from '@/seeds/graphql/queries' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' +import { CONFIG } from '@/config' +import { peterLustig } from '@/seeds/users/peter-lustig' import { bobBaumeister } from '@/seeds/users/bob-baumeister' import { garrickOllivander } from '@/seeds/users/garrick-ollivander' -import { peterLustig } from '@/seeds/users/peter-lustig' import { stephenHawking } from '@/seeds/users/stephen-hawking' import { printTimeDuration } from '@/util/time' import { objectValuesToArray } from '@/util/utilities' diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 7ec1973fa..8207db272 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -21,11 +21,6 @@ import { } from 'type-graphql' import { v4 as uuidv4 } from 'uuid' -import CreateUserArgs from '@arg/CreateUserArgs' -import Paginated from '@arg/Paginated' -import SearchUsersArgs from '@arg/SearchUsersArgs' -import UnsecureLoginArgs from '@arg/UnsecureLoginArgs' -import UpdateUserInfosArgs from '@arg/UpdateUserInfosArgs' import { OptInType } from '@enum/OptInType' import { Order } from '@enum/Order' import { PasswordEncryptionType } from '@enum/PasswordEncryptionType' @@ -38,12 +33,25 @@ import { UserRepository } from '@repository/User' import { klicktippSignIn } from '@/apis/KlicktippController' import { encode } from '@/auth/JWT' import { RIGHTS } from '@/auth/RIGHTS' -import CONFIG from '@/config' import { sendAccountActivationEmail, sendAccountMultiRegistrationEmail, sendResetPasswordEmail, } from '@/emails/sendEmailVariants' + +import { getTimeDurationObject, printTimeDuration } from '@/util/time' +import { CreateUserArgs } from '@arg/CreateUserArgs' +import { UnsecureLoginArgs } from '@arg/UnsecureLoginArgs' +import { UpdateUserInfosArgs } from '@arg/UpdateUserInfosArgs' +import { Paginated } from '@arg/Paginated' +import { SearchUsersArgs } from '@arg/SearchUsersArgs' + +import { backendLogger as logger } from '@/server/logger' +import { Context, getUser, getClientTimezoneOffset } from '@/server/context' +import { CONFIG } from '@/config' +import { communityDbUser } from '@/util/communityUser' +import { klicktippNewsletterStateMiddleware } from '@/middleware/klicktippMiddleware' +import { hasElopageBuys } from '@/util/hasElopageBuys' import { Event, EventType, @@ -60,18 +68,12 @@ import { EVENT_ADMIN_USER_DELETE, EVENT_ADMIN_USER_UNDELETE, } from '@/event/Events' -import { klicktippNewsletterStateMiddleware } from '@/middleware/klicktippMiddleware' import { isValidPassword } from '@/password/EncryptorUtils' import { encryptPassword, verifyPassword } from '@/password/PasswordEncryptor' -import { Context, getUser, getClientTimezoneOffset } from '@/server/context' -import LogError from '@/server/LogError' -import { backendLogger as logger } from '@/server/logger' -import { communityDbUser } from '@/util/communityUser' -import { hasElopageBuys } from '@/util/hasElopageBuys' -import { getTimeDurationObject, printTimeDuration } from '@/util/time' import { FULL_CREATION_AVAILABLE } from './const/const' import { getUserCreations } from './util/creations' +import { LogError } from '@/server/LogError' // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-commonjs const random = require('random-bigint') diff --git a/backend/src/graphql/resolver/util/creations.ts b/backend/src/graphql/resolver/util/creations.ts index dbf0650a6..3eca569f5 100644 --- a/backend/src/graphql/resolver/util/creations.ts +++ b/backend/src/graphql/resolver/util/creations.ts @@ -7,7 +7,7 @@ import { Decimal } from 'decimal.js-light' import { OpenCreation } from '@model/OpenCreation' import { FULL_CREATION_AVAILABLE, MAX_CREATION_AMOUNT } from '@/graphql/resolver/const/const' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' interface CreationMap { diff --git a/backend/src/graphql/resolver/util/transactionLinkList.ts b/backend/src/graphql/resolver/util/transactionLinkList.ts index 544d35114..849ef7642 100644 --- a/backend/src/graphql/resolver/util/transactionLinkList.ts +++ b/backend/src/graphql/resolver/util/transactionLinkList.ts @@ -1,15 +1,14 @@ import { MoreThan } from '@dbTools/typeorm' import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink' import { User as DbUser } from '@entity/User' - -import Paginated from '@arg/Paginated' -import TransactionLinkFilters from '@arg/TransactionLinkFilters' import { Order } from '@enum/Order' +import { Paginated } from '@arg/Paginated' +import { TransactionLinkFilters } from '@arg/TransactionLinkFilters' import { TransactionLink, TransactionLinkResult } from '@model/TransactionLink' import { User } from '@/graphql/model/User' -export default async function transactionLinkList( +export async function transactionLinkList( { currentPage = 1, pageSize = 5, order = Order.DESC }: Paginated, filters: TransactionLinkFilters | null, user: DbUser, diff --git a/backend/src/graphql/scalar/Decimal.ts b/backend/src/graphql/scalar/Decimal.ts index e46446cee..f539685f9 100644 --- a/backend/src/graphql/scalar/Decimal.ts +++ b/backend/src/graphql/scalar/Decimal.ts @@ -1,7 +1,7 @@ import { Decimal } from 'decimal.js-light' import { GraphQLScalarType, Kind } from 'graphql' -const DecimalType = new GraphQLScalarType({ +export const DecimalScalar = new GraphQLScalarType({ name: 'Decimal', description: 'The `Decimal` scalar type to represent currency values', @@ -21,5 +21,3 @@ const DecimalType = new GraphQLScalarType({ return new Decimal(ast.value) }, }) - -export default DecimalType diff --git a/backend/src/graphql/schema.ts b/backend/src/graphql/schema.ts index c6097f027..f14276c86 100644 --- a/backend/src/graphql/schema.ts +++ b/backend/src/graphql/schema.ts @@ -4,15 +4,13 @@ import { Decimal } from 'decimal.js-light' import { GraphQLSchema } from 'graphql' import { buildSchema } from 'type-graphql' -import isAuthorized from './directive/isAuthorized' -import DecimalScalar from './scalar/Decimal' +import { isAuthorized } from './directive/isAuthorized' +import { DecimalScalar } from './scalar/Decimal' -const schema = async (): Promise => { +export const schema = async (): Promise => { return buildSchema({ resolvers: [path.join(__dirname, 'resolver', `!(*.test).{js,ts}`)], authChecker: isAuthorized, scalarsMap: [{ type: Decimal, scalar: DecimalScalar }], }) } - -export default schema diff --git a/backend/src/index.ts b/backend/src/index.ts index 353b77616..4d34c0ccd 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,9 +1,10 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ +import { createServer } from './server/createServer' + // config -import CONFIG from './config' +import { CONFIG } from './config' import { startValidateCommunities } from './federation/validateCommunities' -import createServer from './server/createServer' async function main() { const { app } = await createServer() diff --git a/backend/src/middleware/klicktippMiddleware.ts b/backend/src/middleware/klicktippMiddleware.ts index 481094752..d8b31c8fa 100644 --- a/backend/src/middleware/klicktippMiddleware.ts +++ b/backend/src/middleware/klicktippMiddleware.ts @@ -7,7 +7,7 @@ import { MiddlewareFn } from 'type-graphql' import { KlickTipp } from '@model/KlickTipp' import { /* klicktippSignIn, */ getKlickTippUser } from '@/apis/KlicktippController' -import CONFIG from '@/config' +import { CONFIG } from '@/config' import { klickTippLogger as logger } from '@/server/logger' // export const klicktippRegistrationMiddleware: MiddlewareFn = async ( diff --git a/backend/src/password/EncryptorUtils.ts b/backend/src/password/EncryptorUtils.ts index eb25edda6..e511ec09a 100644 --- a/backend/src/password/EncryptorUtils.ts +++ b/backend/src/password/EncryptorUtils.ts @@ -2,11 +2,10 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { User } from '@entity/User' - import { PasswordEncryptionType } from '@enum/PasswordEncryptionType' -import CONFIG from '@/config' -import LogError from '@/server/LogError' +import { CONFIG } from '@/config' +import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-commonjs diff --git a/backend/src/seeds/index.ts b/backend/src/seeds/index.ts index d1960eea9..4966ed220 100644 --- a/backend/src/seeds/index.ts +++ b/backend/src/seeds/index.ts @@ -9,8 +9,6 @@ import { entities } from '@entity/index' import { createTestClient } from 'apollo-server-testing' import { name, internet, datatype } from 'faker' -import CONFIG from '@/config' -import createServer from '@/server/createServer' import { backendLogger as logger } from '@/server/logger' import { contributionLinks } from './contributionLink/index' @@ -21,6 +19,8 @@ import { transactionLinkFactory } from './factory/transactionLink' import { userFactory } from './factory/user' import { transactionLinks } from './transactionLink/index' import { users } from './users/index' +import { createServer } from '@/server/createServer' +import { CONFIG } from '@/config' CONFIG.EMAIL = false diff --git a/backend/src/server/LogError.test.ts b/backend/src/server/LogError.test.ts index 5aa1cae21..389b2e0c1 100644 --- a/backend/src/server/LogError.test.ts +++ b/backend/src/server/LogError.test.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/unbound-method */ +import { LogError } from './LogError' import { logger } from '@test/testSetup' -import LogError from './LogError' describe('LogError', () => { it('logs an Error when created', () => { diff --git a/backend/src/server/LogError.ts b/backend/src/server/LogError.ts index b753d204e..e745d17b6 100644 --- a/backend/src/server/LogError.ts +++ b/backend/src/server/LogError.ts @@ -1,6 +1,6 @@ import { backendLogger as logger } from './logger' -export default class LogError extends Error { +export class LogError extends Error { // eslint-disable-next-line @typescript-eslint/no-explicit-any constructor(msg: string, ...details: any[]) { super(msg) diff --git a/backend/src/server/context.ts b/backend/src/server/context.ts index f0e63daea..36cd6939f 100644 --- a/backend/src/server/context.ts +++ b/backend/src/server/context.ts @@ -3,9 +3,10 @@ import { User as dbUser } from '@entity/User' import { ExpressContext } from 'apollo-server-express' import { Decimal } from 'decimal.js-light' +import { LogError } from './LogError' + import { Role } from '@/auth/Role' -import LogError from './LogError' export interface Context { token: string | null @@ -20,7 +21,7 @@ export interface Context { sumHoldAvailableAmount?: Decimal } -const context = (args: ExpressContext): Context => { +export const context = (args: ExpressContext): Context => { const authorization = args.req.headers.authorization const clientTimezoneOffset = args.req.headers.clienttimezoneoffset const context: Context = { @@ -50,5 +51,3 @@ export const getClientTimezoneOffset = (context: Context): number => { } throw new LogError('No valid client time zone offset in context') } - -export default context diff --git a/backend/src/server/cors.ts b/backend/src/server/cors.ts index e76ed1591..c05fd8544 100644 --- a/backend/src/server/cors.ts +++ b/backend/src/server/cors.ts @@ -1,8 +1,8 @@ -import cors from 'cors' +import { default as corsLib } from 'cors' const corsOptions = { origin: '*', exposedHeaders: ['token'], } -export default cors(corsOptions) +export const cors = corsLib(corsOptions) diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index 8a94ef3eb..234be797c 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -5,25 +5,23 @@ import { Connection } from '@dbTools/typeorm' import { ApolloServer } from 'apollo-server-express' import express, { Express, json, urlencoded } from 'express' import { Logger } from 'log4js' - -import CONFIG from '@/config' -import schema from '@/graphql/schema' -import connection from '@/typeorm/connection' import { checkDBVersion } from '@/typeorm/DBVersion' -import { elopageWebhook } from '@/webhook/elopage' - -import serverContext from './context' -import cors from './cors' -import { i18n } from './localization' +import { cors } from './cors' +import { context as serverContext } from './context' +import { plugins } from './plugins' import { apolloLogger } from './logger' -import plugins from './plugins' +import { i18n } from './localization' +import { connection } from '@/typeorm/connection' +import { CONFIG } from '@/config' +import { schema } from '@/graphql/schema' +import { elopageWebhook } from '@/webhook/elopage' // TODO implement // import queryComplexity, { simpleEstimator, fieldConfigEstimator } from "graphql-query-complexity"; type ServerDef = { apollo: ApolloServer; app: Express; con: Connection } -const createServer = async ( +export const createServer = async ( // eslint-disable-next-line @typescript-eslint/no-explicit-any context: any = serverContext, logger: Logger = apolloLogger, @@ -81,5 +79,3 @@ const createServer = async ( return { apollo, app, con } } - -export default createServer diff --git a/backend/src/server/logger.ts b/backend/src/server/logger.ts index 89f292ab7..3d9dc8c4c 100644 --- a/backend/src/server/logger.ts +++ b/backend/src/server/logger.ts @@ -4,7 +4,7 @@ import { readFileSync } from 'fs' import { configure, getLogger } from 'log4js' -import CONFIG from '@/config' +import { CONFIG } from '@/config' const options = JSON.parse(readFileSync(CONFIG.LOG4JS_CONFIG, 'utf-8')) diff --git a/backend/src/server/plugins.ts b/backend/src/server/plugins.ts index bc2495b71..77c8c5299 100644 --- a/backend/src/server/plugins.ts +++ b/backend/src/server/plugins.ts @@ -60,7 +60,5 @@ ${JSON.stringify(requestContext.response.errors, null, 2)}`) }, } -const plugins = +export const plugins = process.env.NODE_ENV === 'development' ? [setHeadersPlugin] : [setHeadersPlugin, logPlugin] - -export default plugins diff --git a/backend/src/typeorm/connection.ts b/backend/src/typeorm/connection.ts index a3a20450b..faf0f66cc 100644 --- a/backend/src/typeorm/connection.ts +++ b/backend/src/typeorm/connection.ts @@ -2,10 +2,9 @@ // We cannot use our connection here, but must use the external typeorm installation import { Connection, createConnection, FileLogger } from '@dbTools/typeorm' import { entities } from '@entity/index' +import { CONFIG } from '@/config' -import CONFIG from '@/config' - -const connection = async (): Promise => { +export const connection = async (): Promise => { try { return createConnection({ name: 'default', @@ -31,5 +30,3 @@ const connection = async (): Promise => { return null } } - -export default connection diff --git a/backend/src/typeorm/repository/User.ts b/backend/src/typeorm/repository/User.ts index 71e43329b..53273102d 100644 --- a/backend/src/typeorm/repository/User.ts +++ b/backend/src/typeorm/repository/User.ts @@ -1,7 +1,7 @@ import { Brackets, EntityRepository, IsNull, Not, Repository } from '@dbTools/typeorm' import { User as DbUser } from '@entity/User' -import SearchUsersFilters from '@/graphql/arg/SearchUsersFilters' +import { SearchUsersFilters } from '@/graphql/arg/SearchUsersFilters' @EntityRepository(DbUser) export class UserRepository extends Repository { diff --git a/backend/src/util/decay.ts b/backend/src/util/decay.ts index 77157e203..c870fa68a 100644 --- a/backend/src/util/decay.ts +++ b/backend/src/util/decay.ts @@ -1,9 +1,7 @@ import { Decimal } from 'decimal.js-light' - +import { CONFIG } from '@/config' import { Decay } from '@model/Decay' - -import CONFIG from '@/config' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' // TODO: externalize all those definitions and functions into an external decay library diff --git a/backend/src/util/klicktipp.ts b/backend/src/util/klicktipp.ts index 4d90be134..0d09d32a2 100644 --- a/backend/src/util/klicktipp.ts +++ b/backend/src/util/klicktipp.ts @@ -1,8 +1,7 @@ import { User } from '@entity/User' - +import { connection } from '@/typeorm/connection' import { getKlickTippUser } from '@/apis/KlicktippController' -import LogError from '@/server/LogError' -import connection from '@/typeorm/connection' +import { LogError } from '@/server/LogError' export async function retrieveNotRegisteredEmails(): Promise { const con = await connection() diff --git a/backend/test/helpers.ts b/backend/test/helpers.ts index f440adc02..dffc93f57 100644 --- a/backend/test/helpers.ts +++ b/backend/test/helpers.ts @@ -10,9 +10,8 @@ import { initialize } from '@dbTools/helpers' import { entities } from '@entity/index' import { createTestClient } from 'apollo-server-testing' -import createServer from '@/server/createServer' - import { i18n, logger } from './testSetup' +import { createServer } from '@/server/createServer' export const headerPushMock = jest.fn((t) => { context.token = t.value diff --git a/backend/test/testSetup.ts b/backend/test/testSetup.ts index 4e8a67e3f..305de6b1c 100644 --- a/backend/test/testSetup.ts +++ b/backend/test/testSetup.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-return */ -import CONFIG from '@/config' -import { i18n } from '@/server/localization' +import { CONFIG } from '@/config' import { backendLogger as logger } from '@/server/logger' +import { i18n } from '@/server/localization' CONFIG.EMAIL = true CONFIG.EMAIL_TEST_MODUS = false From c57c259db8970ddf0fce50e8aa394b3b8e1e1dae Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 31 Mar 2023 12:48:14 +0200 Subject: [PATCH 06/20] merge --- backend/src/graphql/resolver/TransactionLinkResolver.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts index 68183af12..468a276f1 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts @@ -39,6 +39,7 @@ import { import { executeTransaction } from './TransactionResolver' import { getUserCreation, validateContribution } from './util/creations' import { getLastTransaction } from './util/getLastTransaction' +import QueryLinkResult from '../union/QueryLinkResult' // TODO: do not export, test it inside the resolver export const transactionLinkCode = (date: Date): string => { From 875c1f692b76279aa5561825ee4b0800a9cdfc7a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 29 Mar 2023 17:19:55 +0200 Subject: [PATCH 07/20] lint fixes --- backend/src/graphql/resolver/TransactionLinkResolver.ts | 2 +- backend/src/graphql/union/QueryLinkResult.ts | 2 +- backend/src/server/cors.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts index 468a276f1..65bb3e80d 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts @@ -27,6 +27,7 @@ import { Context, getUser, getClientTimezoneOffset } from '@/server/context' import { calculateBalance } from '@/util/validate' import { RIGHTS } from '@/auth/RIGHTS' import { calculateDecay } from '@/util/decay' +import { QueryLinkResult } from '@union/QueryLinkResult' import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' import { LogError } from '@/server/LogError' import { @@ -39,7 +40,6 @@ import { import { executeTransaction } from './TransactionResolver' import { getUserCreation, validateContribution } from './util/creations' import { getLastTransaction } from './util/getLastTransaction' -import QueryLinkResult from '../union/QueryLinkResult' // TODO: do not export, test it inside the resolver export const transactionLinkCode = (date: Date): string => { diff --git a/backend/src/graphql/union/QueryLinkResult.ts b/backend/src/graphql/union/QueryLinkResult.ts index 390175d1d..fdf1c7b17 100644 --- a/backend/src/graphql/union/QueryLinkResult.ts +++ b/backend/src/graphql/union/QueryLinkResult.ts @@ -3,7 +3,7 @@ import { createUnionType } from 'type-graphql' import { ContributionLink } from '@model/ContributionLink' import { TransactionLink } from '@model/TransactionLink' -export default createUnionType({ +export const QueryLinkResult = createUnionType({ name: 'QueryLinkResult', // the name of the GraphQL union types: () => [TransactionLink, ContributionLink] as const, // function that returns tuple of object types classes }) diff --git a/backend/src/server/cors.ts b/backend/src/server/cors.ts index c05fd8544..95663695d 100644 --- a/backend/src/server/cors.ts +++ b/backend/src/server/cors.ts @@ -1,4 +1,4 @@ -import { default as corsLib } from 'cors' +import corsLib from 'cors' const corsOptions = { origin: '*', From 7a44a223e9b949deaf938f88a38d0e2bc02c48f8 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 31 Mar 2023 12:51:51 +0200 Subject: [PATCH 08/20] lint fixes --- backend/src/apis/HttpRequest.ts | 2 +- backend/src/apis/KlicktippController.ts | 4 +-- backend/src/emails/sendEmailTranslated.ts | 2 +- backend/src/emails/sendEmailVariants.test.ts | 11 +++--- backend/src/emails/sendEmailVariants.ts | 3 +- .../federation/client/1_0/FederationClient.ts | 2 +- .../federation/client/1_1/FederationClient.ts | 2 +- backend/src/federation/validateCommunities.ts | 5 +-- backend/src/graphql/model/TransactionLink.ts | 1 - .../resolver/ContributionLinkResolver.ts | 28 ++++++++------- .../resolver/ContributionMessageResolver.ts | 10 +++--- .../graphql/resolver/ContributionResolver.ts | 34 +++++++++---------- .../graphql/resolver/EmailOptinCodes.test.ts | 2 +- backend/src/graphql/resolver/GdtResolver.ts | 8 ++--- .../resolver/TransactionLinkResolver.ts | 24 ++++++------- .../graphql/resolver/TransactionResolver.ts | 16 ++++----- .../src/graphql/resolver/UserResolver.test.ts | 4 +-- backend/src/graphql/resolver/UserResolver.ts | 28 +++++++-------- .../resolver/util/transactionLinkList.ts | 3 +- backend/src/index.ts | 3 +- backend/src/password/EncryptorUtils.ts | 1 + backend/src/seeds/index.ts | 4 +-- backend/src/server/LogError.test.ts | 2 +- backend/src/server/context.ts | 3 +- backend/src/server/createServer.ts | 16 +++++---- backend/src/typeorm/connection.ts | 1 + backend/src/util/decay.ts | 4 ++- backend/src/util/klicktipp.ts | 3 +- backend/test/helpers.ts | 3 +- backend/test/testSetup.ts | 2 +- 30 files changed, 119 insertions(+), 112 deletions(-) diff --git a/backend/src/apis/HttpRequest.ts b/backend/src/apis/HttpRequest.ts index 7272e4bfc..a36857794 100644 --- a/backend/src/apis/HttpRequest.ts +++ b/backend/src/apis/HttpRequest.ts @@ -2,8 +2,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import axios from 'axios' -import { backendLogger as logger } from '@/server/logger' import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' // eslint-disable-next-line @typescript-eslint/no-explicit-any export const apiPost = async (url: string, payload: unknown): Promise => { diff --git a/backend/src/apis/KlicktippController.ts b/backend/src/apis/KlicktippController.ts index 6dcfac0bf..3f7136de2 100644 --- a/backend/src/apis/KlicktippController.ts +++ b/backend/src/apis/KlicktippController.ts @@ -5,11 +5,11 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +import { CONFIG } from '@/config' + // eslint-disable-next-line import/no-relative-parent-imports import KlicktippConnector from 'klicktipp-api' -import { CONFIG } from '@/config' - const klicktippConnector = new KlicktippConnector() export const klicktippSignIn = async ( diff --git a/backend/src/emails/sendEmailTranslated.ts b/backend/src/emails/sendEmailTranslated.ts index f16e34511..abf582b5c 100644 --- a/backend/src/emails/sendEmailTranslated.ts +++ b/backend/src/emails/sendEmailTranslated.ts @@ -5,9 +5,9 @@ import Email from 'email-templates' import i18n from 'i18n' import { createTransport } from 'nodemailer' -import { backendLogger as logger } from '@/server/logger' import { CONFIG } from '@/config' import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' export const sendEmailTranslated = async (params: { receiver: { diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index 9a6ad3183..fa83996cb 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -5,6 +5,12 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { Decimal } from 'decimal.js-light' +import { testEnvironment } from '@test/helpers' +import { logger, i18n as localization } from '@test/testSetup' + +import { CONFIG } from '@/config' + +import { sendEmailTranslated } from './sendEmailTranslated' import { sendAddedContributionMessageEmail, sendAccountActivationEmail, @@ -17,11 +23,6 @@ import { sendTransactionReceivedEmail, } from './sendEmailVariants' -import { sendEmailTranslated } from './sendEmailTranslated' -import { testEnvironment } from '@test/helpers' -import { logger, i18n as localization } from '@test/testSetup' -import { CONFIG } from '@/config' - let con: any let testEnv: any diff --git a/backend/src/emails/sendEmailVariants.ts b/backend/src/emails/sendEmailVariants.ts index 8f0ee0f2d..2f9d906a1 100644 --- a/backend/src/emails/sendEmailVariants.ts +++ b/backend/src/emails/sendEmailVariants.ts @@ -1,9 +1,10 @@ import { Decimal } from 'decimal.js-light' -import { sendEmailTranslated } from './sendEmailTranslated' import { CONFIG } from '@/config' import { decimalSeparatorByLanguage } from '@/util/utilities' +import { sendEmailTranslated } from './sendEmailTranslated' + export const sendAddedContributionMessageEmail = (data: { firstName: string lastName: string diff --git a/backend/src/federation/client/1_0/FederationClient.ts b/backend/src/federation/client/1_0/FederationClient.ts index e7f7fc1a4..13f05e761 100644 --- a/backend/src/federation/client/1_0/FederationClient.ts +++ b/backend/src/federation/client/1_0/FederationClient.ts @@ -5,8 +5,8 @@ import { Community as DbCommunity } from '@entity/Community' import { gql } from 'graphql-request' import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient' -import { backendLogger as logger } from '@/server/logger' import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' export async function requestGetPublicKey(dbCom: DbCommunity): Promise { let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' diff --git a/backend/src/federation/client/1_1/FederationClient.ts b/backend/src/federation/client/1_1/FederationClient.ts index 00f1d582e..bda185fba 100644 --- a/backend/src/federation/client/1_1/FederationClient.ts +++ b/backend/src/federation/client/1_1/FederationClient.ts @@ -5,8 +5,8 @@ import { Community as DbCommunity } from '@entity/Community' import { gql } from 'graphql-request' import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient' -import { backendLogger as logger } from '@/server/logger' import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' export async function requestGetPublicKey(dbCom: DbCommunity): Promise { let endpoint = dbCom.endPoint.endsWith('/') ? dbCom.endPoint : dbCom.endPoint + '/' diff --git a/backend/src/federation/validateCommunities.ts b/backend/src/federation/validateCommunities.ts index f609fab51..0e8c7cb12 100644 --- a/backend/src/federation/validateCommunities.ts +++ b/backend/src/federation/validateCommunities.ts @@ -1,13 +1,14 @@ import { IsNull } from '@dbTools/typeorm' import { Community as DbCommunity } from '@entity/Community' +import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' + // eslint-disable-next-line camelcase import { requestGetPublicKey as v1_0_requestGetPublicKey } from './client/1_0/FederationClient' // eslint-disable-next-line camelcase import { requestGetPublicKey as v1_1_requestGetPublicKey } from './client/1_1/FederationClient' import { ApiVersionType } from './enum/apiVersionType' -import { backendLogger as logger } from '@/server/logger' -import { LogError } from '@/server/LogError' export function startValidateCommunities(timerInterval: number): void { logger.info( diff --git a/backend/src/graphql/model/TransactionLink.ts b/backend/src/graphql/model/TransactionLink.ts index 3a6330839..74178610c 100644 --- a/backend/src/graphql/model/TransactionLink.ts +++ b/backend/src/graphql/model/TransactionLink.ts @@ -1,5 +1,4 @@ import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' - import { Decimal } from 'decimal.js-light' import { ObjectType, Field, Int } from 'type-graphql' diff --git a/backend/src/graphql/resolver/ContributionLinkResolver.ts b/backend/src/graphql/resolver/ContributionLinkResolver.ts index 7f87ccd8c..069656ff3 100644 --- a/backend/src/graphql/resolver/ContributionLinkResolver.ts +++ b/backend/src/graphql/resolver/ContributionLinkResolver.ts @@ -3,6 +3,21 @@ import { ContributionLink as DbContributionLink } from '@entity/ContributionLink import { Decimal } from 'decimal.js-light' import { Resolver, Args, Arg, Authorized, Mutation, Query, Int, Ctx } from 'type-graphql' +import { ContributionLinkArgs } from '@arg/ContributionLinkArgs' +import { Paginated } from '@arg/Paginated' +import { Order } from '@enum/Order' +import { ContributionLink } from '@model/ContributionLink' +import { ContributionLinkList } from '@model/ContributionLinkList' + +import { RIGHTS } from '@/auth/RIGHTS' +import { + EVENT_ADMIN_CONTRIBUTION_LINK_CREATE, + EVENT_ADMIN_CONTRIBUTION_LINK_DELETE, + EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE, +} from '@/event/Events' +import { Context, getUser } from '@/server/context' +import { LogError } from '@/server/LogError' + import { CONTRIBUTIONLINK_NAME_MAX_CHARS, CONTRIBUTIONLINK_NAME_MIN_CHARS, @@ -11,21 +26,8 @@ import { } from './const/const' import { transactionLinkCode as contributionLinkCode } from './TransactionLinkResolver' import { isStartEndDateValid } from './util/creations' -import { ContributionLinkList } from '@model/ContributionLinkList' -import { ContributionLink } from '@model/ContributionLink' -import { ContributionLinkArgs } from '@arg/ContributionLinkArgs' -import { RIGHTS } from '@/auth/RIGHTS' -import { Order } from '@enum/Order' -import { Paginated } from '@arg/Paginated' // TODO: this is a strange construct -import { LogError } from '@/server/LogError' -import { Context, getUser } from '@/server/context' -import { - EVENT_ADMIN_CONTRIBUTION_LINK_CREATE, - EVENT_ADMIN_CONTRIBUTION_LINK_DELETE, - EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE, -} from '@/event/Events' @Resolver() export class ContributionLinkResolver { diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts index 90bfccb9c..f3fedcadf 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts @@ -6,21 +6,21 @@ import { User as DbUser } from '@entity/User' import { UserContact as DbUserContact } from '@entity/UserContact' import { Arg, Args, Authorized, Ctx, Int, Mutation, Query, Resolver } from 'type-graphql' -import { ContributionMessage, ContributionMessageListResult } from '@model/ContributionMessage' import { ContributionMessageArgs } from '@arg/ContributionMessageArgs' -import { ContributionMessageType } from '@enum/MessageType' -import { ContributionStatus } from '@enum/ContributionStatus' -import { Order } from '@enum/Order' import { Paginated } from '@arg/Paginated' +import { ContributionStatus } from '@enum/ContributionStatus' +import { ContributionMessageType } from '@enum/MessageType' +import { Order } from '@enum/Order' +import { ContributionMessage, ContributionMessageListResult } from '@model/ContributionMessage' import { RIGHTS } from '@/auth/RIGHTS' import { sendAddedContributionMessageEmail } from '@/emails/sendEmailVariants' -import { LogError } from '@/server/LogError' import { EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE, EVENT_CONTRIBUTION_MESSAGE_CREATE, } from '@/event/Events' import { Context, getUser } from '@/server/context' +import { LogError } from '@/server/LogError' @Resolver() export class ContributionMessageResolver { diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index 5fd86136b..f6ce30e52 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -8,22 +8,27 @@ import { UserContact } from '@entity/UserContact' import { Decimal } from 'decimal.js-light' import { Arg, Args, Authorized, Ctx, Int, Mutation, Query, Resolver } from 'type-graphql' +import { AdminCreateContributionArgs } from '@arg/AdminCreateContributionArgs' +import { AdminUpdateContributionArgs } from '@arg/AdminUpdateContributionArgs' +import { ContributionArgs } from '@arg/ContributionArgs' +import { Paginated } from '@arg/Paginated' +import { ContributionStatus } from '@enum/ContributionStatus' +import { ContributionType } from '@enum/ContributionType' +import { ContributionMessageType } from '@enum/MessageType' +import { Order } from '@enum/Order' +import { TransactionTypeId } from '@enum/TransactionTypeId' import { AdminUpdateContribution } from '@model/AdminUpdateContribution' import { Contribution, ContributionListResult } from '@model/Contribution' import { Decay } from '@model/Decay' import { OpenCreation } from '@model/OpenCreation' import { UnconfirmedContribution } from '@model/UnconfirmedContribution' -import { TransactionTypeId } from '@enum/TransactionTypeId' -import { Order } from '@enum/Order' -import { ContributionType } from '@enum/ContributionType' -import { ContributionStatus } from '@enum/ContributionStatus' -import { ContributionMessageType } from '@enum/MessageType' -import { ContributionArgs } from '@arg/ContributionArgs' -import { Paginated } from '@arg/Paginated' -import { AdminCreateContributionArgs } from '@arg/AdminCreateContributionArgs' -import { AdminUpdateContributionArgs } from '@arg/AdminUpdateContributionArgs' import { RIGHTS } from '@/auth/RIGHTS' +import { + sendContributionConfirmedEmail, + sendContributionDeletedEmail, + sendContributionDeniedEmail, +} from '@/emails/sendEmailVariants' import { EVENT_CONTRIBUTION_CREATE, EVENT_CONTRIBUTION_DELETE, @@ -35,7 +40,10 @@ import { EVENT_ADMIN_CONTRIBUTION_DENY, } from '@/event/Events' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' +import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' +import { calculateDecay } from '@/util/decay' +import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' import { @@ -47,14 +55,6 @@ import { } from './util/creations' import { findContributions } from './util/findContributions' import { getLastTransaction } from './util/getLastTransaction' -import { calculateDecay } from '@/util/decay' -import { - sendContributionConfirmedEmail, - sendContributionDeletedEmail, - sendContributionDeniedEmail, -} from '@/emails/sendEmailVariants' -import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' -import { LogError } from '@/server/LogError' @Resolver() export class ContributionResolver { diff --git a/backend/src/graphql/resolver/EmailOptinCodes.test.ts b/backend/src/graphql/resolver/EmailOptinCodes.test.ts index d901987b8..442c63c00 100644 --- a/backend/src/graphql/resolver/EmailOptinCodes.test.ts +++ b/backend/src/graphql/resolver/EmailOptinCodes.test.ts @@ -9,9 +9,9 @@ import { GraphQLError } from 'graphql' import { testEnvironment, cleanDB } from '@test/helpers' +import { CONFIG } from '@/config' import { createUser, setPassword, forgotPassword } from '@/seeds/graphql/mutations' import { queryOptIn } from '@/seeds/graphql/queries' -import { CONFIG } from '@/config' let mutate: any, query: any, con: any let testEnv: any diff --git a/backend/src/graphql/resolver/GdtResolver.ts b/backend/src/graphql/resolver/GdtResolver.ts index 906d9b5f2..77ca57b15 100644 --- a/backend/src/graphql/resolver/GdtResolver.ts +++ b/backend/src/graphql/resolver/GdtResolver.ts @@ -3,14 +3,14 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ import { Resolver, Query, Args, Ctx, Authorized, Arg, Int, Float } from 'type-graphql' -import { GdtEntryList } from '@model/GdtEntryList' -import { Order } from '@enum/Order' import { Paginated } from '@arg/Paginated' +import { Order } from '@enum/Order' +import { GdtEntryList } from '@model/GdtEntryList' -import { Context, getUser } from '@/server/context' -import { CONFIG } from '@/config' import { apiGet, apiPost } from '@/apis/HttpRequest' import { RIGHTS } from '@/auth/RIGHTS' +import { CONFIG } from '@/config' +import { Context, getUser } from '@/server/context' import { LogError } from '@/server/LogError' @Resolver() diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts index 65bb3e80d..ab322a50b 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts @@ -9,6 +9,9 @@ import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' import { Resolver, Args, Arg, Authorized, Ctx, Mutation, Query, Int } from 'type-graphql' +import { Paginated } from '@arg/Paginated' +import { TransactionLinkArgs } from '@arg/TransactionLinkArgs' +import { TransactionLinkFilters } from '@arg/TransactionLinkFilters' import { ContributionCycleType } from '@enum/ContributionCycleType' import { ContributionStatus } from '@enum/ContributionStatus' import { ContributionType } from '@enum/ContributionType' @@ -17,29 +20,26 @@ import { ContributionLink } from '@model/ContributionLink' import { Decay } from '@model/Decay' import { TransactionLink, TransactionLinkResult } from '@model/TransactionLink' import { User } from '@model/User' - -import { transactionLinkList } from './util/transactionLinkList' -import { TransactionLinkArgs } from '@arg/TransactionLinkArgs' -import { Paginated } from '@arg/Paginated' -import { TransactionLinkFilters } from '@arg/TransactionLinkFilters' -import { backendLogger as logger } from '@/server/logger' -import { Context, getUser, getClientTimezoneOffset } from '@/server/context' -import { calculateBalance } from '@/util/validate' -import { RIGHTS } from '@/auth/RIGHTS' -import { calculateDecay } from '@/util/decay' import { QueryLinkResult } from '@union/QueryLinkResult' -import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' -import { LogError } from '@/server/LogError' + +import { RIGHTS } from '@/auth/RIGHTS' import { EVENT_CONTRIBUTION_LINK_REDEEM, EVENT_TRANSACTION_LINK_CREATE, EVENT_TRANSACTION_LINK_DELETE, EVENT_TRANSACTION_LINK_REDEEM, } from '@/event/Events' +import { Context, getUser, getClientTimezoneOffset } from '@/server/context' +import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' +import { calculateDecay } from '@/util/decay' +import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' +import { calculateBalance } from '@/util/validate' import { executeTransaction } from './TransactionResolver' import { getUserCreation, validateContribution } from './util/creations' import { getLastTransaction } from './util/getLastTransaction' +import { transactionLinkList } from './util/transactionLinkList' // TODO: do not export, test it inside the resolver export const transactionLinkCode = (date: Date): string => { diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 93ffb3861..23c5b6fa6 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -9,6 +9,8 @@ import { User as dbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' import { Resolver, Query, Args, Authorized, Ctx, Mutation } from 'type-graphql' +import { Paginated } from '@arg/Paginated' +import { TransactionSendArgs } from '@arg/TransactionSendArgs' import { Order } from '@enum/Order' import { TransactionTypeId } from '@enum/TransactionTypeId' import { Transaction } from '@model/Transaction' @@ -17,19 +19,18 @@ import { User } from '@model/User' import { TransactionRepository } from '@repository/Transaction' import { TransactionLinkRepository } from '@repository/TransactionLink' -import { calculateBalance } from '@/util/validate' -import { TransactionSendArgs } from '@arg/TransactionSendArgs' -import { Paginated } from '@arg/Paginated' - -import { backendLogger as logger } from '@/server/logger' -import { Context, getUser } from '@/server/context' import { RIGHTS } from '@/auth/RIGHTS' import { sendTransactionLinkRedeemedEmail, sendTransactionReceivedEmail, } from '@/emails/sendEmailVariants' import { EVENT_TRANSACTION_RECEIVE, EVENT_TRANSACTION_SEND } from '@/event/Events' +import { Context, getUser } from '@/server/context' +import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' import { communityUser } from '@/util/communityUser' +import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' +import { calculateBalance } from '@/util/validate' import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualTransactions' import { BalanceResolver } from './BalanceResolver' @@ -37,9 +38,6 @@ import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' import { findUserByEmail } from './UserResolver' import { getLastTransaction } from './util/getLastTransaction' -import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' -import { LogError } from '@/server/LogError' - export const executeTransaction = async ( amount: Decimal, memo: string, diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index 91b0a6ae6..92df7a011 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -20,6 +20,7 @@ import { ContributionLink } from '@model/ContributionLink' import { testEnvironment, headerPushMock, resetToken, cleanDB } from '@test/helpers' import { logger, i18n as localization } from '@test/testSetup' +import { CONFIG } from '@/config' import { sendAccountActivationEmail, sendAccountMultiRegistrationEmail, @@ -47,10 +48,9 @@ import { } from '@/seeds/graphql/mutations' import { verifyLogin, queryOptIn, searchAdminUsers, searchUsers } from '@/seeds/graphql/queries' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' -import { CONFIG } from '@/config' -import { peterLustig } from '@/seeds/users/peter-lustig' import { bobBaumeister } from '@/seeds/users/bob-baumeister' import { garrickOllivander } from '@/seeds/users/garrick-ollivander' +import { peterLustig } from '@/seeds/users/peter-lustig' import { stephenHawking } from '@/seeds/users/stephen-hawking' import { printTimeDuration } from '@/util/time' import { objectValuesToArray } from '@/util/utilities' diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 8207db272..13ce9c158 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -21,6 +21,11 @@ import { } from 'type-graphql' import { v4 as uuidv4 } from 'uuid' +import { CreateUserArgs } from '@arg/CreateUserArgs' +import { Paginated } from '@arg/Paginated' +import { SearchUsersArgs } from '@arg/SearchUsersArgs' +import { UnsecureLoginArgs } from '@arg/UnsecureLoginArgs' +import { UpdateUserInfosArgs } from '@arg/UpdateUserInfosArgs' import { OptInType } from '@enum/OptInType' import { Order } from '@enum/Order' import { PasswordEncryptionType } from '@enum/PasswordEncryptionType' @@ -33,25 +38,12 @@ import { UserRepository } from '@repository/User' import { klicktippSignIn } from '@/apis/KlicktippController' import { encode } from '@/auth/JWT' import { RIGHTS } from '@/auth/RIGHTS' +import { CONFIG } from '@/config' import { sendAccountActivationEmail, sendAccountMultiRegistrationEmail, sendResetPasswordEmail, } from '@/emails/sendEmailVariants' - -import { getTimeDurationObject, printTimeDuration } from '@/util/time' -import { CreateUserArgs } from '@arg/CreateUserArgs' -import { UnsecureLoginArgs } from '@arg/UnsecureLoginArgs' -import { UpdateUserInfosArgs } from '@arg/UpdateUserInfosArgs' -import { Paginated } from '@arg/Paginated' -import { SearchUsersArgs } from '@arg/SearchUsersArgs' - -import { backendLogger as logger } from '@/server/logger' -import { Context, getUser, getClientTimezoneOffset } from '@/server/context' -import { CONFIG } from '@/config' -import { communityDbUser } from '@/util/communityUser' -import { klicktippNewsletterStateMiddleware } from '@/middleware/klicktippMiddleware' -import { hasElopageBuys } from '@/util/hasElopageBuys' import { Event, EventType, @@ -68,12 +60,18 @@ import { EVENT_ADMIN_USER_DELETE, EVENT_ADMIN_USER_UNDELETE, } from '@/event/Events' +import { klicktippNewsletterStateMiddleware } from '@/middleware/klicktippMiddleware' import { isValidPassword } from '@/password/EncryptorUtils' import { encryptPassword, verifyPassword } from '@/password/PasswordEncryptor' +import { Context, getUser, getClientTimezoneOffset } from '@/server/context' +import { LogError } from '@/server/LogError' +import { backendLogger as logger } from '@/server/logger' +import { communityDbUser } from '@/util/communityUser' +import { hasElopageBuys } from '@/util/hasElopageBuys' +import { getTimeDurationObject, printTimeDuration } from '@/util/time' import { FULL_CREATION_AVAILABLE } from './const/const' import { getUserCreations } from './util/creations' -import { LogError } from '@/server/LogError' // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-commonjs const random = require('random-bigint') diff --git a/backend/src/graphql/resolver/util/transactionLinkList.ts b/backend/src/graphql/resolver/util/transactionLinkList.ts index 849ef7642..0dba5a400 100644 --- a/backend/src/graphql/resolver/util/transactionLinkList.ts +++ b/backend/src/graphql/resolver/util/transactionLinkList.ts @@ -1,9 +1,10 @@ import { MoreThan } from '@dbTools/typeorm' import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink' import { User as DbUser } from '@entity/User' -import { Order } from '@enum/Order' + import { Paginated } from '@arg/Paginated' import { TransactionLinkFilters } from '@arg/TransactionLinkFilters' +import { Order } from '@enum/Order' import { TransactionLink, TransactionLinkResult } from '@model/TransactionLink' import { User } from '@/graphql/model/User' diff --git a/backend/src/index.ts b/backend/src/index.ts index 4d34c0ccd..67641bc3c 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,10 +1,9 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { createServer } from './server/createServer' - // config import { CONFIG } from './config' import { startValidateCommunities } from './federation/validateCommunities' +import { createServer } from './server/createServer' async function main() { const { app } = await createServer() diff --git a/backend/src/password/EncryptorUtils.ts b/backend/src/password/EncryptorUtils.ts index e511ec09a..934721baf 100644 --- a/backend/src/password/EncryptorUtils.ts +++ b/backend/src/password/EncryptorUtils.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { User } from '@entity/User' + import { PasswordEncryptionType } from '@enum/PasswordEncryptionType' import { CONFIG } from '@/config' diff --git a/backend/src/seeds/index.ts b/backend/src/seeds/index.ts index 4966ed220..8ca42fc79 100644 --- a/backend/src/seeds/index.ts +++ b/backend/src/seeds/index.ts @@ -9,6 +9,8 @@ import { entities } from '@entity/index' import { createTestClient } from 'apollo-server-testing' import { name, internet, datatype } from 'faker' +import { CONFIG } from '@/config' +import { createServer } from '@/server/createServer' import { backendLogger as logger } from '@/server/logger' import { contributionLinks } from './contributionLink/index' @@ -19,8 +21,6 @@ import { transactionLinkFactory } from './factory/transactionLink' import { userFactory } from './factory/user' import { transactionLinks } from './transactionLink/index' import { users } from './users/index' -import { createServer } from '@/server/createServer' -import { CONFIG } from '@/config' CONFIG.EMAIL = false diff --git a/backend/src/server/LogError.test.ts b/backend/src/server/LogError.test.ts index 389b2e0c1..b013a31ce 100644 --- a/backend/src/server/LogError.test.ts +++ b/backend/src/server/LogError.test.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/unbound-method */ -import { LogError } from './LogError' import { logger } from '@test/testSetup' +import { LogError } from './LogError' describe('LogError', () => { it('logs an Error when created', () => { diff --git a/backend/src/server/context.ts b/backend/src/server/context.ts index 36cd6939f..a52c979e3 100644 --- a/backend/src/server/context.ts +++ b/backend/src/server/context.ts @@ -3,10 +3,9 @@ import { User as dbUser } from '@entity/User' import { ExpressContext } from 'apollo-server-express' import { Decimal } from 'decimal.js-light' -import { LogError } from './LogError' - import { Role } from '@/auth/Role' +import { LogError } from './LogError' export interface Context { token: string | null diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index 234be797c..777d6dfbe 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -5,17 +5,19 @@ import { Connection } from '@dbTools/typeorm' import { ApolloServer } from 'apollo-server-express' import express, { Express, json, urlencoded } from 'express' import { Logger } from 'log4js' -import { checkDBVersion } from '@/typeorm/DBVersion' -import { cors } from './cors' -import { context as serverContext } from './context' -import { plugins } from './plugins' -import { apolloLogger } from './logger' -import { i18n } from './localization' -import { connection } from '@/typeorm/connection' + import { CONFIG } from '@/config' import { schema } from '@/graphql/schema' +import { connection } from '@/typeorm/connection' +import { checkDBVersion } from '@/typeorm/DBVersion' import { elopageWebhook } from '@/webhook/elopage' +import { context as serverContext } from './context' +import { cors } from './cors' +import { i18n } from './localization' +import { apolloLogger } from './logger' +import { plugins } from './plugins' + // TODO implement // import queryComplexity, { simpleEstimator, fieldConfigEstimator } from "graphql-query-complexity"; diff --git a/backend/src/typeorm/connection.ts b/backend/src/typeorm/connection.ts index faf0f66cc..7dec820b5 100644 --- a/backend/src/typeorm/connection.ts +++ b/backend/src/typeorm/connection.ts @@ -2,6 +2,7 @@ // We cannot use our connection here, but must use the external typeorm installation import { Connection, createConnection, FileLogger } from '@dbTools/typeorm' import { entities } from '@entity/index' + import { CONFIG } from '@/config' export const connection = async (): Promise => { diff --git a/backend/src/util/decay.ts b/backend/src/util/decay.ts index c870fa68a..1d1775cc9 100644 --- a/backend/src/util/decay.ts +++ b/backend/src/util/decay.ts @@ -1,6 +1,8 @@ import { Decimal } from 'decimal.js-light' -import { CONFIG } from '@/config' + import { Decay } from '@model/Decay' + +import { CONFIG } from '@/config' import { LogError } from '@/server/LogError' // TODO: externalize all those definitions and functions into an external decay library diff --git a/backend/src/util/klicktipp.ts b/backend/src/util/klicktipp.ts index 0d09d32a2..e34a9c384 100644 --- a/backend/src/util/klicktipp.ts +++ b/backend/src/util/klicktipp.ts @@ -1,7 +1,8 @@ import { User } from '@entity/User' -import { connection } from '@/typeorm/connection' + import { getKlickTippUser } from '@/apis/KlicktippController' import { LogError } from '@/server/LogError' +import { connection } from '@/typeorm/connection' export async function retrieveNotRegisteredEmails(): Promise { const con = await connection() diff --git a/backend/test/helpers.ts b/backend/test/helpers.ts index dffc93f57..bd67a47d5 100644 --- a/backend/test/helpers.ts +++ b/backend/test/helpers.ts @@ -10,9 +10,10 @@ import { initialize } from '@dbTools/helpers' import { entities } from '@entity/index' import { createTestClient } from 'apollo-server-testing' -import { i18n, logger } from './testSetup' import { createServer } from '@/server/createServer' +import { i18n, logger } from './testSetup' + export const headerPushMock = jest.fn((t) => { context.token = t.value }) diff --git a/backend/test/testSetup.ts b/backend/test/testSetup.ts index 305de6b1c..12bd25d64 100644 --- a/backend/test/testSetup.ts +++ b/backend/test/testSetup.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-return */ import { CONFIG } from '@/config' -import { backendLogger as logger } from '@/server/logger' import { i18n } from '@/server/localization' +import { backendLogger as logger } from '@/server/logger' CONFIG.EMAIL = true CONFIG.EMAIL_TEST_MODUS = false From bd9442169d236430025d04867069e4658a263a75 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 5 Apr 2023 03:22:36 +0200 Subject: [PATCH 09/20] properly resolve all paths --- backend/.eslintrc.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index 4aa367a85..d20120a25 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -160,8 +160,8 @@ module.exports = { 'import/unambiguous': 'off', }, parserOptions: { - tsconfigRootDir: './', - project: ['./tsconfig.json'], + tsconfigRootDir: '**/', + project: ['**/tsconfig.json'], // this is to properly reference the referenced project database without requirement of compiling it EXPERIMENTAL_useSourceOfProjectReferenceRedirect: true, }, From 46d76c26ab0d80dea279c9214e075d5dc5c96c45 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 5 Apr 2023 03:22:46 +0200 Subject: [PATCH 10/20] update related packages --- backend/package.json | 6 +- backend/yarn.lock | 128 +++++++++++++++++++++++++++++-------------- 2 files changed, 91 insertions(+), 43 deletions(-) diff --git a/backend/package.json b/backend/package.json index d7c2f2aed..a0252ea57 100644 --- a/backend/package.json +++ b/backend/package.json @@ -56,13 +56,13 @@ "@types/node": "^16.10.3", "@types/nodemailer": "^6.4.4", "@types/uuid": "^8.3.4", - "@typescript-eslint/eslint-plugin": "^5.54.1", - "@typescript-eslint/parser": "^5.54.1", + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", "apollo-server-testing": "^2.25.2", "eslint": "^8.36.0", "eslint-config-prettier": "^8.3.0", "eslint-config-standard": "^17.0.0", - "eslint-import-resolver-typescript": "^3.5.3", + "eslint-import-resolver-typescript": "^3.5.4", "eslint-plugin-import": "^2.27.5", "eslint-plugin-jest": "^27.2.1", "eslint-plugin-n": "^15.6.1", diff --git a/backend/yarn.lock b/backend/yarn.lock index c01d96b1f..67779e84f 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -1219,19 +1219,19 @@ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== -"@typescript-eslint/eslint-plugin@^5.54.1": - version "5.54.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.1.tgz#0c5091289ce28372e38ab8d28e861d2dbe1ab29e" - integrity sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew== +"@typescript-eslint/eslint-plugin@^5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.1.tgz#d1ab162a3cd2671b8a1c9ddf6e2db73b14439735" + integrity sha512-1MeobQkQ9tztuleT3v72XmY0XuKXVXusAhryoLuU5YZ+mXoYKZP9SQ7Flulh1NX4DTjpGTc2b/eMu4u7M7dhnQ== dependencies: - "@typescript-eslint/scope-manager" "5.54.1" - "@typescript-eslint/type-utils" "5.54.1" - "@typescript-eslint/utils" "5.54.1" + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.57.1" + "@typescript-eslint/type-utils" "5.57.1" + "@typescript-eslint/utils" "5.57.1" debug "^4.3.4" grapheme-splitter "^1.0.4" ignore "^5.2.0" natural-compare-lite "^1.4.0" - regexpp "^3.2.0" semver "^7.3.7" tsutils "^3.21.0" @@ -1242,14 +1242,14 @@ dependencies: "@typescript-eslint/utils" "5.53.0" -"@typescript-eslint/parser@^5.54.1": - version "5.54.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.54.1.tgz#05761d7f777ef1c37c971d3af6631715099b084c" - integrity sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg== +"@typescript-eslint/parser@^5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.57.1.tgz#af911234bd4401d09668c5faf708a0570a17a748" + integrity sha512-hlA0BLeVSA/wBPKdPGxoVr9Pp6GutGoY380FEhbVi0Ph4WNe8kLvqIRx76RSQt1lynZKfrXKs0/XeEk4zZycuA== dependencies: - "@typescript-eslint/scope-manager" "5.54.1" - "@typescript-eslint/types" "5.54.1" - "@typescript-eslint/typescript-estree" "5.54.1" + "@typescript-eslint/scope-manager" "5.57.1" + "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/typescript-estree" "5.57.1" debug "^4.3.4" "@typescript-eslint/scope-manager@5.53.0": @@ -1268,13 +1268,21 @@ "@typescript-eslint/types" "5.54.1" "@typescript-eslint/visitor-keys" "5.54.1" -"@typescript-eslint/type-utils@5.54.1": - version "5.54.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.54.1.tgz#4825918ec27e55da8bb99cd07ec2a8e5f50ab748" - integrity sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g== +"@typescript-eslint/scope-manager@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz#5d28799c0fc8b501a29ba1749d827800ef22d710" + integrity sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw== dependencies: - "@typescript-eslint/typescript-estree" "5.54.1" - "@typescript-eslint/utils" "5.54.1" + "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/visitor-keys" "5.57.1" + +"@typescript-eslint/type-utils@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.57.1.tgz#235daba621d3f882b8488040597b33777c74bbe9" + integrity sha512-/RIPQyx60Pt6ga86hKXesXkJ2WOS4UemFrmmq/7eOyiYjYv/MUSHPlkhU6k9T9W1ytnTJueqASW+wOmW4KrViw== + dependencies: + "@typescript-eslint/typescript-estree" "5.57.1" + "@typescript-eslint/utils" "5.57.1" debug "^4.3.4" tsutils "^3.21.0" @@ -1288,6 +1296,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.54.1.tgz#29fbac29a716d0f08c62fe5de70c9b6735de215c" integrity sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw== +"@typescript-eslint/types@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.57.1.tgz#d9989c7a9025897ea6f0550b7036027f69e8a603" + integrity sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA== + "@typescript-eslint/typescript-estree@5.53.0": version "5.53.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz#bc651dc28cf18ab248ecd18a4c886c744aebd690" @@ -1314,6 +1327,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz#10d9643e503afc1ca4f5553d9bbe672ea4050b71" + integrity sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw== + dependencies: + "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/visitor-keys" "5.57.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.53.0": version "5.53.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.53.0.tgz#e55eaad9d6fffa120575ffaa530c7e802f13bce8" @@ -1328,7 +1354,21 @@ eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/utils@5.54.1", "@typescript-eslint/utils@^5.10.0": +"@typescript-eslint/utils@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.57.1.tgz#0f97b0bbd88c2d5e2036869f26466be5f4c69475" + integrity sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.57.1" + "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/typescript-estree" "5.57.1" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/utils@^5.10.0": version "5.54.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.54.1.tgz#7a3ee47409285387b9d4609ea7e1020d1797ec34" integrity sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ== @@ -1358,6 +1398,14 @@ "@typescript-eslint/types" "5.54.1" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz#585e5fa42a9bbcd9065f334fd7c8a4ddfa7d905e" + integrity sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA== + dependencies: + "@typescript-eslint/types" "5.57.1" + eslint-visitor-keys "^3.3.0" + "@wry/equality@^0.1.2": version "0.1.11" resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.11.tgz#35cb156e4a96695aa81a9ecc4d03787bc17f1790" @@ -2701,7 +2749,7 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.10.0: +enhanced-resolve@^5.12.0: version "5.12.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== @@ -2875,18 +2923,18 @@ eslint-import-resolver-node@^0.3.7: is-core-module "^2.11.0" resolve "^1.22.1" -eslint-import-resolver-typescript@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz#db5ed9e906651b7a59dd84870aaef0e78c663a05" - integrity sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ== +eslint-import-resolver-typescript@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.4.tgz#7370c326c3c08f0c1839c592d79d20b704de15d4" + integrity sha512-9xUpnedEmSfG57sN1UvWPiEhfJ8bPt0Wg2XysA7Mlc79iFGhmJtRUg9LxtkK81FhMUui0YuR2E8iUsVhePkh4A== dependencies: debug "^4.3.4" - enhanced-resolve "^5.10.0" - get-tsconfig "^4.2.0" - globby "^13.1.2" - is-core-module "^2.10.0" + enhanced-resolve "^5.12.0" + get-tsconfig "^4.5.0" + globby "^13.1.3" + is-core-module "^2.11.0" is-glob "^4.0.3" - synckit "^0.8.4" + synckit "^0.8.5" eslint-module-utils@^2.7.4: version "2.7.4" @@ -3471,10 +3519,10 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -get-tsconfig@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.4.0.tgz#64eee64596668a81b8fce18403f94f245ee0d4e5" - integrity sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ== +get-tsconfig@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.5.0.tgz#6d52d1c7b299bd3ee9cd7638561653399ac77b0f" + integrity sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ== glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" @@ -3545,7 +3593,7 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^13.1.2: +globby@^13.1.3: version "13.1.3" resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== @@ -4061,7 +4109,7 @@ is-ci@^3.0.0: dependencies: ci-info "^3.1.1" -is-core-module@^2.10.0, is-core-module@^2.11.0: +is-core-module@^2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== @@ -6096,7 +6144,7 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.0.0, regexpp@^3.2.0: +regexpp@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -6617,7 +6665,7 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -synckit@^0.8.4: +synckit@^0.8.5: version "0.8.5" resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== From faf6881ffb998ee015bc2b1866d897be5412c707 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 5 Apr 2023 03:35:49 +0200 Subject: [PATCH 11/20] things resolve correctly --- backend/.eslintrc.js | 10 ++++-- backend/package.json | 10 +++--- backend/yarn.lock | 81 +++++++++++++++++++++++--------------------- 3 files changed, 55 insertions(+), 46 deletions(-) diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index d20120a25..2ab8797c8 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -18,8 +18,12 @@ module.exports = { '@typescript-eslint/parser': ['.ts', '.tsx'], }, 'import/resolver': { - typescript: true, - node: true, + typescript: { + project: ['tsconfig.json', 'backend/tsconfig.json'], + }, + node: { + project: ['tsconfig.json', 'backend/tsconfig.json'], + }, }, }, rules: { @@ -160,7 +164,7 @@ module.exports = { 'import/unambiguous': 'off', }, parserOptions: { - tsconfigRootDir: '**/', + tsconfigRootDir: './', project: ['**/tsconfig.json'], // this is to properly reference the referenced project database without requirement of compiling it EXPERIMENTAL_useSourceOfProjectReferenceRedirect: true, diff --git a/backend/package.json b/backend/package.json index a0252ea57..1457f97e5 100644 --- a/backend/package.json +++ b/backend/package.json @@ -59,14 +59,14 @@ "@typescript-eslint/eslint-plugin": "^5.57.1", "@typescript-eslint/parser": "^5.57.1", "apollo-server-testing": "^2.25.2", - "eslint": "^8.36.0", - "eslint-config-prettier": "^8.3.0", + "eslint": "^8.37.0", + "eslint-config-prettier": "^8.8.0", "eslint-config-standard": "^17.0.0", "eslint-import-resolver-typescript": "^3.5.4", "eslint-plugin-import": "^2.27.5", "eslint-plugin-jest": "^27.2.1", - "eslint-plugin-n": "^15.6.1", - "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-n": "^15.7.0", + "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", "eslint-plugin-type-graphql": "^1.0.0", "faker": "^5.5.3", @@ -74,7 +74,7 @@ "jest": "^27.2.4", "klicktipp-api": "^1.0.2", "nodemon": "^2.0.7", - "prettier": "^2.3.1", + "prettier": "^2.8.7", "ts-jest": "^27.0.5", "ts-node": "^10.0.0", "tsconfig-paths": "^3.14.0", diff --git a/backend/yarn.lock b/backend/yarn.lock index 67779e84f..1bc8c64fd 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -394,14 +394,14 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.4.0.tgz#3e61c564fcd6b921cb789838631c5ee44df09403" integrity sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ== -"@eslint/eslintrc@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.1.tgz#7888fe7ec8f21bc26d646dbd2c11cd776e21192d" - integrity sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw== +"@eslint/eslintrc@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" + integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.5.0" + espree "^9.5.1" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -409,10 +409,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.36.0.tgz#9837f768c03a1e4a30bd304a64fb8844f0e72efe" - integrity sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg== +"@eslint/js@8.37.0": + version "8.37.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.37.0.tgz#cf1b5fa24217fe007f6487a26d765274925efa7d" + integrity sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A== "@graphql-typed-document-node/core@^3.1.1": version "3.1.1" @@ -2904,10 +2904,10 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== +eslint-config-prettier@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" + integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== eslint-config-standard@^17.0.0: version "17.0.0" @@ -2979,10 +2979,10 @@ eslint-plugin-jest@^27.2.1: dependencies: "@typescript-eslint/utils" "^5.10.0" -eslint-plugin-n@^15.6.1: - version "15.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz#f7e77f24abb92a550115cf11e29695da122c398c" - integrity sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA== +eslint-plugin-n@^15.7.0: + version "15.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz#e29221d8f5174f84d18f2eb94765f2eeea033b90" + integrity sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q== dependencies: builtins "^5.0.1" eslint-plugin-es "^4.1.0" @@ -2993,10 +2993,10 @@ eslint-plugin-n@^15.6.1: resolve "^1.22.1" semver "^7.3.8" -eslint-plugin-prettier@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5" - integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g== +eslint-plugin-prettier@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" @@ -3057,15 +3057,20 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@^8.36.0: - version "8.36.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.36.0.tgz#1bd72202200a5492f91803b113fb8a83b11285cf" - integrity sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw== +eslint-visitor-keys@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== + +eslint@^8.37.0: + version "8.37.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.37.0.tgz#1f660ef2ce49a0bfdec0b0d698e0b8b627287412" + integrity sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.1" - "@eslint/js" "8.36.0" + "@eslint/eslintrc" "^2.0.2" + "@eslint/js" "8.37.0" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -3076,8 +3081,8 @@ eslint@^8.36.0: doctrine "^3.0.0" escape-string-regexp "^4.0.0" eslint-scope "^7.1.1" - eslint-visitor-keys "^3.3.0" - espree "^9.5.0" + eslint-visitor-keys "^3.4.0" + espree "^9.5.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -3103,14 +3108,14 @@ eslint@^8.36.0: strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.5.0: - version "9.5.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.0.tgz#3646d4e3f58907464edba852fa047e6a27bdf113" - integrity sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw== +espree@^9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" + integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== dependencies: acorn "^8.8.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" @@ -5847,10 +5852,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.3.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" - integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== +prettier@^2.8.7: + version "2.8.7" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450" + integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw== pretty-format@^27.0.0, pretty-format@^27.2.5: version "27.2.5" From 84bd3aca6a179643b22b4b60cca51baf442cb74e Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 5 Apr 2023 03:38:32 +0200 Subject: [PATCH 12/20] use ** glob pattern --- backend/.eslintrc.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index 2ab8797c8..7c1fa8c93 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -19,11 +19,9 @@ module.exports = { }, 'import/resolver': { typescript: { - project: ['tsconfig.json', 'backend/tsconfig.json'], - }, - node: { - project: ['tsconfig.json', 'backend/tsconfig.json'], + project: ['**/tsconfig.json'], }, + node: true, }, }, rules: { From bb887be74c273b3324bc0f6824d109700e7719da Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 5 Apr 2023 13:22:21 +0200 Subject: [PATCH 13/20] refactor(backend): get transaction list --- .../graphql/resolver/TransactionResolver.ts | 7 +++---- .../resolver/util/getTransactionList.ts | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 backend/src/graphql/resolver/util/getTransactionList.ts diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 4d546ddc0..0d867ba55 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -16,7 +16,6 @@ import { TransactionTypeId } from '@enum/TransactionTypeId' import { Transaction } from '@model/Transaction' import { TransactionList } from '@model/TransactionList' import { User } from '@model/User' -import { TransactionRepository } from '@repository/Transaction' import { TransactionLinkRepository } from '@repository/TransactionLink' import { RIGHTS } from '@/auth/RIGHTS' @@ -37,6 +36,7 @@ import { BalanceResolver } from './BalanceResolver' import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' import { findUserByIdentifier } from './util/findUserByIdentifier' import { getLastTransaction } from './util/getLastTransaction' +import { getTransactionList } from './util/getTransactionList' export const executeTransaction = async ( amount: Decimal, @@ -209,8 +209,7 @@ export class TransactionResolver { // find transactions // first page can contain 26 due to virtual decay transaction const offset = (currentPage - 1) * pageSize - const transactionRepository = getCustomRepository(TransactionRepository) - const [userTransactions, userTransactionsCount] = await transactionRepository.findByUserPaged( + const [userTransactions, userTransactionsCount] = await getTransactionList( user.id, pageSize, offset, @@ -283,7 +282,7 @@ export class TransactionResolver { } // transactions - userTransactions.forEach((userTransaction) => { + userTransactions.forEach((userTransaction: dbTransaction) => { const linkedUser = userTransaction.typeId === TransactionTypeId.CREATION ? communityUser diff --git a/backend/src/graphql/resolver/util/getTransactionList.ts b/backend/src/graphql/resolver/util/getTransactionList.ts new file mode 100644 index 000000000..654f4e002 --- /dev/null +++ b/backend/src/graphql/resolver/util/getTransactionList.ts @@ -0,0 +1,20 @@ +import { Transaction as DbTransaction } from '@entity/Transaction' + +import { Order } from '@enum/Order' + +export const getTransactionList = async ( + userId: number, + limit: number, + offset: number, + order: Order, +): Promise<[DbTransaction[], number]> => { + return DbTransaction.findAndCount({ + where: { + userId, + }, + order: { balanceDate: order, id: order }, + relations: ['previousTransaction'], + skip: offset, + take: limit, + }) +} From 6065cfee3343ee8fa9c522154575b8303b93b208 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 5 Apr 2023 13:25:12 +0200 Subject: [PATCH 14/20] remove unused file --- backend/src/typeorm/repository/Transaction.ts | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 backend/src/typeorm/repository/Transaction.ts diff --git a/backend/src/typeorm/repository/Transaction.ts b/backend/src/typeorm/repository/Transaction.ts deleted file mode 100644 index 0fb9f7ffe..000000000 --- a/backend/src/typeorm/repository/Transaction.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { EntityRepository, Repository } from '@dbTools/typeorm' -import { Transaction } from '@entity/Transaction' - -import { Order } from '@enum/Order' - -@EntityRepository(Transaction) -export class TransactionRepository extends Repository { - findByUserPaged( - userId: number, - limit: number, - offset: number, - order: Order, - ): Promise<[Transaction[], number]> { - const query = this.createQueryBuilder('userTransaction') - .leftJoinAndSelect( - 'userTransaction.previousTransaction', - 'transaction', - 'userTransaction.previous = transaction.id', - ) - .where('userTransaction.userId = :userId', { userId }) - - return query - .orderBy('userTransaction.balanceDate', order) - .limit(limit) - .offset(offset) - .getManyAndCount() - } -} From 8ab14bee42776f129afec99b0a6d612e20c46952 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 5 Apr 2023 13:38:46 +0200 Subject: [PATCH 15/20] fix(frontend): reset button send coins --- frontend/src/components/GddSend/TransactionForm.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/GddSend/TransactionForm.vue b/frontend/src/components/GddSend/TransactionForm.vue index 7d2a0aae4..fae2e044a 100644 --- a/frontend/src/components/GddSend/TransactionForm.vue +++ b/frontend/src/components/GddSend/TransactionForm.vue @@ -130,6 +130,7 @@ import InputEmail from '@/components/Inputs/InputEmail' import InputAmount from '@/components/Inputs/InputAmount' import InputTextarea from '@/components/Inputs/InputTextarea' import { user as userQuery } from '@/graphql/queries' +import { isEmpty } from 'lodash' export default { name: 'TransactionForm', @@ -176,7 +177,8 @@ export default { this.form.amount = '' this.form.memo = '' this.$refs.formValidator.validate() - if (this.$route.query && !this.$route.query === {}) this.$router.replace({ query: undefined }) + if (this.$route.query && !isEmpty(this.$route.query)) + this.$router.replace({ query: undefined }) }, }, apollo: { From fa84c210927ca460f4a06e5fa3ed879a139e10b7 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 5 Apr 2023 14:43:23 +0200 Subject: [PATCH 16/20] fix double routing with await --- frontend/src/components/TransactionRows/Name.spec.js | 8 +++----- frontend/src/components/TransactionRows/Name.vue | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/TransactionRows/Name.spec.js b/frontend/src/components/TransactionRows/Name.spec.js index 2c370bafc..99e586fde 100644 --- a/frontend/src/components/TransactionRows/Name.spec.js +++ b/frontend/src/components/TransactionRows/Name.spec.js @@ -8,11 +8,9 @@ const routerPushMock = jest.fn() const mocks = { $router: { push: routerPushMock, - history: { - current: { - fullPath: '/transactions', - }, - }, + }, + $route: { + path: '/transactions', }, } diff --git a/frontend/src/components/TransactionRows/Name.vue b/frontend/src/components/TransactionRows/Name.vue index 8695645d8..b4ddfc849 100644 --- a/frontend/src/components/TransactionRows/Name.vue +++ b/frontend/src/components/TransactionRows/Name.vue @@ -34,8 +34,8 @@ export default { }, }, methods: { - tunnelEmail() { - if (this.$router.history.current.fullPath !== '/send') this.$router.push({ path: '/send' }) + async tunnelEmail() { + if (this.$route.path !== '/send') await this.$router.push({ path: '/send' }) this.$router.push({ query: { gradidoID: this.linkedUser.gradidoID } }) }, }, From 8d8900c463be95c09d90dfb2c60ce19c882757f3 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 6 Apr 2023 13:39:04 +0200 Subject: [PATCH 17/20] fix eslint.rc --- backend/.eslintrc.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index 4c8bb8707..9021fcc30 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -19,7 +19,7 @@ module.exports = { }, 'import/resolver': { typescript: { - project: ['**/tsconfig.json'], + project: ['./tsconfig.json', '**/tsconfig.json'], }, node: true, }, @@ -162,8 +162,8 @@ module.exports = { 'import/unambiguous': 'off', }, parserOptions: { - tsconfigRootDir: './', - project: ['**/tsconfig.json'], + tsconfigRootDir: __dirname, + project: ['./tsconfig.json', '**/tsconfig.json'], // this is to properly reference the referenced project database without requirement of compiling it EXPERIMENTAL_useSourceOfProjectReferenceRedirect: true, }, From f2ad6cc24ab99c7bc95db96fdf1283ac016d360c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 6 Apr 2023 14:10:46 +0200 Subject: [PATCH 18/20] fix merge problem --- backend/src/graphql/resolver/util/findUserByIdentifier.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/util/findUserByIdentifier.ts b/backend/src/graphql/resolver/util/findUserByIdentifier.ts index a96fd1451..df932e544 100644 --- a/backend/src/graphql/resolver/util/findUserByIdentifier.ts +++ b/backend/src/graphql/resolver/util/findUserByIdentifier.ts @@ -2,7 +2,7 @@ import { User as DbUser } from '@entity/User' import { UserContact as DbUserContact } from '@entity/UserContact' import { validate, version } from 'uuid' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' export const findUserByIdentifier = async (identifier: string): Promise => { let user: DbUser | undefined From e4fc4438fb3defa32a8bd7f228c3df0135cf67f5 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 6 Apr 2023 14:20:41 +0200 Subject: [PATCH 19/20] removed obsolete comment --- backend/src/graphql/resolver/ContributionLinkResolver.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/backend/src/graphql/resolver/ContributionLinkResolver.ts b/backend/src/graphql/resolver/ContributionLinkResolver.ts index 069656ff3..1dcf6a3cb 100644 --- a/backend/src/graphql/resolver/ContributionLinkResolver.ts +++ b/backend/src/graphql/resolver/ContributionLinkResolver.ts @@ -27,8 +27,6 @@ import { import { transactionLinkCode as contributionLinkCode } from './TransactionLinkResolver' import { isStartEndDateValid } from './util/creations' -// TODO: this is a strange construct - @Resolver() export class ContributionLinkResolver { @Authorized([RIGHTS.CREATE_CONTRIBUTION_LINK]) From 27a89a2734b6ca83cafd590eebc89980e2b84214 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 6 Apr 2023 14:21:26 +0200 Subject: [PATCH 20/20] removed obsolete comment --- backend/src/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/backend/src/index.ts b/backend/src/index.ts index d5d0eafee..b522e1ff5 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,6 +1,4 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ - -// config import { CONFIG } from './config' import { startValidateCommunities } from './federation/validateCommunities' import { createServer } from './server/createServer'