Withdrew admin part of user createContributionMessage.

This commit is contained in:
elweyn 2022-08-22 12:16:20 +02:00
parent 281f6cde3f
commit c5b84694d0

View File

@ -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
}
}