mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
Withdrew admin part of user createContributionMessage.
This commit is contained in:
parent
281f6cde3f
commit
c5b84694d0
@ -1,3 +1,4 @@
|
||||
import { backendLogger as logger } from '@/server/logger'
|
||||
import { RIGHTS } from '@/auth/RIGHTS'
|
||||
import { Context, getUser } from '@/server/context'
|
||||
import { ContributionMessage } from '@entity/ContributionMessage'
|
||||
@ -6,9 +7,11 @@ import ContributionMessageArgs from '@arg/ContributionMessageArgs'
|
||||
import { Contribution } from '@entity/Contribution'
|
||||
import { ContributionMessageType } from '@enum/MessageType'
|
||||
import { ContributionStatus } from '../enum/ContributionStatus'
|
||||
import { getConnection } from '@dbTools/typeorm'
|
||||
|
||||
@Resolver()
|
||||
export class ContributionResolver {
|
||||
// TODO: Have two method one for admin on for
|
||||
@Authorized([RIGHTS.CREATE_CONTRIBUTION_MESSAGE])
|
||||
@Mutation(() => ContributionMessage)
|
||||
async createContributionMessage(
|
||||
@ -16,29 +19,35 @@ export class ContributionResolver {
|
||||
@Ctx() context: Context,
|
||||
): Promise<ContributionMessage> {
|
||||
const user = getUser(context)
|
||||
const contribution = await Contribution.findOneOrFail({ id: contributionId })
|
||||
if (!user.isAdmin && contribution.userId !== user.id) {
|
||||
throw new Error('Can not send message to contribution of another user')
|
||||
}
|
||||
|
||||
const queryRunner = getConnection().createQueryRunner()
|
||||
await queryRunner.connect()
|
||||
await queryRunner.startTransaction('READ UNCOMMITTED')
|
||||
const contributionMessage = new ContributionMessage()
|
||||
contributionMessage.contributionId = contributionId
|
||||
contributionMessage.createdAt = new Date()
|
||||
contributionMessage.message = message
|
||||
contributionMessage.userId = user.id
|
||||
contributionMessage.type = ContributionMessageType.DIALOG
|
||||
ContributionMessage.save(contributionMessage)
|
||||
try {
|
||||
const contribution = await Contribution.findOneOrFail({ id: contributionId })
|
||||
if (contribution.userId !== user.id) {
|
||||
throw new Error('Can not send message to contribution of another user')
|
||||
}
|
||||
|
||||
if (user.isAdmin && contribution.contributionStatus === ContributionStatus.PENDING) {
|
||||
contribution.contributionStatus = ContributionStatus.IN_PROGRESS
|
||||
} else if (
|
||||
!user.isAdmin &&
|
||||
contribution.contributionStatus === ContributionStatus.IN_PROGRESS
|
||||
) {
|
||||
contribution.contributionStatus = ContributionStatus.PENDING
|
||||
contributionMessage.contributionId = contributionId
|
||||
contributionMessage.createdAt = new Date()
|
||||
contributionMessage.message = message
|
||||
contributionMessage.userId = user.id
|
||||
contributionMessage.type = ContributionMessageType.DIALOG
|
||||
await queryRunner.manager.insert(ContributionMessage, contributionMessage)
|
||||
|
||||
if (contribution.contributionStatus === ContributionStatus.IN_PROGRESS) {
|
||||
contribution.contributionStatus = ContributionStatus.PENDING
|
||||
await queryRunner.manager.update(Contribution, { id: contributionId }, contribution)
|
||||
}
|
||||
await queryRunner.commitTransaction()
|
||||
} catch (e) {
|
||||
await queryRunner.rollbackTransaction()
|
||||
logger.error(`ContributionMessage was not successful: ${e}`)
|
||||
throw new Error(`Transaction was not successful: ${e}`)
|
||||
} finally {
|
||||
await queryRunner.release()
|
||||
}
|
||||
Contribution.save(contribution)
|
||||
|
||||
return contributionMessage
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user