From 65965a2ffd40c7f07b734de8cd0844b0ab8f46b8 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 20 Jun 2023 11:34:48 +0200 Subject: [PATCH 01/12] add MODERATOR contribution message type --- backend/src/graphql/arg/ContributionMessageArgs.ts | 5 +++++ .../enum/{MessageType.ts => ContributionMessageType.ts} | 1 + backend/src/graphql/resolver/ContributionMessageResolver.ts | 2 +- backend/src/graphql/resolver/ContributionResolver.ts | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) rename backend/src/graphql/enum/{MessageType.ts => ContributionMessageType.ts} (73%) diff --git a/backend/src/graphql/arg/ContributionMessageArgs.ts b/backend/src/graphql/arg/ContributionMessageArgs.ts index d36e1832d..6482793aa 100644 --- a/backend/src/graphql/arg/ContributionMessageArgs.ts +++ b/backend/src/graphql/arg/ContributionMessageArgs.ts @@ -1,5 +1,7 @@ import { ArgsType, Field, Int, InputType } from 'type-graphql' +import { ContributionMessageType } from '@enum/ContributionMessageType' + @InputType() @ArgsType() export class ContributionMessageArgs { @@ -8,4 +10,7 @@ export class ContributionMessageArgs { @Field(() => String) message: string + + @Field(() => ContributionMessageType, { defaultValue: ContributionMessageType.DIALOG }) + messageType: ContributionMessageType } diff --git a/backend/src/graphql/enum/MessageType.ts b/backend/src/graphql/enum/ContributionMessageType.ts similarity index 73% rename from backend/src/graphql/enum/MessageType.ts rename to backend/src/graphql/enum/ContributionMessageType.ts index a4606e464..83b011a0b 100644 --- a/backend/src/graphql/enum/MessageType.ts +++ b/backend/src/graphql/enum/ContributionMessageType.ts @@ -3,6 +3,7 @@ import { registerEnumType } from 'type-graphql' export enum ContributionMessageType { HISTORY = 'HISTORY', DIALOG = 'DIALOG', + MODERATOR = 'MODERATOR', // messages for moderator communication, can only be seen by moderators } registerEnumType(ContributionMessageType, { diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts index b7fd37787..56a7a1ec9 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts @@ -8,8 +8,8 @@ import { Arg, Args, Authorized, Ctx, Int, Mutation, Query, Resolver } from 'type import { ContributionMessageArgs } from '@arg/ContributionMessageArgs' import { Paginated } from '@arg/Paginated' +import { ContributionMessageType } from '@enum/ContributionMessageType' import { ContributionStatus } from '@enum/ContributionStatus' -import { ContributionMessageType } from '@enum/MessageType' import { Order } from '@enum/Order' import { ContributionMessage, ContributionMessageListResult } from '@model/ContributionMessage' diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index fa1590523..42ec2f371 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -11,9 +11,9 @@ import { AdminCreateContributionArgs } from '@arg/AdminCreateContributionArgs' import { AdminUpdateContributionArgs } from '@arg/AdminUpdateContributionArgs' import { ContributionArgs } from '@arg/ContributionArgs' import { Paginated } from '@arg/Paginated' +import { ContributionMessageType } from '@enum/ContributionMessageType' import { ContributionStatus } from '@enum/ContributionStatus' import { ContributionType } from '@enum/ContributionType' -import { ContributionMessageType } from '@enum/MessageType' import { Order } from '@enum/Order' import { TransactionTypeId } from '@enum/TransactionTypeId' import { AdminUpdateContribution } from '@model/AdminUpdateContribution' From 732560aaac7e960ac606897c83cb9a51f9a9585f Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 20 Jun 2023 12:11:44 +0200 Subject: [PATCH 02/12] add message type arg to admin create contribution message --- .../ContributionMessageResolver.test.ts | 36 ++++++++++++++++++- .../resolver/ContributionMessageResolver.ts | 4 +-- backend/src/seeds/graphql/mutations.ts | 8 +++-- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts index 1b6b034c4..f3b7a636e 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts @@ -217,6 +217,33 @@ describe('ContributionMessageResolver', () => { ) }) }) + + describe('contribution message type MODERATOR', () => { + it('creates ContributionMessage', async () => { + await expect( + mutate({ + mutation: adminCreateContributionMessage, + variables: { + contributionId: result.data.createContribution.id, + message: 'Internal moderator communication', + messageType: 'MODERATOR', + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + data: { + adminCreateContributionMessage: expect.objectContaining({ + id: expect.any(Number), + message: 'Internal moderator communication', + type: 'MODERATOR', + userFirstName: 'Peter', + userLastName: 'Lustig', + }), + }, + }), + ) + }) + }) }) }) @@ -395,7 +422,7 @@ describe('ContributionMessageResolver', () => { expect.objectContaining({ data: { listContributionMessages: { - count: 2, + count: 3, messages: expect.arrayContaining([ expect.objectContaining({ id: expect.any(Number), @@ -411,6 +438,13 @@ describe('ContributionMessageResolver', () => { userFirstName: 'Bibi', userLastName: 'Bloxberg', }), + expect.objectContaining({ + id: expect.any(Number), + message: 'Internal moderator communication', + type: 'MODERATOR', + userFirstName: 'Peter', + userLastName: 'Lustig', + }), ]), }, }, diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts index 56a7a1ec9..25f2a2560 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts @@ -104,7 +104,7 @@ export class ContributionMessageResolver { @Authorized([RIGHTS.ADMIN_CREATE_CONTRIBUTION_MESSAGE]) @Mutation(() => ContributionMessage) async adminCreateContributionMessage( - @Args() { contributionId, message }: ContributionMessageArgs, + @Args() { contributionId, message, messageType }: ContributionMessageArgs, @Ctx() context: Context, ): Promise { const moderator = getUser(context) @@ -133,7 +133,7 @@ export class ContributionMessageResolver { contributionMessage.createdAt = new Date() contributionMessage.message = message contributionMessage.userId = moderator.id - contributionMessage.type = ContributionMessageType.DIALOG + contributionMessage.type = messageType contributionMessage.isModerator = true await queryRunner.manager.insert(DbContributionMessage, contributionMessage) diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index 22e0b1b09..29d08b20a 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -284,8 +284,12 @@ export const createContributionMessage = gql` ` export const adminCreateContributionMessage = gql` - mutation ($contributionId: Int!, $message: String!) { - adminCreateContributionMessage(contributionId: $contributionId, message: $message) { + mutation ($contributionId: Int!, $message: String!, $messageType: ContributionMessageType) { + adminCreateContributionMessage( + contributionId: $contributionId + message: $message + messageType: $messageType + ) { id message createdAt From 4d119f8911d36fa863f58b7900e52feb3815cce8 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 20 Jun 2023 12:44:35 +0200 Subject: [PATCH 03/12] find contribution messages helper function --- .../resolver/ContributionMessageResolver.ts | 18 ++++++------- .../resolver/util/findContributionMessages.ts | 27 +++++++++++++++++++ 2 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 backend/src/graphql/resolver/util/findContributionMessages.ts diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts index 25f2a2560..69931467b 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts @@ -22,6 +22,8 @@ import { import { Context, getUser } from '@/server/context' import { LogError } from '@/server/LogError' +import { findContributionMessages } from './util/findContributionMessages' + @Resolver() export class ContributionMessageResolver { @Authorized([RIGHTS.CREATE_CONTRIBUTION_MESSAGE]) @@ -82,16 +84,12 @@ export class ContributionMessageResolver { @Args() { currentPage = 1, pageSize = 5, order = Order.DESC }: Paginated, ): Promise { - const [contributionMessages, count] = await getConnection() - .createQueryBuilder() - .select('cm') - .from(DbContributionMessage, 'cm') - .leftJoinAndSelect('cm.user', 'u') - .where({ contributionId }) - .orderBy('cm.createdAt', order) - .limit(pageSize) - .offset((currentPage - 1) * pageSize) - .getManyAndCount() + const [contributionMessages, count] = await findContributionMessages({ + contributionId, + currentPage, + pageSize, + order, + }) return { count, diff --git a/backend/src/graphql/resolver/util/findContributionMessages.ts b/backend/src/graphql/resolver/util/findContributionMessages.ts new file mode 100644 index 000000000..90555cca7 --- /dev/null +++ b/backend/src/graphql/resolver/util/findContributionMessages.ts @@ -0,0 +1,27 @@ +import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage' + +import { Order } from '@enum/Order' + +interface FindContributionMessagesOptions { + contributionId: number + pageSize: number + currentPage: number + order: Order +} + +export const findContributionMessages = async ( + options: FindContributionMessagesOptions, +): Promise<[DbContributionMessage[], number]> => { + const { contributionId, pageSize, currentPage, order } = options + return DbContributionMessage.findAndCount({ + where: { + contributionId, + }, + relations: ['user'], + order: { + createdAt: order, + }, + skip: (currentPage - 1) * pageSize, + take: pageSize, + }) +} From 1e6d4cfe4b00d265c03f09da21752520f08f52d6 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 20 Jun 2023 13:11:36 +0200 Subject: [PATCH 04/12] add admin list contribution message query --- backend/src/auth/RIGHTS.ts | 1 + .../ContributionMessageResolver.test.ts | 82 ++++++++++++++++++- .../resolver/ContributionMessageResolver.ts | 23 ++++++ .../resolver/util/findContributionMessages.ts | 11 ++- backend/src/seeds/graphql/queries.ts | 23 ++++++ 5 files changed, 137 insertions(+), 3 deletions(-) diff --git a/backend/src/auth/RIGHTS.ts b/backend/src/auth/RIGHTS.ts index b3627ff7a..772c907cb 100644 --- a/backend/src/auth/RIGHTS.ts +++ b/backend/src/auth/RIGHTS.ts @@ -53,4 +53,5 @@ export enum RIGHTS { ADMIN_CREATE_CONTRIBUTION_MESSAGE = 'ADMIN_CREATE_CONTRIBUTION_MESSAGE', DENY_CONTRIBUTION = 'DENY_CONTRIBUTION', ADMIN_OPEN_CREATIONS = 'ADMIN_OPEN_CREATIONS', + ADMIN_LIST_ALL_CONTRIBUTION_MESSAGES = 'ADMIN_LIST_ALL_CONTRIBUTION_MESSAGES', } diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts index f3b7a636e..f80fce939 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts @@ -20,7 +20,7 @@ import { createContributionMessage, login, } from '@/seeds/graphql/mutations' -import { listContributionMessages } from '@/seeds/graphql/queries' +import { listContributionMessages, adminListContributionMessages } from '@/seeds/graphql/queries' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' @@ -412,7 +412,7 @@ describe('ContributionMessageResolver', () => { resetToken() }) - it('returns a list of contributionmessages', async () => { + it('returns a list of contributionmessages without type MODERATOR', async () => { await expect( mutate({ mutation: listContributionMessages, @@ -422,6 +422,84 @@ describe('ContributionMessageResolver', () => { expect.objectContaining({ data: { listContributionMessages: { + count: 2, + messages: expect.arrayContaining([ + expect.objectContaining({ + id: expect.any(Number), + message: 'Admin Test', + type: 'DIALOG', + userFirstName: 'Peter', + userLastName: 'Lustig', + }), + expect.objectContaining({ + id: expect.any(Number), + message: 'User Test', + type: 'DIALOG', + userFirstName: 'Bibi', + userLastName: 'Bloxberg', + }), + ]), + }, + }, + }), + ) + }) + }) + }) + + describe('adminListContributionMessages', () => { + describe('unauthenticated', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: adminListContributionMessages, + variables: { contributionId: 1 }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + + describe('authenticated as user', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: adminListContributionMessages, + variables: { contributionId: 1 }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + + describe('authenticated', () => { + beforeAll(async () => { + await mutate({ + mutation: login, + variables: { email: 'peter@lustig.de', password: 'Aa12345_' }, + }) + }) + + afterAll(() => { + resetToken() + }) + + it('returns a list of contributionmessages with type MODERATOR', async () => { + await expect( + mutate({ + mutation: adminListContributionMessages, + variables: { contributionId: result.data.createContribution.id }, + }), + ).resolves.toEqual( + expect.objectContaining({ + data: { + adminListContributionMessages: { count: 3, messages: expect.arrayContaining([ expect.objectContaining({ diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.ts b/backend/src/graphql/resolver/ContributionMessageResolver.ts index 69931467b..6e062fe6e 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.ts @@ -99,6 +99,29 @@ export class ContributionMessageResolver { } } + @Authorized([RIGHTS.ADMIN_LIST_ALL_CONTRIBUTION_MESSAGES]) + @Query(() => ContributionMessageListResult) + async adminListContributionMessages( + @Arg('contributionId', () => Int) contributionId: number, + @Args() + { currentPage = 1, pageSize = 5, order = Order.DESC }: Paginated, + ): Promise { + const [contributionMessages, count] = await findContributionMessages({ + contributionId, + currentPage, + pageSize, + order, + showModeratorType: true, + }) + + return { + count, + messages: contributionMessages.map( + (message) => new ContributionMessage(message, message.user), + ), + } + } + @Authorized([RIGHTS.ADMIN_CREATE_CONTRIBUTION_MESSAGE]) @Mutation(() => ContributionMessage) async adminCreateContributionMessage( diff --git a/backend/src/graphql/resolver/util/findContributionMessages.ts b/backend/src/graphql/resolver/util/findContributionMessages.ts index 90555cca7..06b896898 100644 --- a/backend/src/graphql/resolver/util/findContributionMessages.ts +++ b/backend/src/graphql/resolver/util/findContributionMessages.ts @@ -1,5 +1,7 @@ +import { In } from '@dbTools/typeorm' import { ContributionMessage as DbContributionMessage } from '@entity/ContributionMessage' +import { ContributionMessageType } from '@enum/ContributionMessageType' import { Order } from '@enum/Order' interface FindContributionMessagesOptions { @@ -7,15 +9,22 @@ interface FindContributionMessagesOptions { pageSize: number currentPage: number order: Order + showModeratorType?: boolean } export const findContributionMessages = async ( options: FindContributionMessagesOptions, ): Promise<[DbContributionMessage[], number]> => { - const { contributionId, pageSize, currentPage, order } = options + const { contributionId, pageSize, currentPage, order, showModeratorType } = options + + const messageTypes = [ContributionMessageType.DIALOG, ContributionMessageType.HISTORY] + + if (showModeratorType) messageTypes.push(ContributionMessageType.MODERATOR) + return DbContributionMessage.findAndCount({ where: { contributionId, + type: In(messageTypes), }, relations: ['user'], order: { diff --git a/backend/src/seeds/graphql/queries.ts b/backend/src/seeds/graphql/queries.ts index a964cdb3a..f82882f97 100644 --- a/backend/src/seeds/graphql/queries.ts +++ b/backend/src/seeds/graphql/queries.ts @@ -349,6 +349,29 @@ export const listContributionMessages = gql` } ` +export const adminListContributionMessages = gql` + query ($contributionId: Int!, $pageSize: Int = 25, $currentPage: Int = 1, $order: Order = ASC) { + adminListContributionMessages( + contributionId: $contributionId + pageSize: $pageSize + currentPage: $currentPage + order: $order + ) { + count + messages { + id + message + createdAt + updatedAt + type + userFirstName + userLastName + userId + } + } + } +` + export const user = gql` query ($identifier: String!) { user(identifier: $identifier) { From f0eae909b99118e78961f1c80751a28f356d9168 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 20 Jun 2023 13:16:35 +0200 Subject: [PATCH 05/12] fix authentication test --- .../graphql/resolver/ContributionMessageResolver.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts index f80fce939..2df996c64 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts @@ -464,6 +464,13 @@ describe('ContributionMessageResolver', () => { }) describe('authenticated as user', () => { + beforeAll(async () => { + await mutate({ + mutation: login, + variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' }, + }) + }) + it('returns an error', async () => { await expect( mutate({ From 689705f465498287447b56f30fbe3a7964731573 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 27 Jun 2023 14:03:03 +0200 Subject: [PATCH 06/12] improved describe --- .../src/graphql/resolver/ContributionMessageResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts index 2df996c64..12df7f056 100644 --- a/backend/src/graphql/resolver/ContributionMessageResolver.test.ts +++ b/backend/src/graphql/resolver/ContributionMessageResolver.test.ts @@ -485,7 +485,7 @@ describe('ContributionMessageResolver', () => { }) }) - describe('authenticated', () => { + describe('authenticated as admin', () => { beforeAll(async () => { await mutate({ mutation: login, From 76603d82cf4ec311d5aa66fce196b0e8d6ea9d4a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 27 Jun 2023 22:18:44 +0200 Subject: [PATCH 07/12] rework GdtEntry --- backend/src/graphql/model/GdtEntry.ts | 42 ++++++++++++++++++--------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/backend/src/graphql/model/GdtEntry.ts b/backend/src/graphql/model/GdtEntry.ts index 81dda0ca7..43a33ba30 100644 --- a/backend/src/graphql/model/GdtEntry.ts +++ b/backend/src/graphql/model/GdtEntry.ts @@ -1,25 +1,39 @@ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { ObjectType, Field, Float, Int } from 'type-graphql' import { GdtEntryType } from '@enum/GdtEntryType' @ObjectType() export class GdtEntry { - constructor(json: any) { - this.id = json.id - this.amount = json.amount - this.date = json.date - this.email = json.email - this.comment = json.comment - this.couponCode = json.coupon_code - this.gdtEntryType = json.gdt_entry_type_id - this.factor = json.factor - this.amount2 = json.amount2 - this.factor2 = json.factor2 - this.gdt = json.gdt + constructor({ + id, + amount, + date, + email, + comment, + // eslint-disable-next-line camelcase + coupon_code, + // eslint-disable-next-line camelcase + gdt_entry_type_id, + factor, + amount2, + factor2, + gdt, + }: any) { + this.id = id + this.amount = amount + this.date = date + this.email = email + this.comment = comment + // eslint-disable-next-line camelcase + this.couponCode = coupon_code + // eslint-disable-next-line camelcase + this.gdtEntryType = gdt_entry_type_id + this.factor = factor + this.amount2 = amount2 + this.factor2 = factor2 + this.gdt = gdt } @Field(() => Int) From c5cbb9e1204bb619a7b9aabde95df303823cd5a2 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 27 Jun 2023 22:18:56 +0200 Subject: [PATCH 08/12] rework GdtEntryList --- backend/src/graphql/model/GdtEntryList.ts | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/backend/src/graphql/model/GdtEntryList.ts b/backend/src/graphql/model/GdtEntryList.ts index 7c08520c8..adbe5dbc6 100644 --- a/backend/src/graphql/model/GdtEntryList.ts +++ b/backend/src/graphql/model/GdtEntryList.ts @@ -1,20 +1,15 @@ -/* eslint-disable @typescript-eslint/no-unsafe-call */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { ObjectType, Field, Int, Float } from 'type-graphql' import { GdtEntry } from './GdtEntry' @ObjectType() export class GdtEntryList { - constructor(json: any) { - this.status = json.state - this.count = json.count - this.gdtEntries = json.gdtEntries ? json.gdtEntries.map((json: any) => new GdtEntry(json)) : [] - this.gdtSum = json.gdtSum - this.timeUsed = json.timeUsed + constructor(status = '', count = 0, gdtEntries = [], gdtSum = 0, timeUsed = 0) { + this.status = status + this.count = count + this.gdtEntries = gdtEntries + this.gdtSum = gdtSum + this.timeUsed = timeUsed } @Field(() => String) From 87e5b7437fe45e286869bf0e8519df232236e8ad Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 27 Jun 2023 22:19:28 +0200 Subject: [PATCH 09/12] properly construct result objects, return an empty GDT list on success=false --- backend/src/graphql/resolver/GdtResolver.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/backend/src/graphql/resolver/GdtResolver.ts b/backend/src/graphql/resolver/GdtResolver.ts index 3b9213567..74cd81f01 100644 --- a/backend/src/graphql/resolver/GdtResolver.ts +++ b/backend/src/graphql/resolver/GdtResolver.ts @@ -6,6 +6,7 @@ import { Resolver, Query, Args, Ctx, Authorized, Arg, Int, Float } from 'type-gr import { Paginated } from '@arg/Paginated' import { Order } from '@enum/Order' +import { GdtEntry } from '@model/GdtEntry' import { GdtEntryList } from '@model/GdtEntryList' import { apiGet, apiPost } from '@/apis/HttpRequest' @@ -31,9 +32,17 @@ export class GdtResolver { `${CONFIG.GDT_API_URL}/GdtEntries/listPerEmailApi/${userEntity.emailContact.email}/${currentPage}/${pageSize}/${order}`, ) if (!resultGDT.success) { - throw new LogError(resultGDT.data) + return new GdtEntryList() } - return new GdtEntryList(resultGDT.data) + const { state, count, gdtEntries, gdtSum, timeUsed } = resultGDT.data + return new GdtEntryList( + state, + count, + // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-explicit-any + gdtEntries ? gdtEntries.map((data: any) => new GdtEntry(data)) : [], + gdtSum, + timeUsed, + ) } catch (err) { throw new LogError('GDT Server is not reachable') } From ccada453c0b474ffa2962097abffb3c51009fef9 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 27 Jun 2023 22:37:20 +0200 Subject: [PATCH 10/12] fixed vue error --- frontend/src/layouts/DashboardLayout.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/layouts/DashboardLayout.vue b/frontend/src/layouts/DashboardLayout.vue index 9db576f1f..9a4c28aa2 100755 --- a/frontend/src/layouts/DashboardLayout.vue +++ b/frontend/src/layouts/DashboardLayout.vue @@ -276,7 +276,7 @@ export default { } = result this.GdtBalance = transactionList.balance.balanceGDT === null - ? null + ? 0 : Number(transactionList.balance.balanceGDT) this.transactions = transactionList.transactions this.balance = Number(transactionList.balance.balance) From e62a677668bc70ddbac2735184612f86140b3868 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 27 Jun 2023 22:37:37 +0200 Subject: [PATCH 11/12] fixed network policy for gdt query --- frontend/src/pages/Transactions.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/pages/Transactions.vue b/frontend/src/pages/Transactions.vue index 95c1c3400..9b8694173 100644 --- a/frontend/src/pages/Transactions.vue +++ b/frontend/src/pages/Transactions.vue @@ -59,6 +59,7 @@ export default { currentPage: this.currentPage, pageSize: this.pageSize, }, + fetchPolicy: 'network-only', }) .then((result) => { const { From f86d0e916265df4cb7fb97d6b73be51f5f3a1f07 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 28 Jun 2023 10:55:05 +0200 Subject: [PATCH 12/12] fix tests for new network policy in transactions --- frontend/src/pages/Transactions.spec.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/src/pages/Transactions.spec.js b/frontend/src/pages/Transactions.spec.js index ea2a5e1f6..bcff628cc 100644 --- a/frontend/src/pages/Transactions.spec.js +++ b/frontend/src/pages/Transactions.spec.js @@ -142,6 +142,7 @@ describe('Transactions', () => { currentPage: 1, pageSize: 25, }, + fetchPolicy: 'network-only', }) }) @@ -170,6 +171,7 @@ describe('Transactions', () => { currentPage: 2, pageSize: 25, }, + fetchPolicy: 'network-only', }) }) })