From ae8405e8f688d6a33572684544f76beb0ecf521a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 31 Mar 2023 12:48:09 +0200 Subject: [PATCH 1/7] 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 2/7] 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 3/7] 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 4/7] 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 f2ad6cc24ab99c7bc95db96fdf1283ac016d360c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 6 Apr 2023 14:10:46 +0200 Subject: [PATCH 5/7] 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 6/7] 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 7/7] 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'