From 3f950a9bb8adbae50d25efa0e4d86752df9d195d Mon Sep 17 00:00:00 2001 From: elweyn Date: Mon, 15 Aug 2022 11:02:05 +0200 Subject: [PATCH 001/163] Method to retrieve not registered emails. --- backend/src/auth/RIGHTS.ts | 1 + .../src/graphql/resolver/KlicktippResolver.ts | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/backend/src/auth/RIGHTS.ts b/backend/src/auth/RIGHTS.ts index d5e2cc7ce..8e51c182e 100644 --- a/backend/src/auth/RIGHTS.ts +++ b/backend/src/auth/RIGHTS.ts @@ -48,4 +48,5 @@ export enum RIGHTS { LIST_CONTRIBUTION_LINKS = 'LIST_CONTRIBUTION_LINKS', DELETE_CONTRIBUTION_LINK = 'DELETE_CONTRIBUTION_LINK', UPDATE_CONTRIBUTION_LINK = 'UPDATE_CONTRIBUTION_LINK', + ADMIN_RETRIEVE_NOT_REGISTERED_EMAILS = 'ADMIN_RETRIEVE_NOT_REGISTERED_EMAILS', } diff --git a/backend/src/graphql/resolver/KlicktippResolver.ts b/backend/src/graphql/resolver/KlicktippResolver.ts index ce9a097e2..fecf6f08c 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.ts @@ -7,6 +7,8 @@ import { } from '@/apis/KlicktippController' import { RIGHTS } from '@/auth/RIGHTS' import SubscribeNewsletterArgs from '@arg/SubscribeNewsletterArgs' +import { User } from '@entity/User' +import { backendLogger } from '@/server/logger' @Resolver() export class KlicktippResolver { @@ -35,4 +37,21 @@ export class KlicktippResolver { ): Promise { return await klicktippSignIn(email, language) } + + @Authorized([RIGHTS.ADMIN_RETRIEVE_NOT_REGISTERED_EMAILS]) + @Query(() => [String]) + async retrieveNotRegisteredEmails(): Promise { + const users = await User.find() + const notRegisteredUser = [] + for (let i = 0; i < users.length; i++) { + const user = users[i] + try { + await getKlickTippUser(user.email) + } catch (err) { + notRegisteredUser.push(user.email) + backendLogger.error(`Error with email: ${user.email}; ${err}`) + } + } + return notRegisteredUser + } } From 32b5bf3d6b02adf701b9b071fefa14d7a7f2251c Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 16 Aug 2022 07:01:33 +0200 Subject: [PATCH 002/163] Remove resolver method for klickTipp not registered users. --- .../src/graphql/resolver/KlicktippResolver.ts | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/backend/src/graphql/resolver/KlicktippResolver.ts b/backend/src/graphql/resolver/KlicktippResolver.ts index fecf6f08c..07b872c43 100644 --- a/backend/src/graphql/resolver/KlicktippResolver.ts +++ b/backend/src/graphql/resolver/KlicktippResolver.ts @@ -37,21 +37,4 @@ export class KlicktippResolver { ): Promise { return await klicktippSignIn(email, language) } - - @Authorized([RIGHTS.ADMIN_RETRIEVE_NOT_REGISTERED_EMAILS]) - @Query(() => [String]) - async retrieveNotRegisteredEmails(): Promise { - const users = await User.find() - const notRegisteredUser = [] - for (let i = 0; i < users.length; i++) { - const user = users[i] - try { - await getKlickTippUser(user.email) - } catch (err) { - notRegisteredUser.push(user.email) - backendLogger.error(`Error with email: ${user.email}; ${err}`) - } - } - return notRegisteredUser - } } From 49de7366f44d47ac3c2e4449454f3aad6b4db14f Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 16 Aug 2022 07:02:07 +0200 Subject: [PATCH 003/163] Add method to log every user that is not registered at KlickTipp. --- backend/src/klicktipp.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 backend/src/klicktipp.ts diff --git a/backend/src/klicktipp.ts b/backend/src/klicktipp.ts new file mode 100644 index 000000000..3139cd296 --- /dev/null +++ b/backend/src/klicktipp.ts @@ -0,0 +1,28 @@ +import connection from '@/typeorm/connection' +import { getKlickTippUser } from './apis/KlicktippController' +import { User } from '../../database/entity/User' +import { getConnection } from '@dbTools/typeorm' + +export async function retrieveNotRegisteredEmails(): Promise { + const con = await connection() + if (!con) { + throw new Error('No connection to database') + } + const users = await User.find() + const notRegisteredUser = [] + for (let i = 0; i < users.length; i++) { + const user = users[i] + try { + await getKlickTippUser(user.email) + } catch (err) { + notRegisteredUser.push(user.email) + // eslint-disable-next-line no-console + console.log(`${user.email}`) + } + } + await con.close() + console.log('User die nicht bei KlickTipp vorhanden sind: ', notRegisteredUser) + return notRegisteredUser +} + +retrieveNotRegisteredEmails() From ea85f9c3ae17d458eb917fdd6f0481419fface59 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 16 Aug 2022 07:02:34 +0200 Subject: [PATCH 004/163] Add yarn klicktipp to start the script of not registered user. --- backend/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/package.json b/backend/package.json index c56c8e960..f3033a620 100644 --- a/backend/package.json +++ b/backend/package.json @@ -14,7 +14,8 @@ "dev": "cross-env TZ=UTC nodemon -w src --ext ts --exec ts-node -r tsconfig-paths/register src/index.ts", "lint": "eslint --max-warnings=0 --ext .js,.ts .", "test": "cross-env TZ=UTC NODE_ENV=development jest --runInBand --coverage --forceExit --detectOpenHandles", - "seed": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/seeds/index.ts" + "seed": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/seeds/index.ts", + "klicktipp": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/klicktipp.ts" }, "dependencies": { "@types/jest": "^27.0.2", From fad26a30dd6c63b7ca8db19bf6614339be43036d Mon Sep 17 00:00:00 2001 From: ogerly Date: Thu, 18 Aug 2022 10:30:13 +0200 Subject: [PATCH 005/163] prework messages in adminarea --- .../ContributionMessagesFormular.vue | 39 +++++++++++++++ .../ContributionMessagesList.vue | 47 +++++++++++++++++++ .../components/Tables/OpenCreationsTable.vue | 17 ++++++- 3 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 admin/src/components/ContributionMessages/ContributionMessagesFormular.vue create mode 100644 admin/src/components/ContributionMessages/ContributionMessagesList.vue diff --git a/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue b/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue new file mode 100644 index 000000000..177520fd4 --- /dev/null +++ b/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue @@ -0,0 +1,39 @@ + + diff --git a/admin/src/components/ContributionMessages/ContributionMessagesList.vue b/admin/src/components/ContributionMessages/ContributionMessagesList.vue new file mode 100644 index 000000000..2f1c038d2 --- /dev/null +++ b/admin/src/components/ContributionMessages/ContributionMessagesList.vue @@ -0,0 +1,47 @@ + + diff --git a/admin/src/components/Tables/OpenCreationsTable.vue b/admin/src/components/Tables/OpenCreationsTable.vue index 3ebc81fba..2b8956206 100644 --- a/admin/src/components/Tables/OpenCreationsTable.vue +++ b/admin/src/components/Tables/OpenCreationsTable.vue @@ -21,6 +21,9 @@ > + + + @@ -58,6 +69,8 @@ import { toggleRowDetails } from '../../mixins/toggleRowDetails' import RowDetails from '../RowDetails.vue' import EditCreationFormular from '../EditCreationFormular.vue' +import ContributionMessagesFormular from '../ContributionMessages/ContributionMessagesFormular.vue' +import ContributionMessagesList from '../ContributionMessages/ContributionMessagesList.vue' export default { name: 'OpenCreationsTable', @@ -65,6 +78,8 @@ export default { components: { EditCreationFormular, RowDetails, + ContributionMessagesFormular, + ContributionMessagesList, }, props: { items: { From edbe59b5bac2db05eb54335b866e05481608a424 Mon Sep 17 00:00:00 2001 From: ogerly Date: Thu, 18 Aug 2022 10:36:20 +0200 Subject: [PATCH 006/163] fix lint --- .../ContributionMessagesList.vue | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/admin/src/components/ContributionMessages/ContributionMessagesList.vue b/admin/src/components/ContributionMessages/ContributionMessagesList.vue index 2f1c038d2..18fbdc56d 100644 --- a/admin/src/components/ContributionMessages/ContributionMessagesList.vue +++ b/admin/src/components/ContributionMessages/ContributionMessagesList.vue @@ -1,10 +1,12 @@ + diff --git a/admin/src/components/ContributionMessages/slots/ContributionMessagesListItem.vue b/admin/src/components/ContributionMessages/slots/ContributionMessagesListItem.vue new file mode 100644 index 000000000..74d349d12 --- /dev/null +++ b/admin/src/components/ContributionMessages/slots/ContributionMessagesListItem.vue @@ -0,0 +1,16 @@ + + diff --git a/admin/src/components/ContributionMessages/slots/IsModerator.vue b/admin/src/components/ContributionMessages/slots/IsModerator.vue new file mode 100644 index 000000000..1fd284b65 --- /dev/null +++ b/admin/src/components/ContributionMessages/slots/IsModerator.vue @@ -0,0 +1,27 @@ + + + diff --git a/admin/src/components/ContributionMessages/slots/IsNotModerator.vue b/admin/src/components/ContributionMessages/slots/IsNotModerator.vue new file mode 100644 index 000000000..8554fdcf1 --- /dev/null +++ b/admin/src/components/ContributionMessages/slots/IsNotModerator.vue @@ -0,0 +1,33 @@ + + + diff --git a/admin/src/components/Tables/OpenCreationsTable.vue b/admin/src/components/Tables/OpenCreationsTable.vue index 2b8956206..649435798 100644 --- a/admin/src/components/Tables/OpenCreationsTable.vue +++ b/admin/src/components/Tables/OpenCreationsTable.vue @@ -51,12 +51,7 @@ />
- -
-
-
-
@@ -69,7 +64,7 @@ import { toggleRowDetails } from '../../mixins/toggleRowDetails' import RowDetails from '../RowDetails.vue' import EditCreationFormular from '../EditCreationFormular.vue' -import ContributionMessagesFormular from '../ContributionMessages/ContributionMessagesFormular.vue' + import ContributionMessagesList from '../ContributionMessages/ContributionMessagesList.vue' export default { @@ -78,7 +73,6 @@ export default { components: { EditCreationFormular, RowDetails, - ContributionMessagesFormular, ContributionMessagesList, }, props: { From 2a093c234f59294423ddb8b44b980d5c508d2726 Mon Sep 17 00:00:00 2001 From: ogerly Date: Thu, 18 Aug 2022 15:28:50 +0200 Subject: [PATCH 008/163] fix lint --- .../components/ContributionMessages/ContributionMessagesList.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/admin/src/components/ContributionMessages/ContributionMessagesList.vue b/admin/src/components/ContributionMessages/ContributionMessagesList.vue index 409ceb6b1..65484b14e 100644 --- a/admin/src/components/ContributionMessages/ContributionMessagesList.vue +++ b/admin/src/components/ContributionMessages/ContributionMessagesList.vue @@ -1,7 +1,6 @@ diff --git a/frontend/src/graphql/queries.js b/frontend/src/graphql/queries.js index f701ad8cf..d7fc0ce98 100644 --- a/frontend/src/graphql/queries.js +++ b/frontend/src/graphql/queries.js @@ -265,3 +265,26 @@ export const searchAdminUsers = gql` } } ` + +export const listContributionMessages = gql` + query($contributionId: Float!, $pageSize: Int = 25, $currentPage: Int = 1, $order: Order = ASC) { + listContributionMessages( + contributionId: $contributionId + pageSize: $pageSize + currentPage: $currentPage + order: $order + ) { + count + messages { + id + message + createdAt + updatedAt + type + userFirstName + userLastName + userId + } + } + } +` From fd74a2e67105b45a28041e28022b1fcaecb09e9c Mon Sep 17 00:00:00 2001 From: ogerly Date: Sat, 27 Aug 2022 11:20:30 +0200 Subject: [PATCH 072/163] reload messages if submited adminarea --- .../ContributionMessagesFormular.vue | 30 +++++++------------ .../ContributionMessagesList.vue | 6 +++- .../slots/ContributionMessagesListItem.vue | 6 ---- .../slots/IsModerator.vue | 24 ++++++++------- .../slots/IsNotModerator.vue | 7 +---- 5 files changed, 30 insertions(+), 43 deletions(-) diff --git a/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue b/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue index b7e706d5c..c04f8a573 100644 --- a/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue +++ b/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue @@ -1,23 +1,5 @@ From ef52c8b6d560d30d551e92ba2619e741488c4975 Mon Sep 17 00:00:00 2001 From: ogerly Date: Mon, 29 Aug 2022 08:08:30 +0200 Subject: [PATCH 073/163] delete unused toggleContributionMessagesBox function --- .../ContributionMessages/ContributionMessagesFormular.vue | 3 --- .../src/components/Contributions/ContributionListItem.vue | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/ContributionMessages/ContributionMessagesFormular.vue b/frontend/src/components/ContributionMessages/ContributionMessagesFormular.vue index 5fed6ebd6..80708726c 100644 --- a/frontend/src/components/ContributionMessages/ContributionMessagesFormular.vue +++ b/frontend/src/components/ContributionMessages/ContributionMessagesFormular.vue @@ -63,9 +63,6 @@ export default { event.preventDefault() this.form.text = '' }, - toggleContributionMessagesBox() { - this.$emit('toggle-contribution-messages-box', this.contributionId) - }, }, } diff --git a/frontend/src/components/Contributions/ContributionListItem.vue b/frontend/src/components/Contributions/ContributionListItem.vue index 6e95093db..976730384 100644 --- a/frontend/src/components/Contributions/ContributionListItem.vue +++ b/frontend/src/components/Contributions/ContributionListItem.vue @@ -173,7 +173,7 @@ export default { alert('toggleContributionMessagesBox(' + id + ')') }, getListContributionMessages() { - console.log('getListContributionMessages', this.contributionId) + // console.log('getListContributionMessages', this.contributionId) this.$apollo .query({ query: listContributionMessages, @@ -183,7 +183,7 @@ export default { fetchPolicy: 'no-cache', }) .then((result) => { - console.log('result', result.data.listContributionMessages.messages) + // console.log('result', result.data.listContributionMessages.messages) this.messages_get = result.data.listContributionMessages.messages }) .catch((error) => { From 14ca1378bf4505882646b26c8070572a830b470f Mon Sep 17 00:00:00 2001 From: ogerly Date: Mon, 29 Aug 2022 08:15:48 +0200 Subject: [PATCH 074/163] delete unused toggleContributionMessagesBox function --- .../ContributionMessages/ContributionMessagesList.vue | 4 ---- .../src/components/Contributions/ContributionListItem.vue | 4 ---- 2 files changed, 8 deletions(-) diff --git a/frontend/src/components/ContributionMessages/ContributionMessagesList.vue b/frontend/src/components/ContributionMessages/ContributionMessagesList.vue index 1b8e36cae..98e92e6e7 100644 --- a/frontend/src/components/ContributionMessages/ContributionMessagesList.vue +++ b/frontend/src/components/ContributionMessages/ContributionMessagesList.vue @@ -9,7 +9,6 @@ v-if="state === 'PENDING' || state === 'IN_PROGRESS'" class="mt-5" :contributionId="contributionId" - @toggle-contribution-messages-box="toggleContributionMessagesBox" @get-list-contribution-messages="getListContributionMessages" /> @@ -39,9 +38,6 @@ export default { }, }, methods: { - toggleContributionMessagesBox(id) { - this.$emit('toggle-contribution-messages-box', id) - }, getListContributionMessages() { this.$emit('get-list-contribution-messages', this.contributionId) }, diff --git a/frontend/src/components/Contributions/ContributionListItem.vue b/frontend/src/components/Contributions/ContributionListItem.vue index 976730384..8fc742cd3 100644 --- a/frontend/src/components/Contributions/ContributionListItem.vue +++ b/frontend/src/components/Contributions/ContributionListItem.vue @@ -67,7 +67,6 @@ :messages="messages_get" :state="state" :contributionId="contributionId" - @toggle-contribution-messages-box="toggleContributionMessagesBox" @get-list-contribution-messages="getListContributionMessages" /> @@ -169,9 +168,6 @@ export default { if (value) this.$emit('delete-contribution', item) }) }, - toggleContributionMessagesBox(id) { - alert('toggleContributionMessagesBox(' + id + ')') - }, getListContributionMessages() { // console.log('getListContributionMessages', this.contributionId) this.$apollo From 15af14a2331616c9053453e9433b652007d1dec6 Mon Sep 17 00:00:00 2001 From: ogerly Date: Mon, 29 Aug 2022 10:00:41 +0200 Subject: [PATCH 075/163] add methods updateState and emits --- .../ContributionMessages/ContributionMessagesFormular.vue | 1 + .../ContributionMessages/ContributionMessagesList.vue | 4 ++++ frontend/src/components/Contributions/ContributionList.vue | 4 ++++ .../src/components/Contributions/ContributionListItem.vue | 4 ++++ frontend/src/pages/Community.vue | 4 ++++ 5 files changed, 17 insertions(+) diff --git a/frontend/src/components/ContributionMessages/ContributionMessagesFormular.vue b/frontend/src/components/ContributionMessages/ContributionMessagesFormular.vue index 80708726c..7ec3c4ff9 100644 --- a/frontend/src/components/ContributionMessages/ContributionMessagesFormular.vue +++ b/frontend/src/components/ContributionMessages/ContributionMessagesFormular.vue @@ -52,6 +52,7 @@ export default { }) .then((result) => { this.$emit('get-list-contribution-messages', this.contributionId) + this.$emit('update-state', this.contributionId) this.form.text = '' this.toastSuccess(result) }) diff --git a/frontend/src/components/ContributionMessages/ContributionMessagesList.vue b/frontend/src/components/ContributionMessages/ContributionMessagesList.vue index 98e92e6e7..896487160 100644 --- a/frontend/src/components/ContributionMessages/ContributionMessagesList.vue +++ b/frontend/src/components/ContributionMessages/ContributionMessagesList.vue @@ -10,6 +10,7 @@ class="mt-5" :contributionId="contributionId" @get-list-contribution-messages="getListContributionMessages" + @update-state="updateState" /> @@ -41,6 +42,9 @@ export default { getListContributionMessages() { this.$emit('get-list-contribution-messages', this.contributionId) }, + updateState(id) { + this.$emit('update-state', id) + }, }, } diff --git a/frontend/src/components/Contributions/ContributionList.vue b/frontend/src/components/Contributions/ContributionList.vue index 724a69281..11cc0f9dd 100644 --- a/frontend/src/components/Contributions/ContributionList.vue +++ b/frontend/src/components/Contributions/ContributionList.vue @@ -6,6 +6,7 @@ :contributionId="item.id" @update-contribution-form="updateContributionForm" @delete-contribution="deleteContribution" + @update-state="updateState" /> @@ -186,6 +187,9 @@ export default { this.toastError(error.message) }) }, + updateState(id) { + this.$emit('update-state', id) + }, }, } diff --git a/frontend/src/pages/Community.vue b/frontend/src/pages/Community.vue index 5f9eb57f6..1753ca5d2 100644 --- a/frontend/src/pages/Community.vue +++ b/frontend/src/pages/Community.vue @@ -43,6 +43,7 @@ @update-list-contributions="updateListContributions" @update-contribution-form="updateContributionForm" @delete-contribution="deleteContribution" + @update-state="updateState" :contributionCount="contributionCount" :showPagination="true" :pageSize="pageSize" @@ -259,6 +260,9 @@ export default { updateTransactions(pagination) { this.$emit('update-transactions', pagination) }, + updateState(id) { + this.items.find((item) => item.id === id).state = 'PENDING' + }, }, created() { // verifyLogin is important at this point so that creation is updated on reload if they are deleted in a session in the admin area. From 40475ecb37953b3a06f0ee655235a57b85316466 Mon Sep 17 00:00:00 2001 From: ogerly Date: Mon, 29 Aug 2022 10:20:12 +0200 Subject: [PATCH 076/163] add locales key form.replay --- frontend/src/locales/de.json | 1 + frontend/src/locales/en.json | 1 + frontend/src/locales/es.json | 1 + frontend/src/locales/fr.json | 1 + frontend/src/locales/nl.json | 1 + 5 files changed, 5 insertions(+) diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index 1296616d3..008dc7705 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -132,6 +132,7 @@ "password_new_repeat": "Neues Passwort wiederholen", "password_old": "Altes Passwort", "recipient": "Empfänger", + "reply": "Antworten", "reset": "Zurücksetzen", "save": "Speichern", "scann_code": "QR Code Scanner - Scanne den QR Code deines Partners", diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index ee31350ce..394f74a7a 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -132,6 +132,7 @@ "password_new_repeat": "Repeat new password", "password_old": "Old password", "recipient": "Recipient", + "reply": "Reply", "reset": "Reset", "save": "Save", "scann_code": "QR Code Scanner - Scan the QR Code of your partner", diff --git a/frontend/src/locales/es.json b/frontend/src/locales/es.json index fa6613092..b871e7168 100644 --- a/frontend/src/locales/es.json +++ b/frontend/src/locales/es.json @@ -132,6 +132,7 @@ "password_new_repeat": "Repetir contraseña nueva", "password_old": "contraseña antigua", "recipient": "Destinatario", + "reply": "Respuesta", "reset": "Restablecer", "save": "Guardar", "scann_code": "QR Code Scanner - Escanea el código QR de tu pareja", diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json index 948f1b0fe..eea99d57c 100644 --- a/frontend/src/locales/fr.json +++ b/frontend/src/locales/fr.json @@ -132,6 +132,7 @@ "password_new_repeat": "Répétez le nouveau mot de passe", "password_old": "Ancien mot de passe", "recipient": "Destinataire", + "reply": "Répondre", "reset": "Réinitialiser", "save": "Sauvegarder", "scann_code": "QR Code Scanner - Scannez le QR code de votre partenaire", diff --git a/frontend/src/locales/nl.json b/frontend/src/locales/nl.json index 69896cbea..13a1b2124 100644 --- a/frontend/src/locales/nl.json +++ b/frontend/src/locales/nl.json @@ -132,6 +132,7 @@ "password_new_repeat": "Nieuw wachtwoord herhalen", "password_old": "Oud wachtwoord", "recipient": "Ontvanger", + "reply": "Antwoord", "reset": "Resetten", "save": "Opslaan", "scann_code": "QR Code Scanner - Scan de QR Code van uw partner", From 0cfd0f00977c766a4a073055e043ad103bc5891c Mon Sep 17 00:00:00 2001 From: ogerly Date: Mon, 29 Aug 2022 10:21:50 +0200 Subject: [PATCH 077/163] add locales key form.reply --- .../ContributionMessages/ContributionMessagesFormular.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/ContributionMessages/ContributionMessagesFormular.vue b/frontend/src/components/ContributionMessages/ContributionMessagesFormular.vue index 7ec3c4ff9..440f9781a 100644 --- a/frontend/src/components/ContributionMessages/ContributionMessagesFormular.vue +++ b/frontend/src/components/ContributionMessages/ContributionMessagesFormular.vue @@ -14,7 +14,7 @@ {{ $t('form.reset') }} - {{ $t('form.submit') }} + {{ $t('form.reply') }} From 6bd02a2d4bf298d909b1532ff1010e212f397add Mon Sep 17 00:00:00 2001 From: ogerly Date: Mon, 29 Aug 2022 11:12:31 +0200 Subject: [PATCH 078/163] add method updateState and emits --- .../ContributionMessagesFormular.vue | 1 + .../ContributionMessagesList.vue | 15 ++++----------- .../src/components/Tables/OpenCreationsTable.vue | 10 ++++++++-- admin/src/pages/CreationConfirm.vue | 7 +++++++ 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue b/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue index c04f8a573..06085dec7 100644 --- a/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue +++ b/admin/src/components/ContributionMessages/ContributionMessagesFormular.vue @@ -52,6 +52,7 @@ export default { }) .then((result) => { this.$emit('get-list-contribution-messages', this.contributionId) + this.$emit('update-state', this.contributionId) this.form.text = '' this.toastSuccess(result) }) diff --git a/admin/src/components/ContributionMessages/ContributionMessagesList.vue b/admin/src/components/ContributionMessages/ContributionMessagesList.vue index 15762b18d..c5863cdc3 100644 --- a/admin/src/components/ContributionMessages/ContributionMessagesList.vue +++ b/admin/src/components/ContributionMessages/ContributionMessagesList.vue @@ -4,21 +4,13 @@ {{ messages.lenght }}
- -
@@ -46,7 +38,6 @@ export default { }, methods: { getListContributionMessages(id) { - // console.log('getListContributionMessages', id) this.messages = [] this.$apollo .query({ @@ -57,13 +48,15 @@ export default { fetchPolicy: 'no-cache', }) .then((result) => { - // console.log('result', result.data.listContributionMessages) this.messages = result.data.listContributionMessages.messages }) .catch((error) => { this.toastError(error.message) }) }, + updateState(id) { + this.$emit('update-state', id) + }, }, created() { this.getListContributionMessages(this.contributionId) diff --git a/admin/src/components/Tables/OpenCreationsTable.vue b/admin/src/components/Tables/OpenCreationsTable.vue index 50ae6df97..86c5ecce6 100644 --- a/admin/src/components/Tables/OpenCreationsTable.vue +++ b/admin/src/components/Tables/OpenCreationsTable.vue @@ -57,11 +57,14 @@ :row="row" :creationUserData="creationUserData" @update-creation-data="updateCreationData" - @update-user-data="updateUserData" />
- +
@@ -116,6 +119,9 @@ export default { updateUserData(rowItem, newCreation) { rowItem.creation = newCreation }, + updateState(id) { + this.$emit('update-state', id) + }, }, } diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue index c07e6b351..c94d84cbd 100644 --- a/admin/src/pages/CreationConfirm.vue +++ b/admin/src/pages/CreationConfirm.vue @@ -9,6 +9,7 @@ :fields="fields" @remove-creation="removeCreation" @show-overlay="showOverlay" + @update-state="updateState" /> @@ -79,6 +80,7 @@ export default { .then((result) => { this.$store.commit('resetOpenCreations') this.pendingCreations = result.data.listUnconfirmedContributions + console.log(this.pendingCreations) this.$store.commit('setOpenCreations', result.data.listUnconfirmedContributions.length) }) .catch((error) => { @@ -93,6 +95,11 @@ export default { this.overlay = true this.item = item }, + updateState(id) { + console.log('admin updateState', id) + console.log(this.pendingCreations) + this.pendingCreations.find((item) => item.id === id).state = 'IN_PROGRESS' + }, }, computed: { fields() { From 6acb944ac05a63b871b789eaa1526218c03c9a2d Mon Sep 17 00:00:00 2001 From: ogerly Date: Mon, 29 Aug 2022 11:17:45 +0200 Subject: [PATCH 079/163] delete unused local keys --- admin/src/locales/de.json | 3 +-- admin/src/locales/en.json | 3 +-- admin/src/pages/CreationConfirm.vue | 3 --- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/admin/src/locales/de.json b/admin/src/locales/de.json index a9e18f165..b3b587e9a 100644 --- a/admin/src/locales/de.json +++ b/admin/src/locales/de.json @@ -159,6 +159,5 @@ }, "user_deleted": "Nutzer ist gelöscht.", "user_recovered": "Nutzer ist wiederhergestellt.", - "user_search": "Nutzer-Suche", - "preview": "Vorschau" + "user_search": "Nutzer-Suche" } diff --git a/admin/src/locales/en.json b/admin/src/locales/en.json index 9b5ab107a..ee6ca1b63 100644 --- a/admin/src/locales/en.json +++ b/admin/src/locales/en.json @@ -159,6 +159,5 @@ }, "user_deleted": "User is deleted.", "user_recovered": "User is recovered.", - "user_search": "User search", - "preview": "Preview" + "user_search": "User search" } diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue index c94d84cbd..595bd56b2 100644 --- a/admin/src/pages/CreationConfirm.vue +++ b/admin/src/pages/CreationConfirm.vue @@ -80,7 +80,6 @@ export default { .then((result) => { this.$store.commit('resetOpenCreations') this.pendingCreations = result.data.listUnconfirmedContributions - console.log(this.pendingCreations) this.$store.commit('setOpenCreations', result.data.listUnconfirmedContributions.length) }) .catch((error) => { @@ -96,8 +95,6 @@ export default { this.item = item }, updateState(id) { - console.log('admin updateState', id) - console.log(this.pendingCreations) this.pendingCreations.find((item) => item.id === id).state = 'IN_PROGRESS' }, }, From c76a58b59b041a1803c1563aae38e638de8e7a30 Mon Sep 17 00:00:00 2001 From: ogerly Date: Mon, 29 Aug 2022 11:18:31 +0200 Subject: [PATCH 080/163] delete v-toogle from element --- frontend/src/components/Contributions/ContributionListItem.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/Contributions/ContributionListItem.vue b/frontend/src/components/Contributions/ContributionListItem.vue index 56f71bb66..78ba6f0fe 100644 --- a/frontend/src/components/Contributions/ContributionListItem.vue +++ b/frontend/src/components/Contributions/ContributionListItem.vue @@ -2,7 +2,7 @@
-
+
Date: Mon, 29 Aug 2022 11:49:12 +0200 Subject: [PATCH 081/163] fix locales --- frontend/src/locales/de.json | 6 +++--- frontend/src/locales/en.json | 6 +++--- frontend/src/locales/es.json | 6 +++--- frontend/src/locales/fr.json | 6 +++--- frontend/src/locales/nl.json | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index 008dc7705..4ebedf0a5 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -35,13 +35,13 @@ "contribution": { "activity": "Tätigkeit", "alert": { + "answerQuestion": "Bitte beantworte die Nachfrage", "communityNoteList": "Hier findest du alle eingereichten und bestätigten Beiträge von allen Mitgliedern aus dieser Gemeinschaft.", "confirm": "bestätigt", + "in_progress": "Es gibt eine Rückfrage der Moderatoren.", "myContributionNoteList": "Eingereichte Beiträge, die noch nicht bestätigt wurden, kannst du jederzeit bearbeiten oder löschen.", "pending": "Eingereicht und wartet auf Bestätigung", - "rejected": "abgelehnt", - "in_progress": "Es gibt eine Rückfrage der Moderatoren.", - "answerQuestion": "Bitte beantworte die Nachfrage" + "rejected": "abgelehnt" }, "date": "Beitrag für:", "delete": "Beitrag löschen! Bist du sicher?", diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 394f74a7a..f0cb341c0 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -35,13 +35,13 @@ "contribution": { "activity": "Activity", "alert": { + "answerQuestion": "Please answer the question", "communityNoteList": "Here you will find all submitted and confirmed contributions from all members of this community.", "confirm": "confirmed", + "in_progress": "Es gibt eine Rückfrage der Moderatoren.", "myContributionNoteList": "You can edit or delete entries that have not yet been confirmed at any time.", "pending": "Submitted and waiting for confirmation", - "rejected": "deleted", - "in_progress": "Es gibt eine Rückfrage der Moderatoren.", - "answerQuestion": "Please answer the question" + "rejected": "deleted" }, "date": "Contribution for:", "delete": "Delete Contribution! Are you sure?", diff --git a/frontend/src/locales/es.json b/frontend/src/locales/es.json index b871e7168..4cefe2905 100644 --- a/frontend/src/locales/es.json +++ b/frontend/src/locales/es.json @@ -35,13 +35,13 @@ "contribution": { "activity": "Actividad", "alert": { + "answerQuestion": "Please answer the question", "communityNoteList": "Aquí encontrarás todas las contribuciones enviadas y confirmadas de todos los miembros de esta comunidad.", "confirm": "confirmado", + "in_progress": "Es gibt eine Rückfrage der Moderatoren.", "myContributionNoteList": "Puedes editar o eliminar las contribuciones enviadas que aún no han sido confirmadas en cualquier momento.", "pending": "Enviado y a la espera de confirmación", - "rejected": "rechazado", - "in_progress": "Es gibt eine Rückfrage der Moderatoren.", - "answerQuestion": "Please answer the question" + "rejected": "rechazado" }, "date": "Contribución para:", "delete": "Eliminar la contribución. ¿Estás seguro?", diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json index eea99d57c..a35e6ce30 100644 --- a/frontend/src/locales/fr.json +++ b/frontend/src/locales/fr.json @@ -35,13 +35,13 @@ "contribution": { "activity": "Activité", "alert": { + "answerQuestion": "Please answer the question", "communityNoteList": "Vous trouverez ci-contre toutes les contributions versées et certifiées de tous les membres de cette communauté.", "confirm": " Approuvé", + "in_progress": "Es gibt eine Rückfrage der Moderatoren.", "myContributionNoteList": "À tout moment vous pouvez éditer ou supprimer les données qui n´ont pas été confirmées.", "pending": "Inscription en attente de validation", - "rejected": "supprimé", - "in_progress": "Es gibt eine Rückfrage der Moderatoren.", - "answerQuestion": "Please answer the question" + "rejected": "supprimé" }, "date": "Contribution pour:", "delete": "Supprimer la contribution! Êtes-vous sûr?", diff --git a/frontend/src/locales/nl.json b/frontend/src/locales/nl.json index 13a1b2124..c301b9201 100644 --- a/frontend/src/locales/nl.json +++ b/frontend/src/locales/nl.json @@ -35,13 +35,13 @@ "contribution": { "activity": "Activiteit", "alert": { + "answerQuestion": "Please answer the question", "communityNoteList": "Hier vind je alle ingediende en bevestigde bijdragen van alle leden uit deze gemeenschap.", "confirm": "bevestigt", + "in_progress": "Es gibt eine Rückfrage der Moderatoren.", "myContributionNoteList": "Ingediende bijdragen, die nog niet bevestigd zijn, kun je op elk moment wijzigen of verwijderen.", "pending": "Ingediend en wacht op bevestiging", - "rejected": "afgewezen", - "in_progress": "Es gibt eine Rückfrage der Moderatoren.", - "answerQuestion": "Please answer the question" + "rejected": "afgewezen" }, "date": "Bijdrage voor:", "delete": "Bijdrage verwijderen! Weet je het zeker?", From efaf02facc9f06cecd2f7f4c3869bd3a6de17e91 Mon Sep 17 00:00:00 2001 From: ogerly Date: Mon, 29 Aug 2022 11:49:38 +0200 Subject: [PATCH 082/163] fix locales adminarea --- admin/src/locales/de.json | 4 ++-- admin/src/locales/en.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/admin/src/locales/de.json b/admin/src/locales/de.json index b3b587e9a..b8ad45af1 100644 --- a/admin/src/locales/de.json +++ b/admin/src/locales/de.json @@ -70,8 +70,8 @@ "short_hash": "({shortHash})" }, "form": { - "submit": "absenden", - "reset": "löschen" + "reset": "löschen", + "submit": "absenden" }, "GDD": "GDD", "hide_details": "Details verbergen", diff --git a/admin/src/locales/en.json b/admin/src/locales/en.json index ee6ca1b63..bc8c297f5 100644 --- a/admin/src/locales/en.json +++ b/admin/src/locales/en.json @@ -70,8 +70,8 @@ "short_hash": "({shortHash})" }, "form": { - "submit": "submit", - "reset": "reset" + "reset": "reset", + "submit": "submit" }, "GDD": "GDD", "hide_details": "Hide details", From 423989777b91898b5a9b698956c72537aacd1a8f Mon Sep 17 00:00:00 2001 From: elweyn Date: Mon, 29 Aug 2022 12:19:25 +0200 Subject: [PATCH 083/163] Remove leftJoin on user, changed ContributionMessage array to count of ContributionMessage. --- backend/src/graphql/model/Contribution.ts | 9 +++------ backend/src/graphql/resolver/ContributionResolver.ts | 1 - 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/backend/src/graphql/model/Contribution.ts b/backend/src/graphql/model/Contribution.ts index c0e6d66f3..1f690a3d8 100644 --- a/backend/src/graphql/model/Contribution.ts +++ b/backend/src/graphql/model/Contribution.ts @@ -2,7 +2,6 @@ import { ObjectType, Field, Int } from 'type-graphql' import Decimal from 'decimal.js-light' import { Contribution as dbContribution } from '@entity/Contribution' import { User } from '@entity/User' -import { ContributionMessage } from './ContributionMessage' @ObjectType() export class Contribution { @@ -18,9 +17,7 @@ export class Contribution { this.confirmedBy = contribution.confirmedBy this.contributionDate = contribution.contributionDate this.state = contribution.contributionStatus - this.messages = contribution.messages - ? contribution.messages.map((message) => new ContributionMessage(message, message.user)) - : [] + this.messagesCount = contribution.messages ? contribution.messages.length : 0 } @Field(() => Number) @@ -53,8 +50,8 @@ export class Contribution { @Field(() => Date) contributionDate: Date - @Field(() => [ContributionMessage]) - messages: ContributionMessage[] + @Field(() => Number) + messagesCount: number @Field(() => String) state: string diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index f8300f164..fc93880f1 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -97,7 +97,6 @@ export class ContributionResolver { .select('c') .from(dbContribution, 'c') .leftJoinAndSelect('c.messages', 'm') - .leftJoinAndSelect('m.user', 'u') .where(where) .orderBy('c.createdAt', order) .limit(pageSize) From 214f85544b64c82911c1a5c85d8ac09578bb61ae Mon Sep 17 00:00:00 2001 From: elweyn Date: Mon, 29 Aug 2022 12:24:09 +0200 Subject: [PATCH 084/163] ContributionMessage is only defined in 0047 so remove the OneToMany relation from 0046 User and add it to 0047 User. --- .../User.ts | 5 - database/entity/0047-messages_tables/User.ts | 116 ++++++++++++++++++ database/entity/User.ts | 2 +- 3 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 database/entity/0047-messages_tables/User.ts diff --git a/database/entity/0046-adapt_users_table_for_gradidoid/User.ts b/database/entity/0046-adapt_users_table_for_gradidoid/User.ts index a772a3c99..3f2547cad 100644 --- a/database/entity/0046-adapt_users_table_for_gradidoid/User.ts +++ b/database/entity/0046-adapt_users_table_for_gradidoid/User.ts @@ -8,7 +8,6 @@ import { JoinColumn, } from 'typeorm' import { Contribution } from '../Contribution' -import { ContributionMessage } from '../ContributionMessage' @Entity('users', { engine: 'InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci' }) export class User extends BaseEntity { @@ -109,8 +108,4 @@ export class User extends BaseEntity { @OneToMany(() => Contribution, (contribution) => contribution.user) @JoinColumn({ name: 'user_id' }) contributions?: Contribution[] - - @OneToMany(() => ContributionMessage, (message) => message.user) - @JoinColumn({ name: 'user_id' }) - messages?: ContributionMessage[] } diff --git a/database/entity/0047-messages_tables/User.ts b/database/entity/0047-messages_tables/User.ts new file mode 100644 index 000000000..a772a3c99 --- /dev/null +++ b/database/entity/0047-messages_tables/User.ts @@ -0,0 +1,116 @@ +import { + BaseEntity, + Entity, + PrimaryGeneratedColumn, + Column, + DeleteDateColumn, + OneToMany, + JoinColumn, +} from 'typeorm' +import { Contribution } from '../Contribution' +import { ContributionMessage } from '../ContributionMessage' + +@Entity('users', { engine: 'InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci' }) +export class User extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true }) + id: number + + @Column({ + name: 'gradido_id', + length: 36, + nullable: false, + unique: true, + collation: 'utf8mb4_unicode_ci', + }) + gradidoID: string + + @Column({ + name: 'alias', + length: 20, + nullable: true, + unique: true, + default: null, + collation: 'utf8mb4_unicode_ci', + }) + alias: string + + @Column({ name: 'public_key', type: 'binary', length: 32, default: null, nullable: true }) + pubKey: Buffer + + @Column({ name: 'privkey', type: 'binary', length: 80, default: null, nullable: true }) + privKey: Buffer + + @Column({ length: 255, unique: true, nullable: false, collation: 'utf8mb4_unicode_ci' }) + email: string + + @Column({ + name: 'first_name', + length: 255, + nullable: true, + default: null, + collation: 'utf8mb4_unicode_ci', + }) + firstName: string + + @Column({ + name: 'last_name', + length: 255, + nullable: true, + default: null, + collation: 'utf8mb4_unicode_ci', + }) + lastName: string + + @DeleteDateColumn() + deletedAt: Date | null + + @Column({ type: 'bigint', default: 0, unsigned: true }) + password: BigInt + + @Column({ name: 'email_hash', type: 'binary', length: 32, default: null, nullable: true }) + emailHash: Buffer + + @Column({ name: 'created', default: () => 'CURRENT_TIMESTAMP', nullable: false }) + createdAt: Date + + @Column({ name: 'email_checked', type: 'bool', nullable: false, default: false }) + emailChecked: boolean + + @Column({ length: 4, default: 'de', collation: 'utf8mb4_unicode_ci', nullable: false }) + language: string + + @Column({ name: 'is_admin', type: 'datetime', nullable: true, default: null }) + isAdmin: Date | null + + @Column({ name: 'referrer_id', type: 'int', unsigned: true, nullable: true, default: null }) + referrerId?: number | null + + @Column({ + name: 'contribution_link_id', + type: 'int', + unsigned: true, + nullable: true, + default: null, + }) + contributionLinkId?: number | null + + @Column({ name: 'publisher_id', default: 0 }) + publisherId: number + + @Column({ + type: 'text', + name: 'passphrase', + collation: 'utf8mb4_unicode_ci', + nullable: true, + default: null, + }) + passphrase: string + + @OneToMany(() => Contribution, (contribution) => contribution.user) + @JoinColumn({ name: 'user_id' }) + contributions?: Contribution[] + + @OneToMany(() => ContributionMessage, (message) => message.user) + @JoinColumn({ name: 'user_id' }) + messages?: ContributionMessage[] +} diff --git a/database/entity/User.ts b/database/entity/User.ts index 02a99fcd1..7d15bf559 100644 --- a/database/entity/User.ts +++ b/database/entity/User.ts @@ -1 +1 @@ -export { User } from './0046-adapt_users_table_for_gradidoid/User' +export { User } from './0047-messages_tables/User' From 61d763030af88ffb0dc409659ec50ac6dd43bcda Mon Sep 17 00:00:00 2001 From: ogerly Date: Mon, 29 Aug 2022 12:54:32 +0200 Subject: [PATCH 085/163] change state if messagesCount 0 --- admin/src/pages/CreationConfirm.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue index 595bd56b2..f518e1f00 100644 --- a/admin/src/pages/CreationConfirm.vue +++ b/admin/src/pages/CreationConfirm.vue @@ -95,7 +95,10 @@ export default { this.item = item }, updateState(id) { - this.pendingCreations.find((item) => item.id === id).state = 'IN_PROGRESS' + this.pendingCreations.find((value) => { + value.state = 'IN_PROGRESS' + value.messageCount = value.messageCount + 1 + }) }, }, computed: { From 7156f1afd5a0c9a3166acc441eaf7fc61bd286d6 Mon Sep 17 00:00:00 2001 From: elweyn Date: Mon, 29 Aug 2022 12:58:01 +0200 Subject: [PATCH 086/163] Setup Test file for ContributionMessageResolver. --- .../ContributionMessageResolver.test.ts | 47 +++++++++++++++++++ backend/src/seeds/graphql/mutations.ts | 28 +++++++++++ backend/src/seeds/graphql/queries.ts | 23 +++++++++ 3 files changed, 98 insertions(+) create mode 100644 backend/src/graphql/resolver/ContributionMessageResolver.test.ts diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts new file mode 100644 index 000000000..f98e4f211 --- /dev/null +++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts @@ -0,0 +1,47 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ + +import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' +import { cleanDB, resetToken, testEnvironment } from '@test/helpers' +import { GraphQLError } from 'graphql' +import { userFactory } from '@/seeds/factory/user' +import { creationFactory } from '@/seeds/factory/creation' +import { creations } from '@/seeds/creation/index' +import { peterLustig } from '@/seeds/users/peter-lustig' +import { createContributionMessage } from '@/seeds/graphql/mutations' + +let mutate: any, query: any, con: any +let testEnv: any +let result: any + +beforeAll(async () => { + testEnv = await testEnvironment() + mutate = testEnv.mutate + query = testEnv.query + con = testEnv.con + await cleanDB() +}) + +afterAll(async () => { + await cleanDB() + await con.close() +}) + +describe('ContributionMessageResolver', () => { + describe('createContributionMessage', () => { + describe('unauthenticated', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: createContributionMessage, + variables: { contributionId: 1, message: 'This is a test message' }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + }) +}) diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index bf898bd7d..e5f290645 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -261,3 +261,31 @@ export const deleteContribution = gql` deleteContribution(id: $id) } ` + +export const createContributionMessage = gql` + mutation ($contributionId: Float!, $message: String!) { + createContributionMessage(contributionId: $contributionId, message: $message) { + id + message + createdAt + updatedAt + type + userFirstName + userLastName + } + } +` + +export const adminCreateContributionMessage = gql` + mutation ($contributionId: Float!, $message: String!) { + adminCreateContributionMessage(contributionId: $contributionId, message: $message) { + id + message + createdAt + updatedAt + type + userFirstName + userLastName + } + } +` diff --git a/backend/src/seeds/graphql/queries.ts b/backend/src/seeds/graphql/queries.ts index 3bd042ac2..60dffa21b 100644 --- a/backend/src/seeds/graphql/queries.ts +++ b/backend/src/seeds/graphql/queries.ts @@ -292,3 +292,26 @@ export const searchAdminUsers = gql` } } ` + +export const listContributionMessages = gql` + query ($contributionId: Float!, $pageSize: Int = 25, $currentPage: Int = 1, $order: Order = ASC) { + listContributionMessages( + contributionId: $contributionId + pageSize: $pageSize + currentPage: $currentPage + order: $order + ) { + count + messages { + id + message + createdAt + updatedAt + type + userFirstName + userLastName + userId + } + } + } +` From 8b62696c91aaa8116dc5960360d586f99a6dc136 Mon Sep 17 00:00:00 2001 From: elweyn Date: Mon, 29 Aug 2022 13:07:24 +0200 Subject: [PATCH 087/163] Add test that listContributionMessages throws error for non authenticated user. --- .../ContributionMessageResolver.test.ts | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts index f98e4f211..8d65db306 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts @@ -1,18 +1,13 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' -import { cleanDB, resetToken, testEnvironment } from '@test/helpers' +import { cleanDB, testEnvironment } from '@test/helpers' import { GraphQLError } from 'graphql' -import { userFactory } from '@/seeds/factory/user' -import { creationFactory } from '@/seeds/factory/creation' -import { creations } from '@/seeds/creation/index' -import { peterLustig } from '@/seeds/users/peter-lustig' import { createContributionMessage } from '@/seeds/graphql/mutations' +import { listContributionMessages } from '@/seeds/graphql/queries' let mutate: any, query: any, con: any let testEnv: any -let result: any beforeAll(async () => { testEnv = await testEnvironment() @@ -44,4 +39,21 @@ describe('ContributionMessageResolver', () => { }) }) }) + + describe('listContributionMessages', () => { + describe('unauthenticated', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: listContributionMessages, + variables: { contributionId: 1 }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + }) }) From ac4f7dc04a193b4594cbf37740d3e81bf85d4794 Mon Sep 17 00:00:00 2001 From: elweyn Date: Mon, 29 Aug 2022 13:16:44 +0200 Subject: [PATCH 088/163] Add test with non existing contributionId. --- .../ContributionMessageResolver.test.ts | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts index 8d65db306..c66a85700 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts @@ -1,10 +1,12 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { cleanDB, testEnvironment } from '@test/helpers' +import { cleanDB, resetToken, testEnvironment } from '@test/helpers' import { GraphQLError } from 'graphql' import { createContributionMessage } from '@/seeds/graphql/mutations' -import { listContributionMessages } from '@/seeds/graphql/queries' +import { listContributionMessages, login } from '@/seeds/graphql/queries' +import { userFactory } from '@/seeds/factory/user' +import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' let mutate: any, query: any, con: any let testEnv: any @@ -38,6 +40,39 @@ describe('ContributionMessageResolver', () => { ) }) }) + + describe('authenticated', () => { + beforeAll(async () => { + await userFactory(testEnv, bibiBloxberg) + await query({ + query: login, + variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' }, + }) + }) + + afterAll(async () => { + await cleanDB() + resetToken() + }) + + describe('input not valid', () => { + it('throws error when contribution does not exist', async () => { + await expect( + mutate({ + mutation: createContributionMessage, + variables: { + contributionId: -1, + message: 'Test', + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('Contribution not found')], + }), + ) + }) + }) + }) }) describe('listContributionMessages', () => { @@ -55,5 +90,20 @@ describe('ContributionMessageResolver', () => { ) }) }) + + describe('authenticated', () => { + beforeAll(async () => { + await userFactory(testEnv, bibiBloxberg) + await query({ + query: login, + variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' }, + }) + }) + + afterAll(async () => { + await cleanDB() + resetToken() + }) + }) }) }) From 4f02fcc9900875a4b1b7579e592268f23d300241 Mon Sep 17 00:00:00 2001 From: ogerly Date: Mon, 29 Aug 2022 13:18:28 +0200 Subject: [PATCH 089/163] add close on contribution messages list box --- admin/src/pages/CreationConfirm.vue | 1 + .../ContributionMessagesList.vue | 4 ++++ .../Contributions/ContributionListItem.vue | 16 +++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue index f518e1f00..ffefe5d3f 100644 --- a/admin/src/pages/CreationConfirm.vue +++ b/admin/src/pages/CreationConfirm.vue @@ -98,6 +98,7 @@ export default { this.pendingCreations.find((value) => { value.state = 'IN_PROGRESS' value.messageCount = value.messageCount + 1 + return null }) }, }, diff --git a/frontend/src/components/ContributionMessages/ContributionMessagesList.vue b/frontend/src/components/ContributionMessages/ContributionMessagesList.vue index 896487160..5303b1f11 100644 --- a/frontend/src/components/ContributionMessages/ContributionMessagesList.vue +++ b/frontend/src/components/ContributionMessages/ContributionMessagesList.vue @@ -12,6 +12,10 @@ @get-list-contribution-messages="getListContributionMessages" @update-state="updateState" /> +
+ + {{ $t('form.close') }} +