diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js index 4aa367a85..4c53a638f 100644 --- a/backend/.eslintrc.js +++ b/backend/.eslintrc.js @@ -18,7 +18,9 @@ module.exports = { '@typescript-eslint/parser': ['.ts', '.tsx'], }, 'import/resolver': { - typescript: true, + typescript: { + project: ['./tsconfig.json', '**/tsconfig.json'], + }, node: true, }, }, @@ -55,7 +57,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', @@ -71,7 +73,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 +102,7 @@ module.exports = { distinctGroup: true, }, ], - 'import/prefer-default-export': 'off', // TODO + 'import/prefer-default-export': 'off', // n 'n/handle-callback-err': 'error', 'n/no-callback-literal': 'error', @@ -160,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, }, diff --git a/backend/package.json b/backend/package.json index d7c2f2aed..1457f97e5 100644 --- a/backend/package.json +++ b/backend/package.json @@ -56,17 +56,17 @@ "@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": "^8.37.0", + "eslint-config-prettier": "^8.8.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", - "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/src/apis/HttpRequest.ts b/backend/src/apis/HttpRequest.ts index 278e3732c..063dfa202 100644 --- a/backend/src/apis/HttpRequest.ts +++ b/backend/src/apis/HttpRequest.ts @@ -3,7 +3,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ import axios from 'axios' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/backend/src/apis/KlicktippController.ts b/backend/src/apis/KlicktippController.ts index 309cf56ee..3f7136de2 100644 --- a/backend/src/apis/KlicktippController.ts +++ b/backend/src/apis/KlicktippController.ts @@ -4,7 +4,8 @@ /* 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' + +import { CONFIG } from '@/config' // eslint-disable-next-line import/no-relative-parent-imports import KlicktippConnector from 'klicktipp-api' 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 23ede1f27..017d83098 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -121,7 +121,7 @@ const federation = { Number(process.env.FEDERATION_VALIDATE_COMMUNITY_TIMER) || 60000, } -const CONFIG = { +export const CONFIG = { ...constants, ...server, ...database, @@ -132,5 +132,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..abf582b5c 100644 --- a/backend/src/emails/sendEmailTranslated.ts +++ b/backend/src/emails/sendEmailTranslated.ts @@ -5,8 +5,8 @@ import Email from 'email-templates' import i18n from 'i18n' import { createTransport } from 'nodemailer' -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' export const sendEmailTranslated = async (params: { diff --git a/backend/src/emails/sendEmailVariants.test.ts b/backend/src/emails/sendEmailVariants.test.ts index 44d996fa8..fa83996cb 100644 --- a/backend/src/emails/sendEmailVariants.test.ts +++ b/backend/src/emails/sendEmailVariants.test.ts @@ -8,7 +8,7 @@ import { Decimal } from 'decimal.js-light' import { testEnvironment } from '@test/helpers' import { logger, i18n as localization } from '@test/testSetup' -import CONFIG from '@/config' +import { CONFIG } from '@/config' import { sendEmailTranslated } from './sendEmailTranslated' import { diff --git a/backend/src/emails/sendEmailVariants.ts b/backend/src/emails/sendEmailVariants.ts index b45e7fc67..2f9d906a1 100644 --- a/backend/src/emails/sendEmailVariants.ts +++ b/backend/src/emails/sendEmailVariants.ts @@ -1,6 +1,6 @@ import { Decimal } from 'decimal.js-light' -import CONFIG from '@/config' +import { CONFIG } from '@/config' import { decimalSeparatorByLanguage } from '@/util/utilities' import { sendEmailTranslated } from './sendEmailTranslated' diff --git a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts index 5843fbee9..36cabba63 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CONFIRM.ts @@ -3,7 +3,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 f4ad049ca..48e3151f5 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CREATE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_CREATE.ts @@ -3,7 +3,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 399604e35..d2a7d4df0 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DELETE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DELETE.ts @@ -3,7 +3,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 332d3ab92..6c1916dfe 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DENY.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_DENY.ts @@ -3,7 +3,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 4b06cd3ad..1655bf3d3 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_CREATE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_CREATE.ts @@ -3,7 +3,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 c4cd99f57..c01be5f25 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_DELETE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_DELETE.ts @@ -2,7 +2,8 @@ import { ContributionLink as DbContributionLink } from '@entity/ContributionLink import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 f8cd2d16f..8a183b0d5 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE.ts @@ -3,7 +3,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 a2385429d..d4d5b9003 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE.ts @@ -3,7 +3,8 @@ import { ContributionMessage as DbContributionMessage } from '@entity/Contributi import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 f2fcb7478..a19bdf0ae 100644 --- a/backend/src/event/EVENT_ADMIN_CONTRIBUTION_UPDATE.ts +++ b/backend/src/event/EVENT_ADMIN_CONTRIBUTION_UPDATE.ts @@ -3,7 +3,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 bfd3e2bcc..a75e2b176 100644 --- a/backend/src/event/EVENT_ADMIN_USER_DELETE.ts +++ b/backend/src/event/EVENT_ADMIN_USER_DELETE.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 7902f5318..9f09e2e3d 100644 --- a/backend/src/event/EVENT_ADMIN_USER_ROLE_SET.ts +++ b/backend/src/event/EVENT_ADMIN_USER_ROLE_SET.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 338a3a31d..51b5764d2 100644 --- a/backend/src/event/EVENT_ADMIN_USER_UNDELETE.ts +++ b/backend/src/event/EVENT_ADMIN_USER_UNDELETE.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 96e24ec61..108ef7d04 100644 --- a/backend/src/event/EVENT_CONTRIBUTION_CREATE.ts +++ b/backend/src/event/EVENT_CONTRIBUTION_CREATE.ts @@ -3,7 +3,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 acf11bbb0..2b4064df7 100644 --- a/backend/src/event/EVENT_CONTRIBUTION_DELETE.ts +++ b/backend/src/event/EVENT_CONTRIBUTION_DELETE.ts @@ -3,7 +3,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 1202aa387..5ee1da0e3 100644 --- a/backend/src/event/EVENT_CONTRIBUTION_LINK_REDEEM.ts +++ b/backend/src/event/EVENT_CONTRIBUTION_LINK_REDEEM.ts @@ -5,7 +5,8 @@ import { Transaction as DbTransaction } from '@entity/Transaction' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 bfb7f742e..438b7f22c 100644 --- a/backend/src/event/EVENT_CONTRIBUTION_MESSAGE_CREATE.ts +++ b/backend/src/event/EVENT_CONTRIBUTION_MESSAGE_CREATE.ts @@ -3,7 +3,8 @@ import { ContributionMessage as DbContributionMessage } from '@entity/Contributi import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 3e3d82b67..ff416c428 100644 --- a/backend/src/event/EVENT_CONTRIBUTION_UPDATE.ts +++ b/backend/src/event/EVENT_CONTRIBUTION_UPDATE.ts @@ -3,7 +3,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 ae3a65ed2..fc73c6e9d 100644 --- a/backend/src/event/EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION.ts +++ b/backend/src/event/EVENT_EMAIL_ACCOUNT_MULTIREGISTRATION.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 6262d42a5..1d229b563 100644 --- a/backend/src/event/EVENT_EMAIL_ADMIN_CONFIRMATION.ts +++ b/backend/src/event/EVENT_EMAIL_ADMIN_CONFIRMATION.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 beb774632..56a3cafc8 100644 --- a/backend/src/event/EVENT_EMAIL_CONFIRMATION.ts +++ b/backend/src/event/EVENT_EMAIL_CONFIRMATION.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 a7d60e60f..1b3cd11af 100644 --- a/backend/src/event/EVENT_EMAIL_FORGOT_PASSWORD.ts +++ b/backend/src/event/EVENT_EMAIL_FORGOT_PASSWORD.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 64bc2f6e5..a73ce4f6c 100644 --- a/backend/src/event/EVENT_TRANSACTION_LINK_CREATE.ts +++ b/backend/src/event/EVENT_TRANSACTION_LINK_CREATE.ts @@ -3,7 +3,8 @@ import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 7a6ee9576..d8f15f206 100644 --- a/backend/src/event/EVENT_TRANSACTION_LINK_DELETE.ts +++ b/backend/src/event/EVENT_TRANSACTION_LINK_DELETE.ts @@ -2,7 +2,8 @@ import { Event as DbEvent } from '@entity/Event' import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink' import { User as DbUser } from '@entity/User' -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 576811d25..e0ae3bb93 100644 --- a/backend/src/event/EVENT_TRANSACTION_LINK_REDEEM.ts +++ b/backend/src/event/EVENT_TRANSACTION_LINK_REDEEM.ts @@ -3,7 +3,8 @@ import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 22a71bc25..a7b945a97 100644 --- a/backend/src/event/EVENT_TRANSACTION_RECEIVE.ts +++ b/backend/src/event/EVENT_TRANSACTION_RECEIVE.ts @@ -3,7 +3,8 @@ import { Transaction as DbTransaction } from '@entity/Transaction' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 1327d739d..b21970ad3 100644 --- a/backend/src/event/EVENT_TRANSACTION_SEND.ts +++ b/backend/src/event/EVENT_TRANSACTION_SEND.ts @@ -3,7 +3,8 @@ import { Transaction as DbTransaction } from '@entity/Transaction' import { User as DbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -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 0213f122f..15d470dd7 100644 --- a/backend/src/event/EVENT_USER_ACTIVATE_ACCOUNT.ts +++ b/backend/src/event/EVENT_USER_ACTIVATE_ACCOUNT.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 28b3fe237..70b37eddf 100644 --- a/backend/src/event/EVENT_USER_INFO_UPDATE.ts +++ b/backend/src/event/EVENT_USER_INFO_UPDATE.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 64d43b264..82458a664 100644 --- a/backend/src/event/EVENT_USER_LOGIN.ts +++ b/backend/src/event/EVENT_USER_LOGIN.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 4b00c9839..f5e76f749 100644 --- a/backend/src/event/EVENT_USER_LOGOUT.ts +++ b/backend/src/event/EVENT_USER_LOGOUT.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 2d31299f1..e144b9d6d 100644 --- a/backend/src/event/EVENT_USER_REGISTER.ts +++ b/backend/src/event/EVENT_USER_REGISTER.ts @@ -1,7 +1,8 @@ import { Event as DbEvent } from '@entity/Event' import { User as DbUser } from '@entity/User' -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 d3f515d51..307d1a0c4 100644 --- a/backend/src/event/Event.ts +++ b/backend/src/event/Event.ts @@ -34,37 +34,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/federation/client/1_0/FederationClient.ts b/backend/src/federation/client/1_0/FederationClient.ts index c4063e4c5..13f05e761 100644 --- a/backend/src/federation/client/1_0/FederationClient.ts +++ b/backend/src/federation/client/1_0/FederationClient.ts @@ -5,7 +5,7 @@ import { Community as DbCommunity } from '@entity/Community' import { gql } from 'graphql-request' import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' export async function requestGetPublicKey(dbCom: DbCommunity): Promise { diff --git a/backend/src/federation/client/1_1/FederationClient.ts b/backend/src/federation/client/1_1/FederationClient.ts index b29960407..bda185fba 100644 --- a/backend/src/federation/client/1_1/FederationClient.ts +++ b/backend/src/federation/client/1_1/FederationClient.ts @@ -5,7 +5,7 @@ import { Community as DbCommunity } from '@entity/Community' import { gql } from 'graphql-request' import { GraphQLGetClient } from '@/federation/client/GraphQLGetClient' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' export async function requestGetPublicKey(dbCom: DbCommunity): Promise { diff --git a/backend/src/federation/validateCommunities.ts b/backend/src/federation/validateCommunities.ts index fb6bda673..0e8c7cb12 100644 --- a/backend/src/federation/validateCommunities.ts +++ b/backend/src/federation/validateCommunities.ts @@ -1,7 +1,7 @@ import { IsNull } from '@dbTools/typeorm' import { Community as DbCommunity } from '@entity/Community' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' // eslint-disable-next-line camelcase 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 3f5fa8436..ecda848d1 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) identifier: 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 d659b3f1c..117cff056 100644 --- a/backend/src/graphql/directive/isAuthorized.ts +++ b/backend/src/graphql/directive/isAuthorized.ts @@ -10,9 +10,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? @@ -56,5 +56,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..74178610c 100644 --- a/backend/src/graphql/model/TransactionLink.ts +++ b/backend/src/graphql/model/TransactionLink.ts @@ -2,7 +2,7 @@ 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.test.ts b/backend/src/graphql/resolver/ContributionLinkResolver.test.ts index d37e60111..908a38e9b 100644 --- a/backend/src/graphql/resolver/ContributionLinkResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionLinkResolver.test.ts @@ -13,7 +13,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/ContributionLinkResolver.ts b/backend/src/graphql/resolver/ContributionLinkResolver.ts index af76856c4..1dcf6a3cb 100644 --- a/backend/src/graphql/resolver/ContributionLinkResolver.ts +++ b/backend/src/graphql/resolver/ContributionLinkResolver.ts @@ -3,9 +3,8 @@ 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 { ContributionLinkArgs } from '@arg/ContributionLinkArgs' +import { Paginated } from '@arg/Paginated' import { Order } from '@enum/Order' import { ContributionLink } from '@model/ContributionLink' import { ContributionLinkList } from '@model/ContributionLinkList' @@ -15,9 +14,9 @@ import { EVENT_ADMIN_CONTRIBUTION_LINK_CREATE, EVENT_ADMIN_CONTRIBUTION_LINK_DELETE, EVENT_ADMIN_CONTRIBUTION_LINK_UPDATE, -} from '@/event/Event' +} from '@/event/Events' import { Context, getUser } from '@/server/context' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' import { CONTRIBUTIONLINK_NAME_MAX_CHARS, diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts index 1d6f3f9e0..00b8f7bac 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts @@ -13,7 +13,7 @@ import { cleanDB, resetToken, testEnvironment } from '@test/helpers' import { logger, i18n as localization } from '@test/testSetup' import { sendAddedContributionMessageEmail } from '@/emails/sendEmailVariants' -import { EventType } from '@/event/Event' +import { EventType } from '@/event/Events' import { userFactory } from '@/seeds/factory/user' import { adminCreateContributionMessage, diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts index e0b4e7b96..236132f4d 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts @@ -6,8 +6,8 @@ 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 { ContributionMessageArgs } from '@arg/ContributionMessageArgs' +import { Paginated } from '@arg/Paginated' import { ContributionStatus } from '@enum/ContributionStatus' import { ContributionMessageType } from '@enum/MessageType' import { Order } from '@enum/Order' @@ -18,9 +18,9 @@ import { sendAddedContributionMessageEmail } from '@/emails/sendEmailVariants' import { EVENT_ADMIN_CONTRIBUTION_MESSAGE_CREATE, EVENT_CONTRIBUTION_MESSAGE_CREATE, -} from '@/event/Event' +} from '@/event/Events' import { Context, getUser } from '@/server/context' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' @Resolver() export class ContributionMessageResolver { diff --git a/backend/src/graphql/resolver/ContributionResolver.test.ts b/backend/src/graphql/resolver/ContributionResolver.test.ts index 88a62b656..54e2ab9d1 100644 --- a/backend/src/graphql/resolver/ContributionResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionResolver.test.ts @@ -32,7 +32,7 @@ import { sendContributionDeletedEmail, sendContributionDeniedEmail, } from '@/emails/sendEmailVariants' -import { EventType } from '@/event/Event' +import { EventType } from '@/event/Events' import { creations } from '@/seeds/creation/index' import { creationFactory } from '@/seeds/factory/creation' import { userFactory } from '@/seeds/factory/user' diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index 5969eaef2..f6ce30e52 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -8,10 +8,10 @@ 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 { 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' @@ -38,9 +38,9 @@ import { EVENT_ADMIN_CONTRIBUTION_DELETE, EVENT_ADMIN_CONTRIBUTION_CONFIRM, EVENT_ADMIN_CONTRIBUTION_DENY, -} from '@/event/Event' +} from '@/event/Events' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' import { calculateDecay } from '@/util/decay' import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' diff --git a/backend/src/graphql/resolver/EmailOptinCodes.test.ts b/backend/src/graphql/resolver/EmailOptinCodes.test.ts index cc8d4e534..442c63c00 100644 --- a/backend/src/graphql/resolver/EmailOptinCodes.test.ts +++ b/backend/src/graphql/resolver/EmailOptinCodes.test.ts @@ -9,7 +9,7 @@ import { GraphQLError } from 'graphql' import { testEnvironment, cleanDB } from '@test/helpers' -import CONFIG from '@/config' +import { CONFIG } from '@/config' import { createUser, setPassword, forgotPassword } from '@/seeds/graphql/mutations' import { queryOptIn } from '@/seeds/graphql/queries' diff --git a/backend/src/graphql/resolver/GdtResolver.ts b/backend/src/graphql/resolver/GdtResolver.ts index 60cf78bf9..3b9213567 100644 --- a/backend/src/graphql/resolver/GdtResolver.ts +++ b/backend/src/graphql/resolver/GdtResolver.ts @@ -4,15 +4,15 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ import { Resolver, Query, Args, Ctx, Authorized, Arg, Int, Float } from 'type-graphql' -import Paginated from '@arg/Paginated' +import { Paginated } from '@arg/Paginated' import { Order } from '@enum/Order' import { GdtEntryList } from '@model/GdtEntryList' import { apiGet, apiPost } from '@/apis/HttpRequest' import { RIGHTS } from '@/auth/RIGHTS' -import CONFIG from '@/config' +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.test.ts b/backend/src/graphql/resolver/TransactionLinkResolver.test.ts index a510fc94f..cec7a1952 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' diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts index a5f8c0ee6..ab322a50b 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts @@ -9,9 +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 { 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,7 +20,7 @@ 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 { QueryLinkResult } from '@union/QueryLinkResult' import { RIGHTS } from '@/auth/RIGHTS' import { @@ -28,9 +28,9 @@ import { EVENT_TRANSACTION_LINK_CREATE, EVENT_TRANSACTION_LINK_DELETE, EVENT_TRANSACTION_LINK_REDEEM, -} from '@/event/Event' +} from '@/event/Events' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' import { calculateDecay } from '@/util/decay' import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' @@ -39,7 +39,7 @@ 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' +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.test.ts b/backend/src/graphql/resolver/TransactionResolver.test.ts index 9aeb56008..d7bb380e5 100644 --- a/backend/src/graphql/resolver/TransactionResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionResolver.test.ts @@ -14,7 +14,7 @@ import { GraphQLError } from 'graphql' import { cleanDB, testEnvironment } 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 { confirmContribution, diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 4d546ddc0..839709f5d 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -9,14 +9,13 @@ 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 { Paginated } from '@arg/Paginated' +import { TransactionSendArgs } from '@arg/TransactionSendArgs' import { Order } from '@enum/Order' 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' @@ -24,9 +23,9 @@ 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 { Context, getUser } from '@/server/context' -import LogError from '@/server/LogError' +import { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' import { communityUser } from '@/util/communityUser' import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' @@ -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/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index 9c25eec31..77b08f0d6 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -20,13 +20,13 @@ 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 { CONFIG } from '@/config' import { sendAccountActivationEmail, sendAccountMultiRegistrationEmail, sendResetPasswordEmail, } from '@/emails/sendEmailVariants' -import { EventType } from '@/event/Event' +import { EventType } from '@/event/Events' import { SecretKeyCryptographyCreateKey } from '@/password/EncryptorUtils' import { encryptPassword } from '@/password/PasswordEncryptor' import { contributionLinkFactory } from '@/seeds/factory/contributionLink' diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index d6b1f22bc..35e00a5ec 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -21,11 +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 { 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,7 +38,7 @@ 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 { CONFIG } from '@/config' import { sendAccountActivationEmail, sendAccountMultiRegistrationEmail, @@ -59,12 +59,12 @@ import { EVENT_ADMIN_USER_ROLE_SET, EVENT_ADMIN_USER_DELETE, EVENT_ADMIN_USER_UNDELETE, -} from '@/event/Event' +} 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 { LogError } from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' import { communityDbUser } from '@/util/communityUser' import { hasElopageBuys } from '@/util/hasElopageBuys' diff --git a/backend/src/graphql/resolver/util/creations.ts b/backend/src/graphql/resolver/util/creations.ts index 87c730fe1..1c0c0735e 100644 --- a/backend/src/graphql/resolver/util/creations.ts +++ b/backend/src/graphql/resolver/util/creations.ts @@ -8,7 +8,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/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 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, + }) +} diff --git a/backend/src/graphql/resolver/util/transactionLinkList.ts b/backend/src/graphql/resolver/util/transactionLinkList.ts index 544d35114..0dba5a400 100644 --- a/backend/src/graphql/resolver/util/transactionLinkList.ts +++ b/backend/src/graphql/resolver/util/transactionLinkList.ts @@ -2,14 +2,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 { 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' -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 a2633f0db..96804bdfa 100644 --- a/backend/src/graphql/scalar/Decimal.ts +++ b/backend/src/graphql/scalar/Decimal.ts @@ -2,7 +2,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', @@ -22,5 +22,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/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/index.ts b/backend/src/index.ts index 72b627820..b522e1ff5 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import CONFIG from './config' +import { CONFIG } from './config' import { startValidateCommunities } from './federation/validateCommunities' -import createServer from './server/createServer' +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 39231277f..c5d6dd0ff 100644 --- a/backend/src/middleware/klicktippMiddleware.ts +++ b/backend/src/middleware/klicktippMiddleware.ts @@ -8,7 +8,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 ab52b80ad..827fc9547 100644 --- a/backend/src/password/EncryptorUtils.ts +++ b/backend/src/password/EncryptorUtils.ts @@ -6,8 +6,8 @@ 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..8ca42fc79 100644 --- a/backend/src/seeds/index.ts +++ b/backend/src/seeds/index.ts @@ -9,8 +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 { CONFIG } from '@/config' +import { createServer } from '@/server/createServer' import { backendLogger as logger } from '@/server/logger' import { contributionLinks } from './contributionLink/index' diff --git a/backend/src/server/LogError.test.ts b/backend/src/server/LogError.test.ts index 5aa1cae21..b013a31ce 100644 --- a/backend/src/server/LogError.test.ts +++ b/backend/src/server/LogError.test.ts @@ -2,7 +2,7 @@ /* eslint-disable @typescript-eslint/unbound-method */ import { logger } from '@test/testSetup' -import LogError from './LogError' +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 570b0acfa..0862b9809 100644 --- a/backend/src/server/LogError.ts +++ b/backend/src/server/LogError.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ 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..a52c979e3 100644 --- a/backend/src/server/context.ts +++ b/backend/src/server/context.ts @@ -5,7 +5,7 @@ import { Decimal } from 'decimal.js-light' import { Role } from '@/auth/Role' -import LogError from './LogError' +import { LogError } from './LogError' export interface Context { token: string | null @@ -20,7 +20,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 +50,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..95663695d 100644 --- a/backend/src/server/cors.ts +++ b/backend/src/server/cors.ts @@ -1,8 +1,8 @@ -import cors from 'cors' +import 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..777d6dfbe 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -6,24 +6,24 @@ 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 { 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 { context as serverContext } from './context' +import { cors } from './cors' import { i18n } from './localization' import { apolloLogger } from './logger' -import plugins from './plugins' +import { plugins } from './plugins' // 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 +81,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 ba5847b97..d1edbd8fb 100644 --- a/backend/src/server/logger.ts +++ b/backend/src/server/logger.ts @@ -5,7 +5,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 d113cb4b7..cb0e4e443 100644 --- a/backend/src/server/plugins.ts +++ b/backend/src/server/plugins.ts @@ -60,8 +60,6 @@ ${JSON.stringify(requestContext.response.errors, null, 2)}`) }, } -const plugins = +export const plugins = // eslint-disable-next-line n/no-process-env 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..7dec820b5 100644 --- a/backend/src/typeorm/connection.ts +++ b/backend/src/typeorm/connection.ts @@ -3,9 +3,9 @@ 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 +31,3 @@ const connection = async (): Promise => { return null } } - -export default connection 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() - } -} 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..1d1775cc9 100644 --- a/backend/src/util/decay.ts +++ b/backend/src/util/decay.ts @@ -2,8 +2,8 @@ import { Decimal } from 'decimal.js-light' import { Decay } from '@model/Decay' -import CONFIG from '@/config' -import LogError from '@/server/LogError' +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 4d90be134..e34a9c384 100644 --- a/backend/src/util/klicktipp.ts +++ b/backend/src/util/klicktipp.ts @@ -1,8 +1,8 @@ import { User } from '@entity/User' import { getKlickTippUser } from '@/apis/KlicktippController' -import LogError from '@/server/LogError' -import connection from '@/typeorm/connection' +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 cd86573fc..b43dc2d96 100644 --- a/backend/test/helpers.ts +++ b/backend/test/helpers.ts @@ -10,7 +10,7 @@ import { entities } from '@entity/index' import { createTestClient } from 'apollo-server-testing' -import createServer from '@/server/createServer' +import { createServer } from '@/server/createServer' import { i18n, logger } from './testSetup' diff --git a/backend/test/testSetup.ts b/backend/test/testSetup.ts index 4e8a67e3f..12bd25d64 100644 --- a/backend/test/testSetup.ts +++ b/backend/test/testSetup.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-return */ -import CONFIG from '@/config' +import { CONFIG } from '@/config' import { i18n } from '@/server/localization' import { backendLogger as logger } from '@/server/logger' diff --git a/backend/yarn.lock b/backend/yarn.lock index c01d96b1f..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" @@ -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== @@ -2856,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" @@ -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" @@ -2931,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" @@ -2945,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" @@ -3009,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" @@ -3028,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" @@ -3055,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" @@ -3471,10 +3524,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 +3598,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 +4114,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== @@ -5799,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" @@ -6096,7 +6149,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 +6670,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== 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. 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: { 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 } }) }, },