From 59df924e1d6b9210edbf0a61ff84e2713acc04c4 Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 24 Aug 2022 16:27:28 +0200 Subject: [PATCH] Add User to Contribution link, query the messages user in the listContributions query. --- backend/src/graphql/model/Contribution.ts | 2 +- .../graphql/resolver/ContributionResolver.ts | 24 +++++++++++-------- .../User.ts | 5 ++++ .../ContributionMessage.ts | 6 +++++ 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/backend/src/graphql/model/Contribution.ts b/backend/src/graphql/model/Contribution.ts index 741debbbb..c0e6d66f3 100644 --- a/backend/src/graphql/model/Contribution.ts +++ b/backend/src/graphql/model/Contribution.ts @@ -19,7 +19,7 @@ export class Contribution { this.contributionDate = contribution.contributionDate this.state = contribution.contributionStatus this.messages = contribution.messages - ? contribution.messages.map((message) => new ContributionMessage(message, user)) + ? contribution.messages.map((message) => new ContributionMessage(message, message.user)) : [] } diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index a59ba0a86..f9538851b 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -14,6 +14,7 @@ import { UnconfirmedContribution } from '@model/UnconfirmedContribution' import { User } from '@model/User' import { validateContribution, getUserCreation, updateCreations } from './util/creations' import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' +import { ContributionMessage } from '@entity/ContributionMessage' @Resolver() export class ContributionResolver { @@ -90,17 +91,20 @@ export class ContributionResolver { userId: number confirmedBy?: FindOperator | null } = { userId: user.id } + if (filterConfirmed) where.confirmedBy = IsNull() - const [contributions, count] = await dbContribution.findAndCount({ - where, - order: { - createdAt: order, - }, - relations: ['messages'], - withDeleted: true, - skip: (currentPage - 1) * pageSize, - take: pageSize, - }) + + const [contributions, count] = await getConnection() + .createQueryBuilder() + .select('c') + .from(dbContribution, 'c') + .innerJoinAndSelect('c.messages', 'm') + .innerJoinAndSelect('m.user', 'u') + .orderBy('c.createdAt', order) + .limit(pageSize) + .offset((currentPage - 1) * pageSize) + .getManyAndCount() + return new ContributionListResult( count, contributions.map((contribution) => new Contribution(contribution, user)), 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 3f2547cad..a772a3c99 100644 --- a/database/entity/0046-adapt_users_table_for_gradidoid/User.ts +++ b/database/entity/0046-adapt_users_table_for_gradidoid/User.ts @@ -8,6 +8,7 @@ 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 { @@ -108,4 +109,8 @@ 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/ContributionMessage.ts b/database/entity/0047-messages_tables/ContributionMessage.ts index d9ac124dd..3d9c04d89 100644 --- a/database/entity/0047-messages_tables/ContributionMessage.ts +++ b/database/entity/0047-messages_tables/ContributionMessage.ts @@ -5,9 +5,11 @@ import { Entity, JoinColumn, ManyToOne, + OneToMany, PrimaryGeneratedColumn, } from 'typeorm' import { Contribution } from '../Contribution' +import { User } from '../User' @Entity('contribution_messages', { engine: 'InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci', @@ -26,6 +28,10 @@ export class ContributionMessage extends BaseEntity { @Column({ name: 'user_id', unsigned: true, nullable: false }) userId: number + @ManyToOne(() => User, (user) => user.messages) + @JoinColumn({ name: 'user_id' }) + user: User + @Column({ length: 2000, nullable: false, collation: 'utf8mb4_unicode_ci' }) message: string