From 311bb50eb8839adc999df346b999b90c5e2ad3dc Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 18 Apr 2023 16:14:44 +0200 Subject: [PATCH 01/10] refactor(backend): no email in user --- backend/src/graphql/model/User.ts | 14 -------------- backend/src/graphql/resolver/UserResolver.ts | 3 +-- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/backend/src/graphql/model/User.ts b/backend/src/graphql/model/User.ts index c705ba912..5abbdadb7 100644 --- a/backend/src/graphql/model/User.ts +++ b/backend/src/graphql/model/User.ts @@ -2,7 +2,6 @@ import { User as dbUser } from '@entity/User' import { ObjectType, Field, Int } from 'type-graphql' import { KlickTipp } from './KlickTipp' -import { UserContact } from './UserContact' @ObjectType() export class User { @@ -10,10 +9,7 @@ export class User { this.id = user.id this.gradidoID = user.gradidoID this.alias = user.alias - this.emailId = user.emailId if (user.emailContact) { - this.email = user.emailContact.email - this.emailContact = new UserContact(user.emailContact) this.emailChecked = user.emailContact.emailChecked } this.firstName = user.firstName @@ -38,16 +34,6 @@ export class User { @Field(() => String, { nullable: true }) alias: string | null - @Field(() => Int, { nullable: true }) - emailId: number | null - - // TODO privacy issue here - @Field(() => String, { nullable: true }) - email: string | null - - @Field(() => UserContact) - emailContact: UserContact - @Field(() => String, { nullable: true }) firstName: string | null diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 60b4403af..23b3c6aa4 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -130,7 +130,7 @@ export class UserResolver { // Elopage Status & Stored PublisherId user.hasElopage = await this.hasElopage(context) - logger.debug(`verifyLogin... successful: ${user.firstName}.${user.lastName}, ${user.email}`) + logger.debug(`verifyLogin... successful: ${user.firstName}.${user.lastName}`) return user } @@ -238,7 +238,6 @@ export class UserResolver { const user = new User(communityDbUser) user.id = sodium.randombytes_random() % (2048 * 16) // TODO: for a better faking derive id from email so that it will be always the same id when the same email comes in? user.gradidoID = uuidv4() - user.email = email user.firstName = firstName user.lastName = lastName user.language = language From 8370b4f27373ef3eb6de5e28554a9d5486063c42 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 18 Apr 2023 16:25:02 +0200 Subject: [PATCH 02/10] test user resolver returns no emails --- backend/src/graphql/resolver/UserResolver.test.ts | 5 +---- backend/src/seeds/graphql/mutations.ts | 1 - backend/src/seeds/graphql/queries.ts | 1 - 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index 77b08f0d6..f90f0e66c 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -674,7 +674,6 @@ describe('UserResolver', () => { expect.objectContaining({ data: { login: { - email: 'bibi@bloxberg.de', firstName: 'Bibi', hasElopage: false, id: expect.any(Number), @@ -947,7 +946,6 @@ describe('UserResolver', () => { expect.objectContaining({ data: { verifyLogin: { - email: 'bibi@bloxberg.de', firstName: 'Bibi', lastName: 'Bloxberg', language: 'de', @@ -1304,7 +1302,7 @@ describe('UserResolver', () => { expect.objectContaining({ data: { login: expect.objectContaining({ - email: 'bibi@bloxberg.de', + firstName: 'Benjamin', }), }, }), @@ -1451,7 +1449,6 @@ describe('UserResolver', () => { expect.objectContaining({ data: { login: { - email: 'bibi@bloxberg.de', firstName: 'Bibi', hasElopage: false, id: expect.any(Number), diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index b0716ff74..7de6fb520 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -305,7 +305,6 @@ export const login = gql` mutation ($email: String!, $password: String!, $publisherId: Int) { login(email: $email, password: $password, publisherId: $publisherId) { id - email firstName lastName language diff --git a/backend/src/seeds/graphql/queries.ts b/backend/src/seeds/graphql/queries.ts index 8da5211a4..cc1edbc9d 100644 --- a/backend/src/seeds/graphql/queries.ts +++ b/backend/src/seeds/graphql/queries.ts @@ -3,7 +3,6 @@ import { gql } from 'graphql-tag' export const verifyLogin = gql` query { verifyLogin { - email firstName lastName language From 2cc45d23f7bac3b51d87e2203491469967ee65af Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 5 May 2023 12:44:42 +0200 Subject: [PATCH 03/10] fix between store problems --- admin/src/store/store.js | 1 + frontend/src/store/store.js | 1 + 2 files changed, 2 insertions(+) diff --git a/admin/src/store/store.js b/admin/src/store/store.js index 7d43c8ce8..0263cf33f 100644 --- a/admin/src/store/store.js +++ b/admin/src/store/store.js @@ -37,6 +37,7 @@ export const actions = { const store = new Vuex.Store({ plugins: [ createPersistedState({ + key: 'gradido-admin', storage: window.localStorage, }), ], diff --git a/frontend/src/store/store.js b/frontend/src/store/store.js index 1cd874c06..2f35e68c5 100644 --- a/frontend/src/store/store.js +++ b/frontend/src/store/store.js @@ -91,6 +91,7 @@ try { store = new Vuex.Store({ plugins: [ createPersistedState({ + key: 'gradido-frontend', storage: window.localStorage, }), ], From 2286700b833013968667abe9ed079e37f828f06c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 5 May 2023 14:18:30 +0200 Subject: [PATCH 04/10] fix e2e test --- e2e-tests/cypress/support/e2e.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e-tests/cypress/support/e2e.ts b/e2e-tests/cypress/support/e2e.ts index 2f3557566..6866cae3e 100644 --- a/e2e-tests/cypress/support/e2e.ts +++ b/e2e-tests/cypress/support/e2e.ts @@ -35,6 +35,6 @@ Cypress.Commands.add('login', (email, password) => { } cy.visit('/') - window.localStorage.setItem('vuex', JSON.stringify(vuexToken)) + window.localStorage.setItem('gradido-frontend', JSON.stringify(vuexToken)) }) }) From ad4418d29784c0d3c75777bdfcfd24e95cad4e96 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 8 May 2023 09:35:14 +0200 Subject: [PATCH 05/10] test transaction list query to raise coverage --- .../resolver/TransactionResolver.test.ts | 43 +++++++++++++++++++ backend/src/seeds/graphql/queries.ts | 26 +++++------ 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/backend/src/graphql/resolver/TransactionResolver.test.ts b/backend/src/graphql/resolver/TransactionResolver.test.ts index 1a2f04838..24fa4e48c 100644 --- a/backend/src/graphql/resolver/TransactionResolver.test.ts +++ b/backend/src/graphql/resolver/TransactionResolver.test.ts @@ -20,12 +20,15 @@ import { login, sendCoins, } from '@/seeds/graphql/mutations' +import { transactionsQuery } from '@/seeds/graphql/queries' import { bobBaumeister } from '@/seeds/users/bob-baumeister' import { garrickOllivander } from '@/seeds/users/garrick-ollivander' import { peterLustig } from '@/seeds/users/peter-lustig' import { stephenHawking } from '@/seeds/users/stephen-hawking' let mutate: ApolloServerTestClient['mutate'], con: Connection +let query: ApolloServerTestClient['query'] + let testEnv: { mutate: ApolloServerTestClient['mutate'] query: ApolloServerTestClient['query'] @@ -35,6 +38,7 @@ let testEnv: { beforeAll(async () => { testEnv = await testEnvironment(logger) mutate = testEnv.mutate + query = testEnv.query con = testEnv.con await cleanDB() }) @@ -442,3 +446,42 @@ describe('send coins', () => { }) }) }) + +describe('transactionList', () => { + describe('unauthenticated', () => { + it('throws an error', async () => { + await expect(query({ query: transactionsQuery })).resolves.toMatchObject({ + errors: [new GraphQLError('401 Unauthorized')], + }) + }) + }) + + describe('authenticated', () => { + describe('no transactions', () => { + beforeAll(async () => { + await userFactory(testEnv, bobBaumeister) + await mutate({ + mutation: login, + variables: { + email: 'bob@baumeister.de', + password: 'Aa12345_', + }, + }) + }) + + it('has no transactions and balance 0', async () => { + await expect(query({ query: transactionsQuery })).resolves.toMatchObject({ + data: { + transactionList: { + balance: expect.objectContaining({ + balance: expect.decimalEqual(0), + }), + transactions: [], + }, + }, + errors: undefined, + }) + }) + }) + }) +}) diff --git a/backend/src/seeds/graphql/queries.ts b/backend/src/seeds/graphql/queries.ts index cc1edbc9d..bc8fa95e8 100644 --- a/backend/src/seeds/graphql/queries.ts +++ b/backend/src/seeds/graphql/queries.ts @@ -23,31 +23,26 @@ export const queryOptIn = gql` ` export const transactionsQuery = gql` - query ( - $currentPage: Int = 1 - $pageSize: Int = 25 - $order: Order = DESC - $onlyCreations: Boolean = false - ) { - transactionList( - currentPage: $currentPage - pageSize: $pageSize - order: $order - onlyCreations: $onlyCreations - ) { - balanceGDT - count - balance + query ($currentPage: Int = 1, $pageSize: Int = 25, $order: Order = DESC) { + transactionList(currentPage: $currentPage, pageSize: $pageSize, order: $order) { + balance { + balance + balanceGDT + count + linkCount + } transactions { id typeId amount balance + previousBalance balanceDate memo linkedUser { firstName lastName + gradidoID } decay { decay @@ -55,6 +50,7 @@ export const transactionsQuery = gql` end duration } + linkId } } } From 740b5cc83fda0b3f14a46bbc99209c0f0d5c9989 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 8 May 2023 11:45:14 +0200 Subject: [PATCH 06/10] admin: rename dist folder to build --- admin/.eslintignore | 2 +- admin/.gitignore | 2 +- admin/Dockerfile | 2 +- admin/package.json | 2 +- admin/run/server.js | 4 ++-- admin/vue.config.js | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/admin/.eslintignore b/admin/.eslintignore index 94934f9e7..e19e2338d 100644 --- a/admin/.eslintignore +++ b/admin/.eslintignore @@ -1,3 +1,3 @@ node_modules/ -dist/ +build/ coverage/ \ No newline at end of file diff --git a/admin/.gitignore b/admin/.gitignore index a67d270bc..3bc7bb4b2 100644 --- a/admin/.gitignore +++ b/admin/.gitignore @@ -1,5 +1,5 @@ node_modules/ -dist/ +build/ .cache/ /.env diff --git a/admin/Dockerfile b/admin/Dockerfile index ed0623a63..029339f10 100644 --- a/admin/Dockerfile +++ b/admin/Dockerfile @@ -84,7 +84,7 @@ CMD /bin/sh -c "yarn run dev" FROM base as production # Copy "binary"-files from build image -COPY --from=build ${DOCKER_WORKDIR}/dist ./dist +COPY --from=build ${DOCKER_WORKDIR}/build ./build # We also copy the node_modules express and serve-static for the run script COPY --from=build ${DOCKER_WORKDIR}/node_modules ./node_modules # Copy static files diff --git a/admin/package.json b/admin/package.json index 04c9a60e8..7a3b36a7a 100644 --- a/admin/package.json +++ b/admin/package.json @@ -11,7 +11,7 @@ "serve": "vue-cli-service serve --open", "build": "vue-cli-service build", "dev": "yarn run serve", - "analyse-bundle": "yarn build && webpack-bundle-analyzer dist/webpack.stats.json", + "analyse-bundle": "yarn build && webpack-bundle-analyzer build/webpack.stats.json", "lint": "eslint --max-warnings=0 --ext .js,.vue,.json .", "stylelint": "stylelint --max-warnings=0 '**/*.{scss,vue}'", "test": "cross-env TZ=UTC jest", diff --git a/admin/run/server.js b/admin/run/server.js index bccefc65c..b5078a0cf 100644 --- a/admin/run/server.js +++ b/admin/run/server.js @@ -9,10 +9,10 @@ const port = process.env.PORT || 8080 // Express Server const app = express() // Serve files -app.use(express.static(path.join(__dirname, '../dist'))) +app.use(express.static(path.join(__dirname, '../build'))) // Default to index.html app.get('*', (req, res) => { - res.sendFile(path.join(__dirname, '../dist/index.html')) + res.sendFile(path.join(__dirname, '../build/index.html')) }) app.listen(port, hostname, () => { diff --git a/admin/vue.config.js b/admin/vue.config.js index 8cc1e4b89..a92b26419 100644 --- a/admin/vue.config.js +++ b/admin/vue.config.js @@ -49,5 +49,5 @@ module.exports = { // Enable CSS source maps. sourceMap: CONFIG.NODE_ENV !== 'production', }, - outputDir: path.resolve(__dirname, './dist'), + outputDir: path.resolve(__dirname, './build'), } From b9cded91624b8db1bd324886677213bf5fdabe4b Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 8 May 2023 11:45:59 +0200 Subject: [PATCH 07/10] frontend: rename dist fodler to build --- frontend/.eslintignore | 2 +- frontend/.gitignore | 2 +- frontend/Dockerfile | 2 +- frontend/package.json | 2 +- frontend/run/server.js | 4 ++-- frontend/vue.config.js | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/frontend/.eslintignore b/frontend/.eslintignore index 94934f9e7..e19e2338d 100644 --- a/frontend/.eslintignore +++ b/frontend/.eslintignore @@ -1,3 +1,3 @@ node_modules/ -dist/ +build/ coverage/ \ No newline at end of file diff --git a/frontend/.gitignore b/frontend/.gitignore index 0a541ba06..843f840a1 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -1,6 +1,6 @@ .DS_Store node_modules/ -dist/ +build/ .cache/ npm-debug.log* yarn-debug.log* diff --git a/frontend/Dockerfile b/frontend/Dockerfile index a93199fad..1a4d8ca5c 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -84,7 +84,7 @@ CMD /bin/sh -c "yarn run dev" FROM base as production # Copy "binary"-files from build image -COPY --from=build ${DOCKER_WORKDIR}/dist ./dist +COPY --from=build ${DOCKER_WORKDIR}/build ./build # We also copy the node_modules express and serve-static for the run script COPY --from=build ${DOCKER_WORKDIR}/node_modules ./node_modules # Copy static files diff --git a/frontend/package.json b/frontend/package.json index f07284da6..7d89fba7c 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,7 +7,7 @@ "serve": "vue-cli-service serve --open", "build": "vue-cli-service build", "dev": "yarn run serve", - "analyse-bundle": "yarn build && webpack-bundle-analyzer dist/webpack.stats.json", + "analyse-bundle": "yarn build && webpack-bundle-analyzer build/webpack.stats.json", "lint": "eslint --max-warnings=0 --ext .js,.vue,.json .", "stylelint": "stylelint --max-warnings=0 '**/*.{scss,vue}'", "test": "cross-env TZ=UTC jest", diff --git a/frontend/run/server.js b/frontend/run/server.js index 7d75acba8..4a49dcd75 100644 --- a/frontend/run/server.js +++ b/frontend/run/server.js @@ -9,10 +9,10 @@ const port = process.env.PORT || 3000 // Express Server const app = express() // Serve files -app.use(express.static(path.join(__dirname, '../dist'))) +app.use(express.static(path.join(__dirname, '../build'))) // Default to index.html app.get('*', (req, res) => { - res.sendFile(path.join(__dirname, '../dist/index.html')) + res.sendFile(path.join(__dirname, '../build/index.html')) }) app.listen(port, hostname, () => { diff --git a/frontend/vue.config.js b/frontend/vue.config.js index 573f2a70b..7fb5d5fc2 100644 --- a/frontend/vue.config.js +++ b/frontend/vue.config.js @@ -64,5 +64,5 @@ module.exports = { // Enable CSS source maps. sourceMap: CONFIG.NODE_ENV !== 'production', }, - outputDir: path.resolve(__dirname, './dist'), + outputDir: path.resolve(__dirname, './build'), } From 60a86da5d2a691dc6143a238bc6df6ad3bd9a995 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 8 May 2023 11:46:37 +0200 Subject: [PATCH 08/10] corrected paths in scripts --- .../bare_metal/nginx/sites-available/gradido.conf.ssl.template | 2 +- .../bare_metal/nginx/sites-available/gradido.conf.template | 2 +- deployment/bare_metal/old/build_frontend.sh | 2 +- nginx/gradido.conf | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deployment/bare_metal/nginx/sites-available/gradido.conf.ssl.template b/deployment/bare_metal/nginx/sites-available/gradido.conf.ssl.template index ddb0724b0..a99327745 100644 --- a/deployment/bare_metal/nginx/sites-available/gradido.conf.ssl.template +++ b/deployment/bare_metal/nginx/sites-available/gradido.conf.ssl.template @@ -117,7 +117,7 @@ server { # TODO this could be a performance optimization #location /vue { - # alias /var/www/html/gradido/frontend/dist; + # alias /var/www/html/gradido/frontend/build; # index index.html; # # location ~* \.(png)$ { diff --git a/deployment/bare_metal/nginx/sites-available/gradido.conf.template b/deployment/bare_metal/nginx/sites-available/gradido.conf.template index 42a5a1851..f6149a818 100644 --- a/deployment/bare_metal/nginx/sites-available/gradido.conf.template +++ b/deployment/bare_metal/nginx/sites-available/gradido.conf.template @@ -103,7 +103,7 @@ server { # TODO this could be a performance optimization #location /vue { - # alias /var/www/html/gradido/frontend/dist; + # alias /var/www/html/gradido/frontend/build; # index index.html; # # location ~* \.(png)$ { diff --git a/deployment/bare_metal/old/build_frontend.sh b/deployment/bare_metal/old/build_frontend.sh index 4b3a8a444..a9103c19f 100755 --- a/deployment/bare_metal/old/build_frontend.sh +++ b/deployment/bare_metal/old/build_frontend.sh @@ -15,6 +15,6 @@ export NVM_DIR="/root/.nvm" $NPM_BIN install $NPM_BIN run build # prezip for faster deliver throw nginx -cd dist +cd build find . -type f -name "*.css" -exec gzip -9 -k {} \; find . -type f -name "*.js" -exec gzip -9 -k {} \; diff --git a/nginx/gradido.conf b/nginx/gradido.conf index bfb079d32..403a2766b 100644 --- a/nginx/gradido.conf +++ b/nginx/gradido.conf @@ -71,7 +71,7 @@ server { # TODO this could be a performance optimization #location /vue { - # alias /var/www/html/gradido/frontend/dist; + # alias /var/www/html/gradido/frontend/build; # index index.html; # # location ~* \.(png)$ { From b71f8c10c75cc1975bd69099f579876c7aff24f3 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 8 May 2023 11:47:31 +0200 Subject: [PATCH 09/10] remove all build folders in start script --- deployment/bare_metal/start.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index b30d90f19..5d5744bd6 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -130,6 +130,15 @@ rm -Rf $PROJECT_ROOT/admin/node_modules rm -Rf $PROJECT_ROOT/dht-node/node_modules rm -Rf $PROJECT_ROOT/federation/node_modules +# Remove build folders +# we had problems with corrupted incremtal builds +rm -Rf $PROJECT_ROOT/database/build +rm -Rf $PROJECT_ROOT/backend/build +rm -Rf $PROJECT_ROOT/frontend/build +rm -Rf $PROJECT_ROOT/admin/build +rm -Rf $PROJECT_ROOT/dht-node/build +rm -Rf $PROJECT_ROOT/federation/build + # Regenerate .env files cp -f $PROJECT_ROOT/database/.env $PROJECT_ROOT/database/.env.bak cp -f $PROJECT_ROOT/backend/.env $PROJECT_ROOT/backend/.env.bak From 9ad3b704df9dc7b51f4231401caff3f7d71e4433 Mon Sep 17 00:00:00 2001 From: mahula Date: Mon, 8 May 2023 12:10:43 +0200 Subject: [PATCH 10/10] adapt cypress env loginQuery to changes in backend --- e2e-tests/cypress.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e-tests/cypress.config.ts b/e2e-tests/cypress.config.ts index 7205ef9cb..e26259626 100644 --- a/e2e-tests/cypress.config.ts +++ b/e2e-tests/cypress.config.ts @@ -58,7 +58,7 @@ export default defineConfig({ mailserverURL: 'http://localhost:1080', loginQuery: `mutation ($email: String!, $password: String!, $publisherId: Int) { login(email: $email, password: $password, publisherId: $publisherId) { - email + id firstName lastName language