mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 09:56:05 +00:00
construct database query
This commit is contained in:
parent
ac7c4bf686
commit
9dc7d08b3d
@ -43,9 +43,7 @@ export class ContributionMessageBuilder {
|
||||
|
||||
public setParentContribution(contribution: Contribution): this {
|
||||
this.contributionMessage.contributionId = contribution.id
|
||||
this.contributionMessage.createdAt = contribution.updatedAt
|
||||
? contribution.updatedAt
|
||||
: contribution.createdAt
|
||||
this.contributionMessage.contribution = contribution
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/* eslint-disable security/detect-object-injection */
|
||||
import { Brackets, In, Like, MoreThan, Not, SelectQueryBuilder } from '@dbTools/typeorm'
|
||||
import { Brackets, In, IsNull, LessThanOrEqual, Like, MoreThan, Not, SelectQueryBuilder } from '@dbTools/typeorm'
|
||||
import { Contribution, Contribution as DbContribution } from '@entity/Contribution'
|
||||
import { ContributionMessage } from '@entity/ContributionMessage'
|
||||
|
||||
@ -47,29 +47,30 @@ export const findContributions = async (
|
||||
...(filter.userId && { userId: filter.userId }),
|
||||
...(filter.noHashtag && { memo: Not(Like(`%#%`)) }),
|
||||
})
|
||||
if (relations?.messages && filter.hideResubmission) {
|
||||
queryBuilder.andWhere((qb: SelectQueryBuilder<Contribution>) => {
|
||||
const newestContributionMessageResubmissionDateSubQuery = qb
|
||||
.subQuery()
|
||||
// .select(['contributionMessage.resubmission_at', 'MAX(contributionMessage.created_at)'])
|
||||
.select('contributionMessage.resubmission_at')
|
||||
.from(ContributionMessage, 'contributionMessage')
|
||||
.where('contributionMessage.contribution_id = Contribution.id')
|
||||
.orderBy('contributionMessage.resubmissionAt', 'DESC')
|
||||
.limit(1)
|
||||
// .andWhere({ resubmissionAt: MoreThan(currentDate) })
|
||||
.getQuery()
|
||||
return (
|
||||
'NOT EXISTS ' +
|
||||
newestContributionMessageResubmissionDateSubQuery +
|
||||
' OR ' +
|
||||
newestContributionMessageResubmissionDateSubQuery +
|
||||
' IS NULL ' +
|
||||
' OR ' +
|
||||
newestContributionMessageResubmissionDateSubQuery +
|
||||
' <= NOW()'
|
||||
if (filter.hideResubmission) {
|
||||
queryBuilder
|
||||
.leftJoinAndSelect(
|
||||
(qb: SelectQueryBuilder<ContributionMessage>) => {
|
||||
return qb
|
||||
.select('resubmission_at', 'resubmissionAt')
|
||||
.addSelect('id', 'latestMessageId')
|
||||
.addSelect('contribution_id', 'latestMessageContributionId')
|
||||
.addSelect(
|
||||
'ROW_NUMBER() OVER (PARTITION BY latestMessageContributionId ORDER BY created_at DESC)',
|
||||
'rn',
|
||||
)
|
||||
.from(ContributionMessage, 'contributionMessage')
|
||||
},
|
||||
'latestContributionMessage',
|
||||
'latestContributionMessage.latestMessageContributionId = Contribution.id AND latestContributionMessage.rn = 1',
|
||||
)
|
||||
.andWhere(
|
||||
new Brackets((qb) => {
|
||||
qb.where('latestContributionMessage.resubmissionAt IS NULL').orWhere(
|
||||
'latestContributionMessage.resubmissionAt <= NOW()',
|
||||
)
|
||||
}),
|
||||
)
|
||||
})
|
||||
}
|
||||
queryBuilder.printSql()
|
||||
if (filter.query) {
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
import {
|
||||
BaseEntity,
|
||||
Column,
|
||||
CreateDateColumn,
|
||||
DeleteDateColumn,
|
||||
Entity,
|
||||
Index,
|
||||
JoinColumn,
|
||||
ManyToOne,
|
||||
PrimaryGeneratedColumn,
|
||||
UpdateDateColumn,
|
||||
} from 'typeorm'
|
||||
import { Contribution } from '../Contribution'
|
||||
import { User } from '../User'
|
||||
@ -36,9 +38,11 @@ export class ContributionMessage extends BaseEntity {
|
||||
@Column({ length: 2000, nullable: false, collation: 'utf8mb4_unicode_ci' })
|
||||
message: string
|
||||
|
||||
@CreateDateColumn()
|
||||
@Column({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP', name: 'created_at' })
|
||||
createdAt: Date
|
||||
|
||||
@UpdateDateColumn()
|
||||
@Column({ type: 'datetime', default: null, nullable: true, name: 'updated_at' })
|
||||
updatedAt: Date
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user