From 2ac133c41abee6e1c670b20a48110623139b5b23 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 10 Feb 2023 02:06:39 +0100 Subject: [PATCH] rework - initial work --- backend/src/event/Event.ts | 765 ++++++------------ backend/src/event/EventProtocolEmitter.ts | 17 - .../graphql/resolver/ContributionResolver.ts | 81 +- .../graphql/resolver/TransactionResolver.ts | 27 +- backend/src/graphql/resolver/UserResolver.ts | 60 +- 5 files changed, 325 insertions(+), 625 deletions(-) delete mode 100644 backend/src/event/EventProtocolEmitter.ts diff --git a/backend/src/event/Event.ts b/backend/src/event/Event.ts index 77e86ad46..2545bdc63 100644 --- a/backend/src/event/Event.ts +++ b/backend/src/event/Event.ts @@ -1,509 +1,278 @@ -import decimal from 'decimal.js-light' +import { EventProtocol as dbEvent } from '@entity/EventProtocol' +import Decimal from 'decimal.js-light' import { EventProtocolType } from './EventProtocolType' -export class EventBasic { - type: string - createdAt: Date -} -export class EventBasicUserId extends EventBasic { - userId: number -} - -export class EventBasicTx extends EventBasicUserId { - transactionId: number - amount: decimal -} - -export class EventBasicTxX extends EventBasicTx { - xUserId: number - xCommunityId: number -} - -export class EventBasicCt extends EventBasicUserId { - contributionId: number - amount: decimal -} - -export class EventBasicCtX extends EventBasicCt { - xUserId: number - xCommunityId: number -} - -export class EventBasicRedeem extends EventBasicUserId { - transactionId?: number - contributionId?: number -} - -export class EventBasicCtMsg extends EventBasicCt { - messageId: number -} - -export class EventVisitGradido extends EventBasic {} -export class EventRegister extends EventBasicUserId {} -export class EventRedeemRegister extends EventBasicRedeem {} -export class EventVerifyRedeem extends EventBasicRedeem {} -export class EventInactiveAccount extends EventBasicUserId {} -export class EventSendConfirmationEmail extends EventBasicUserId {} -export class EventSendAccountMultiRegistrationEmail extends EventBasicUserId {} -export class EventSendForgotPasswordEmail extends EventBasicUserId {} -export class EventSendTransactionSendEmail extends EventBasicTxX {} -export class EventSendTransactionReceiveEmail extends EventBasicTxX {} -export class EventSendTransactionLinkRedeemEmail extends EventBasicTxX {} -export class EventSendAddedContributionEmail extends EventBasicCt {} -export class EventSendContributionConfirmEmail extends EventBasicCt {} -export class EventConfirmationEmail extends EventBasicUserId {} -export class EventRegisterEmailKlicktipp extends EventBasicUserId {} -export class EventLogin extends EventBasicUserId {} -export class EventLogout extends EventBasicUserId {} -export class EventRedeemLogin extends EventBasicRedeem {} -export class EventActivateAccount extends EventBasicUserId {} -export class EventPasswordChange extends EventBasicUserId {} -export class EventTransactionSend extends EventBasicTxX {} -export class EventTransactionSendRedeem extends EventBasicTxX {} -export class EventTransactionRepeateRedeem extends EventBasicTxX {} -export class EventTransactionCreation extends EventBasicTx {} -export class EventTransactionReceive extends EventBasicTxX {} -export class EventTransactionReceiveRedeem extends EventBasicTxX {} -export class EventContributionCreate extends EventBasicCt {} -export class EventAdminContributionCreate extends EventBasicCt {} -export class EventAdminContributionDelete extends EventBasicCt {} -export class EventAdminContributionDeny extends EventBasicCt {} -export class EventAdminContributionUpdate extends EventBasicCt {} -export class EventUserCreateContributionMessage extends EventBasicCtMsg {} -export class EventAdminCreateContributionMessage extends EventBasicCtMsg {} -export class EventContributionDelete extends EventBasicCt {} -export class EventContributionUpdate extends EventBasicCt {} -export class EventContributionConfirm extends EventBasicCtX {} -export class EventContributionDeny extends EventBasicCtX {} -export class EventContributionLinkDefine extends EventBasicCt {} -export class EventContributionLinkActivateRedeem extends EventBasicCt {} -export class EventDeleteUser extends EventBasicUserId {} -export class EventUndeleteUser extends EventBasicUserId {} -export class EventChangeUserRole extends EventBasicUserId {} -export class EventAdminUpdateContribution extends EventBasicCt {} -export class EventAdminDeleteContribution extends EventBasicCt {} -export class EventCreateContributionLink extends EventBasicCt {} -export class EventDeleteContributionLink extends EventBasicCt {} -export class EventUpdateContributionLink extends EventBasicCt {} - -export class Event { - public setEventBasic(): Event { - this.type = EventProtocolType.BASIC - this.createdAt = new Date() - - return this - } - - public setEventVisitGradido(): Event { - this.setEventBasic() - this.type = EventProtocolType.VISIT_GRADIDO - - return this - } - - public setEventRegister(ev: EventRegister): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.REGISTER - - return this - } - - public setEventRedeemRegister(ev: EventRedeemRegister): Event { - this.setByBasicRedeem(ev.userId, ev.transactionId, ev.contributionId) - this.type = EventProtocolType.REDEEM_REGISTER - - return this - } - - public setEventVerifyRedeem(ev: EventVerifyRedeem): Event { - this.setByBasicRedeem(ev.userId, ev.transactionId, ev.contributionId) - this.type = EventProtocolType.VERIFY_REDEEM - - return this - } - - public setEventInactiveAccount(ev: EventInactiveAccount): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.INACTIVE_ACCOUNT - - return this - } - - public setEventSendConfirmationEmail(ev: EventSendConfirmationEmail): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.SEND_CONFIRMATION_EMAIL - - return this - } - - public setEventSendAccountMultiRegistrationEmail( - ev: EventSendAccountMultiRegistrationEmail, - ): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.SEND_ACCOUNT_MULTIREGISTRATION_EMAIL - - return this - } - - public setEventSendForgotPasswordEmail(ev: EventSendForgotPasswordEmail): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.SEND_FORGOT_PASSWORD_EMAIL - - return this - } - - public setEventSendTransactionSendEmail(ev: EventSendTransactionSendEmail): Event { - this.setByBasicTxX(ev.userId, ev.transactionId, ev.amount, ev.xUserId, ev.xCommunityId) - this.type = EventProtocolType.SEND_TRANSACTION_SEND_EMAIL - - return this - } - - public setEventSendTransactionReceiveEmail(ev: EventSendTransactionReceiveEmail): Event { - this.setByBasicTxX(ev.userId, ev.transactionId, ev.amount, ev.xUserId, ev.xCommunityId) - this.type = EventProtocolType.SEND_TRANSACTION_RECEIVE_EMAIL - - return this - } - - public setEventSendTransactionLinkRedeemEmail(ev: EventSendTransactionLinkRedeemEmail): Event { - this.setByBasicTxX(ev.userId, ev.transactionId, ev.amount, ev.xUserId, ev.xCommunityId) - this.type = EventProtocolType.SEND_TRANSACTION_LINK_REDEEM_EMAIL - - return this - } - - public setEventSendAddedContributionEmail(ev: EventSendAddedContributionEmail): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.SEND_ADDED_CONTRIBUTION_EMAIL - - return this - } - - public setEventSendContributionConfirmEmail(ev: EventSendContributionConfirmEmail): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.SEND_CONTRIBUTION_CONFIRM_EMAIL - - return this - } - - public setEventConfirmationEmail(ev: EventConfirmationEmail): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.CONFIRM_EMAIL - - return this - } - - public setEventRegisterEmailKlicktipp(ev: EventRegisterEmailKlicktipp): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.REGISTER_EMAIL_KLICKTIPP - - return this - } - - public setEventLogin(ev: EventLogin): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.LOGIN - - return this - } - - public setEventLogout(ev: EventLogout): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.LOGOUT - - return this - } - - public setEventRedeemLogin(ev: EventRedeemLogin): Event { - this.setByBasicRedeem(ev.userId, ev.transactionId, ev.contributionId) - this.type = EventProtocolType.REDEEM_LOGIN - - return this - } - - public setEventActivateAccount(ev: EventActivateAccount): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.ACTIVATE_ACCOUNT - - return this - } - - public setEventPasswordChange(ev: EventPasswordChange): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.PASSWORD_CHANGE - - return this - } - - public setEventTransactionSend(ev: EventTransactionSend): Event { - this.setByBasicTxX(ev.userId, ev.transactionId, ev.amount, ev.xUserId, ev.xCommunityId) - this.type = EventProtocolType.TRANSACTION_SEND - - return this - } - - public setEventTransactionSendRedeem(ev: EventTransactionSendRedeem): Event { - this.setByBasicTxX(ev.userId, ev.transactionId, ev.amount, ev.xUserId, ev.xCommunityId) - this.type = EventProtocolType.TRANSACTION_SEND_REDEEM - - return this - } - - public setEventTransactionRepeateRedeem(ev: EventTransactionRepeateRedeem): Event { - this.setByBasicTxX(ev.userId, ev.transactionId, ev.amount, ev.xUserId, ev.xCommunityId) - this.type = EventProtocolType.TRANSACTION_REPEATE_REDEEM - - return this - } - - public setEventTransactionCreation(ev: EventTransactionCreation): Event { - this.setByBasicTx(ev.userId, ev.transactionId, ev.amount) - this.type = EventProtocolType.TRANSACTION_CREATION - - return this - } - - public setEventTransactionReceive(ev: EventTransactionReceive): Event { - this.setByBasicTxX(ev.userId, ev.transactionId, ev.amount, ev.xUserId, ev.xCommunityId) - this.type = EventProtocolType.TRANSACTION_RECEIVE - - return this - } - - public setEventTransactionReceiveRedeem(ev: EventTransactionReceiveRedeem): Event { - this.setByBasicTxX(ev.userId, ev.transactionId, ev.amount, ev.xUserId, ev.xCommunityId) - this.type = EventProtocolType.TRANSACTION_RECEIVE_REDEEM - - return this - } - - public setEventContributionCreate(ev: EventContributionCreate): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.CONTRIBUTION_CREATE - - return this - } - - public setEventAdminContributionCreate(ev: EventAdminContributionCreate): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.ADMIN_CONTRIBUTION_CREATE - - return this - } - - public setEventAdminContributionDelete(ev: EventAdminContributionDelete): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.ADMIN_CONTRIBUTION_DELETE - - return this - } - - public setEventAdminContributionDeny(ev: EventAdminContributionDeny): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.ADMIN_CONTRIBUTION_DENY - - return this - } - - public setEventAdminContributionUpdate(ev: EventAdminContributionUpdate): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.ADMIN_CONTRIBUTION_UPDATE - - return this - } - - public setEventUserCreateContributionMessage(ev: EventUserCreateContributionMessage): Event { - this.setByBasicCtMsg(ev.userId, ev.contributionId, ev.amount, ev.messageId) - this.type = EventProtocolType.USER_CREATE_CONTRIBUTION_MESSAGE - - return this - } - - public setEventAdminCreateContributionMessage(ev: EventAdminCreateContributionMessage): Event { - this.setByBasicCtMsg(ev.userId, ev.contributionId, ev.amount, ev.messageId) - this.type = EventProtocolType.ADMIN_CREATE_CONTRIBUTION_MESSAGE - - return this - } - - public setEventContributionDelete(ev: EventContributionDelete): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.CONTRIBUTION_DELETE - - return this - } - - public setEventContributionUpdate(ev: EventContributionUpdate): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.CONTRIBUTION_UPDATE - - return this - } - - public setEventContributionConfirm(ev: EventContributionConfirm): Event { - this.setByBasicCtX(ev.userId, ev.contributionId, ev.amount, ev.xUserId, ev.xCommunityId) - this.type = EventProtocolType.CONTRIBUTION_CONFIRM - - return this - } - - public setEventContributionDeny(ev: EventContributionDeny): Event { - this.setByBasicCtX(ev.userId, ev.contributionId, ev.amount, ev.xUserId, ev.xCommunityId) - this.type = EventProtocolType.CONTRIBUTION_DENY - - return this - } - - public setEventContributionLinkDefine(ev: EventContributionLinkDefine): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.CONTRIBUTION_LINK_DEFINE - - return this - } - - public setEventContributionLinkActivateRedeem(ev: EventContributionLinkActivateRedeem): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.CONTRIBUTION_LINK_ACTIVATE_REDEEM - - return this - } - - public setEventDeleteUser(ev: EventDeleteUser): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.DELETE_USER - - return this - } - - public setEventUndeleteUser(ev: EventUndeleteUser): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.UNDELETE_USER - - return this - } - - public setEventChangeUserRole(ev: EventChangeUserRole): Event { - this.setByBasicUser(ev.userId) - this.type = EventProtocolType.CHANGE_USER_ROLE - - return this - } - - public setEventAdminUpdateContribution(ev: EventAdminUpdateContribution): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.ADMIN_UPDATE_CONTRIBUTION - - return this - } - - public setEventAdminDeleteContribution(ev: EventAdminDeleteContribution): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.ADMIN_DELETE_CONTRIBUTION - - return this - } - - public setEventCreateContributionLink(ev: EventCreateContributionLink): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.CREATE_CONTRIBUTION_LINK - - return this - } - - public setEventDeleteContributionLink(ev: EventDeleteContributionLink): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.DELETE_CONTRIBUTION_LINK - - return this - } - - public setEventUpdateContributionLink(ev: EventUpdateContributionLink): Event { - this.setByBasicCt(ev.userId, ev.contributionId, ev.amount) - this.type = EventProtocolType.UPDATE_CONTRIBUTION_LINK - - return this - } - - setByBasicUser(userId: number): Event { - this.setEventBasic() - this.userId = userId - - return this - } - - setByBasicTx(userId: number, transactionId: number, amount: decimal): Event { - this.setByBasicUser(userId) - this.transactionId = transactionId - this.amount = amount - - return this - } - - setByBasicTxX( +export class Event extends dbEvent { + constructor( + type: EventProtocolType, userId: number, - transactionId: number, - amount: decimal, - xUserId: number, - xCommunityId: number, - ): Event { - this.setByBasicTx(userId, transactionId, amount) + xUserId: number | null = null, + xCommunityId: number | null = null, + transactionId: number | null = null, + contributionId: number | null = null, + amount: Decimal | null = null, + messageId: number | null = null, + autosave = true, + ) { + super() + this.type = type + this.userId = userId this.xUserId = xUserId this.xCommunityId = xCommunityId - - return this - } - - setByBasicCt(userId: number, contributionId: number, amount: decimal): Event { - this.setByBasicUser(userId) + this.transactionId = transactionId this.contributionId = contributionId this.amount = amount - - return this - } - - setByBasicCtMsg( - userId: number, - contributionId: number, - amount: decimal, - messageId: number, - ): Event { - this.setByBasicCt(userId, contributionId, amount) this.messageId = messageId - return this + if (autosave) { + // This is unsafe, since we cannot wait for this in the constructor - the saving process is async therefore + this.save() + } } - - setByBasicCtX( - userId: number, - contributionId: number, - amount: decimal, - xUserId: number, - xCommunityId: number, - ): Event { - this.setByBasicCt(userId, contributionId, amount) - this.xUserId = xUserId - this.xCommunityId = xCommunityId - - return this - } - - setByBasicRedeem(userId: number, transactionId?: number, contributionId?: number): Event { - this.setByBasicUser(userId) - if (transactionId) this.transactionId = transactionId - if (contributionId) this.contributionId = contributionId - - return this - } - - id: number - type: string - createdAt: Date - userId: number - xUserId?: number - xCommunityId?: number - transactionId?: number - contributionId?: number - amount?: decimal - messageId?: number } + +export const EVENT_CONTRIBUTION_CREATE = ( + userId: number, + contributionId: number, + amount: Decimal, + autosave = true, +): Event => + new Event( + EventProtocolType.CONTRIBUTION_CREATE, + userId, + null, + null, + null, + contributionId, + amount, + null, + autosave, + ) +export const EVENT_CONTRIBUTION_DELETE = ( + userId: number, + contributionId: number, + amount: Decimal, + autosave = true, +): Event => + new Event( + EventProtocolType.CONTRIBUTION_DELETE, + userId, + null, + null, + null, + contributionId, + amount, + null, + autosave, + ) +export const EVENT_CONTRIBUTION_UPDATE = ( + userId: number, + contributionId: number, + amount: Decimal, + autosave = true, +): Event => + new Event( + EventProtocolType.CONTRIBUTION_UPDATE, + userId, + null, + null, + null, + contributionId, + amount, + null, + autosave, + ) + +export const EVENT_ADMIN_CONTRIBUTION_CREATE = ( + userId: number, + contributionId: number, + amount: Decimal, + autosave = true, +): Event => + new Event( + EventProtocolType.ADMIN_CONTRIBUTION_CREATE, + userId, + null, + null, + null, + contributionId, + amount, + null, + autosave, + ) + +export const EVENT_ADMIN_CONTRIBUTION_UPDATE = ( + userId: number, + contributionId: number, + amount: Decimal, + autosave = true, +): Event => + new Event( + EventProtocolType.ADMIN_CONTRIBUTION_UPDATE, + userId, + null, + null, + null, + contributionId, + amount, + null, + autosave, + ) + +export const EVENT_ADMIN_CONTRIBUTION_DELETE = ( + userId: number, + contributionId: number, + amount: Decimal, + autosave = true, +): Event => + new Event( + EventProtocolType.ADMIN_CONTRIBUTION_DELETE, + userId, + null, + null, + null, + contributionId, + amount, + null, + autosave, + ) + +export const EVENT_CONTRIBUTION_CONFIRM = ( + userId: number, + contributionId: number, + amount: Decimal, + autosave = true, +): Event => + new Event( + EventProtocolType.CONTRIBUTION_CONFIRM, + userId, + null, + null, + null, + contributionId, + amount, + null, + autosave, + ) + +export const EVENT_ADMIN_CONTRIBUTION_DENY = ( + userId: number, + contributionId: number, + amount: Decimal, + autosave = true, +): Event => + new Event( + EventProtocolType.ADMIN_CONTRIBUTION_DENY, + userId, + null, + null, + null, + contributionId, + amount, + null, + autosave, + ) + +export const EVENT_TRANSACTION_SEND = ( + userId: number, + xUserId: number, + transactionId: number, + amount: Decimal, + autosave = true, +): Event => + new Event( + EventProtocolType.TRANSACTION_SEND, + userId, + xUserId, + null, + transactionId, + null, + amount, + null, + autosave, + ) + +export const EVENT_TRANSACTION_RECEIVE = ( + userId: number, + xUserId: number, + transactionId: number, + amount: Decimal, + autosave = true, +): Event => + new Event( + EventProtocolType.TRANSACTION_RECEIVE, + userId, + xUserId, + null, + transactionId, + null, + amount, + null, + autosave, + ) + +export const EVENT_LOGIN = (userId: number, autosave = true): Event => + new Event(EventProtocolType.LOGIN, userId, null, null, null, null, null, null, autosave) + +export const EVENT_SEND_ACCOUNT_MULTIREGISTRATION_EMAIL = ( + userId: number, + autosave = true, +): Event => + new Event( + EventProtocolType.SEND_ACCOUNT_MULTIREGISTRATION_EMAIL, + userId, + null, + null, + null, + null, + null, + null, + autosave, + ) + +export const EVENT_SEND_CONFIRMATION_EMAIL = (userId: number, autosave = true): Event => + new Event( + EventProtocolType.SEND_CONFIRMATION_EMAIL, + userId, + null, + null, + null, + null, + null, + null, + autosave, + ) + +export const EVENT_REDEEM_REGISTER = ( + userId: number, + transactionId: number | null = null, + contributionId: number | null = null, + autosave = true, +): Event => + new Event( + EventProtocolType.REDEEM_REGISTER, + userId, + null, + null, + transactionId, + contributionId, + null, + null, + autosave, + ) + +export const EVENT_REGISTER = (userId: number, autosave = true): Event => + new Event(EventProtocolType.REGISTER, userId, null, null, null, null, null, null, autosave) + +export const EVENT_ACTIVATE_ACCOUNT = (userId: number, autosave = true): Event => + new Event( + EventProtocolType.ACTIVATE_ACCOUNT, + userId, + null, + null, + null, + null, + null, + null, + autosave, + ) diff --git a/backend/src/event/EventProtocolEmitter.ts b/backend/src/event/EventProtocolEmitter.ts deleted file mode 100644 index a87e8a256..000000000 --- a/backend/src/event/EventProtocolEmitter.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Event } from '@/event/Event' -import { backendLogger as logger } from '@/server/logger' -import { EventProtocol } from '@entity/EventProtocol' - -export const writeEvent = async (event: Event): Promise => { - logger.info('writeEvent', event) - const dbEvent = new EventProtocol() - dbEvent.type = event.type - dbEvent.createdAt = event.createdAt - dbEvent.userId = event.userId - dbEvent.xUserId = event.xUserId || null - dbEvent.xCommunityId = event.xCommunityId || null - dbEvent.contributionId = event.contributionId || null - dbEvent.transactionId = event.transactionId || null - dbEvent.amount = event.amount || null - return dbEvent.save() -} diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index c46a49555..b374275c4 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -37,17 +37,15 @@ import { } from './util/creations' import { MEMO_MAX_CHARS, MEMO_MIN_CHARS, FULL_CREATION_AVAILABLE } from './const/const' import { - Event, - EventContributionCreate, - EventContributionDelete, - EventContributionUpdate, - EventContributionConfirm, - EventAdminContributionCreate, - EventAdminContributionDelete, - EventAdminContributionDeny, - EventAdminContributionUpdate, + EVENT_CONTRIBUTION_CREATE, + EVENT_CONTRIBUTION_DELETE, + EVENT_CONTRIBUTION_UPDATE, + EVENT_ADMIN_CONTRIBUTION_CREATE, + EVENT_ADMIN_CONTRIBUTION_UPDATE, + EVENT_ADMIN_CONTRIBUTION_DELETE, + EVENT_CONTRIBUTION_CONFIRM, + EVENT_ADMIN_CONTRIBUTION_DENY, } from '@/event/Event' -import { writeEvent } from '@/event/EventProtocolEmitter' import { calculateDecay } from '@/util/decay' import { sendContributionConfirmedEmail, @@ -77,8 +75,6 @@ export class ContributionResolver { throw new Error(`memo text is too short (${MEMO_MIN_CHARS} characters minimum)`) } - const event = new Event() - const user = getUser(context) const creations = await getUserCreation(user.id, clientTimezoneOffset) logger.trace('creations', creations) @@ -97,11 +93,7 @@ export class ContributionResolver { logger.trace('contribution to save', contribution) await DbContribution.save(contribution) - const eventCreateContribution = new EventContributionCreate() - eventCreateContribution.userId = user.id - eventCreateContribution.amount = amount - eventCreateContribution.contributionId = contribution.id - await writeEvent(event.setEventContributionCreate(eventCreateContribution)) + EVENT_CONTRIBUTION_CREATE(user.id, contribution.id, amount) return new UnconfirmedContribution(contribution, user, creations) } @@ -112,7 +104,6 @@ export class ContributionResolver { @Arg('id', () => Int) id: number, @Ctx() context: Context, ): Promise { - const event = new Event() const user = getUser(context) const contribution = await DbContribution.findOne(id) if (!contribution) { @@ -133,11 +124,7 @@ export class ContributionResolver { contribution.deletedAt = new Date() await contribution.save() - const eventDeleteContribution = new EventContributionDelete() - eventDeleteContribution.userId = user.id - eventDeleteContribution.contributionId = contribution.id - eventDeleteContribution.amount = contribution.amount - await writeEvent(event.setEventContributionDelete(eventDeleteContribution)) + EVENT_CONTRIBUTION_DELETE(user.id, contribution.id, contribution.amount) const res = await contribution.softRemove() return !!res @@ -288,13 +275,7 @@ export class ContributionResolver { contributionToUpdate.updatedAt = new Date() DbContribution.save(contributionToUpdate) - const event = new Event() - - const eventUpdateContribution = new EventContributionUpdate() - eventUpdateContribution.userId = user.id - eventUpdateContribution.contributionId = contributionId - eventUpdateContribution.amount = amount - await writeEvent(event.setEventContributionUpdate(eventUpdateContribution)) + EVENT_CONTRIBUTION_UPDATE(user.id, contributionId, amount) return new UnconfirmedContribution(contributionToUpdate, user, creations) } @@ -335,7 +316,6 @@ export class ContributionResolver { throw new Error('Contribution could not be saved, Email is not activated') } - const event = new Event() const moderator = getUser(context) logger.trace('moderator: ', moderator.id) const creations = await getUserCreation(emailContact.userId, clientTimezoneOffset) @@ -357,11 +337,7 @@ export class ContributionResolver { await DbContribution.save(contribution) - const eventAdminCreateContribution = new EventAdminContributionCreate() - eventAdminCreateContribution.userId = moderator.id - eventAdminCreateContribution.amount = amount - eventAdminCreateContribution.contributionId = contribution.id - await writeEvent(event.setEventAdminContributionCreate(eventAdminCreateContribution)) + EVENT_ADMIN_CONTRIBUTION_CREATE(moderator.id, contribution.id, amount) return getUserCreation(emailContact.userId, clientTimezoneOffset) } @@ -466,12 +442,7 @@ export class ContributionResolver { result.creation = await getUserCreation(user.id, clientTimezoneOffset) - const event = new Event() - const eventAdminContributionUpdate = new EventAdminContributionUpdate() - eventAdminContributionUpdate.userId = user.id - eventAdminContributionUpdate.amount = amount - eventAdminContributionUpdate.contributionId = contributionToUpdate.id - await writeEvent(event.setEventAdminContributionUpdate(eventAdminContributionUpdate)) + EVENT_ADMIN_CONTRIBUTION_UPDATE(user.id, contributionToUpdate.id, amount) return result } @@ -544,12 +515,8 @@ export class ContributionResolver { await contribution.save() const res = await contribution.softRemove() - const event = new Event() - const eventAdminContributionDelete = new EventAdminContributionDelete() - eventAdminContributionDelete.userId = contribution.userId - eventAdminContributionDelete.amount = contribution.amount - eventAdminContributionDelete.contributionId = contribution.id - await writeEvent(event.setEventAdminContributionDelete(eventAdminContributionDelete)) + EVENT_ADMIN_CONTRIBUTION_DELETE(contribution.userId, contribution.id, contribution.amount) + sendContributionDeletedEmail({ firstName: user.firstName, lastName: user.lastName, @@ -667,12 +634,7 @@ export class ContributionResolver { await queryRunner.release() } - const event = new Event() - const eventContributionConfirm = new EventContributionConfirm() - eventContributionConfirm.userId = user.id - eventContributionConfirm.amount = contribution.amount - eventContributionConfirm.contributionId = contribution.id - await writeEvent(event.setEventContributionConfirm(eventContributionConfirm)) + EVENT_CONTRIBUTION_CONFIRM(user.id, contribution.id, contribution.amount) } finally { releaseLock() } @@ -766,12 +728,11 @@ export class ContributionResolver { contributionToUpdate.deniedAt = new Date() const res = await contributionToUpdate.save() - const event = new Event() - const eventAdminContributionDeny = new EventAdminContributionDeny() - eventAdminContributionDeny.userId = contributionToUpdate.userId - eventAdminContributionDeny.amount = contributionToUpdate.amount - eventAdminContributionDeny.contributionId = contributionToUpdate.id - await writeEvent(event.setEventAdminContributionDeny(eventAdminContributionDeny)) + EVENT_ADMIN_CONTRIBUTION_DENY( + contributionToUpdate.userId, + contributionToUpdate.id, + contributionToUpdate.amount, + ) sendContributionDeniedEmail({ firstName: user.firstName, diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index bedf8c533..1d3864f27 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -29,8 +29,7 @@ import { sendTransactionLinkRedeemedEmail, sendTransactionReceivedEmail, } from '@/emails/sendEmailVariants' -import { Event, EventTransactionReceive, EventTransactionSend } from '@/event/Event' -import { writeEvent } from '@/event/EventProtocolEmitter' +import { EVENT_TRANSACTION_RECEIVE, EVENT_TRANSACTION_SEND } from '@/event/Event' import { BalanceResolver } from './BalanceResolver' import { MEMO_MAX_CHARS, MEMO_MIN_CHARS } from './const/const' @@ -141,19 +140,19 @@ export const executeTransaction = async ( await queryRunner.commitTransaction() logger.info(`commit Transaction successful...`) - const eventTransactionSend = new EventTransactionSend() - eventTransactionSend.userId = transactionSend.userId - eventTransactionSend.xUserId = transactionSend.linkedUserId - eventTransactionSend.transactionId = transactionSend.id - eventTransactionSend.amount = transactionSend.amount.mul(-1) - await writeEvent(new Event().setEventTransactionSend(eventTransactionSend)) + EVENT_TRANSACTION_SEND( + transactionSend.userId, + transactionSend.linkedUserId, + transactionSend.id, + transactionSend.amount.mul(-1), + ) - const eventTransactionReceive = new EventTransactionReceive() - eventTransactionReceive.userId = transactionReceive.userId - eventTransactionReceive.xUserId = transactionReceive.linkedUserId - eventTransactionReceive.transactionId = transactionReceive.id - eventTransactionReceive.amount = transactionReceive.amount - await writeEvent(new Event().setEventTransactionReceive(eventTransactionReceive)) + EVENT_TRANSACTION_RECEIVE( + transactionReceive.userId, + transactionReceive.linkedUserId, + transactionReceive.id, + transactionReceive.amount, + ) } catch (e) { await queryRunner.rollbackTransaction() logger.error(`Transaction was not successful: ${e}`) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 5ebf5b445..7a9eebe65 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -48,15 +48,13 @@ import { klicktippNewsletterStateMiddleware } from '@/middleware/klicktippMiddle import { klicktippSignIn } from '@/apis/KlicktippController' import { RIGHTS } from '@/auth/RIGHTS' import { hasElopageBuys } from '@/util/hasElopageBuys' -import { writeEvent } from '@/event/EventProtocolEmitter' import { - Event, - EventLogin, - EventRedeemRegister, - EventRegister, - EventSendAccountMultiRegistrationEmail, - EventSendConfirmationEmail, - EventActivateAccount, + EVENT_LOGIN, + EVENT_SEND_ACCOUNT_MULTIREGISTRATION_EMAIL, + EVENT_SEND_CONFIRMATION_EMAIL, + EVENT_REDEEM_REGISTER, + EVENT_REGISTER, + EVENT_ACTIVATE_ACCOUNT, } from '@/event/Event' import { getUserCreations } from './util/creations' import { isValidPassword } from '@/password/EncryptorUtils' @@ -177,9 +175,9 @@ export class UserResolver { key: 'token', value: encode(dbUser.gradidoID), }) - const ev = new EventLogin() - ev.userId = user.id - writeEvent(new Event().setEventLogin(ev)) + + EVENT_LOGIN(user.id) + logger.info(`successful Login: ${JSON.stringify(user, null, 2)}`) return user } @@ -211,7 +209,6 @@ export class UserResolver { ) // TODO: wrong default value (should be null), how does graphql work here? Is it an required field? // default int publisher_id = 0; - const event = new Event() // Validate Language (no throw) if (!language || !isLanguage(language)) { @@ -249,9 +246,9 @@ export class UserResolver { email, language: foundUser.language, // use language of the emails owner for sending }) - const eventSendAccountMultiRegistrationEmail = new EventSendAccountMultiRegistrationEmail() - eventSendAccountMultiRegistrationEmail.userId = foundUser.id - writeEvent(event.setEventSendConfirmationEmail(eventSendAccountMultiRegistrationEmail)) + + EVENT_SEND_ACCOUNT_MULTIREGISTRATION_EMAIL(foundUser.id) + logger.info( `sendAccountMultiRegistrationEmail by ${firstName} ${lastName} to ${foundUser.firstName} ${foundUser.lastName} <${email}>`, ) @@ -268,10 +265,7 @@ export class UserResolver { const gradidoID = await newGradidoID() - const eventRegister = new EventRegister() - const eventRedeemRegister = new EventRedeemRegister() - const eventSendConfirmEmail = new EventSendConfirmationEmail() - + const eventRegisterRedeem = EVENT_REDEEM_REGISTER(0, null, null, false) let dbUser = new DbUser() dbUser.gradidoID = gradidoID dbUser.firstName = firstName @@ -288,14 +282,14 @@ export class UserResolver { logger.info('redeemCode found contributionLink=' + contributionLink) if (contributionLink) { dbUser.contributionLinkId = contributionLink.id - eventRedeemRegister.contributionId = contributionLink.id + eventRegisterRedeem.contributionId = contributionLink.id } } else { const transactionLink = await DbTransactionLink.findOne({ code: redeemCode }) logger.info('redeemCode found transactionLink=' + transactionLink) if (transactionLink) { dbUser.referrerId = transactionLink.userId - eventRedeemRegister.transactionId = transactionLink.id + eventRegisterRedeem.transactionId = transactionLink.id } } } @@ -333,8 +327,9 @@ export class UserResolver { timeDurationObject: getTimeDurationObject(CONFIG.EMAIL_CODE_VALID_TIME), }) logger.info(`sendAccountActivationEmail of ${firstName}.${lastName} to ${email}`) - eventSendConfirmEmail.userId = dbUser.id - writeEvent(event.setEventSendConfirmationEmail(eventSendConfirmEmail)) + + // TODO: this event is used twice, why? + EVENT_SEND_CONFIRMATION_EMAIL(dbUser.id) if (!emailSent) { logger.debug(`Account confirmation link: ${activationLink}`) @@ -351,11 +346,10 @@ export class UserResolver { logger.info('createUser() successful...') if (redeemCode) { - eventRedeemRegister.userId = dbUser.id - await writeEvent(event.setEventRedeemRegister(eventRedeemRegister)) + eventRegisterRedeem.userId = dbUser.id + eventRegisterRedeem.save() } else { - eventRegister.userId = dbUser.id - await writeEvent(event.setEventRegister(eventRegister)) + EVENT_REGISTER(dbUser.id) } return new User(dbUser) @@ -458,8 +452,6 @@ export class UserResolver { await queryRunner.connect() await queryRunner.startTransaction('REPEATABLE READ') - const event = new Event() - try { // Save user await queryRunner.manager.save(user).catch((error) => { @@ -473,9 +465,7 @@ export class UserResolver { await queryRunner.commitTransaction() logger.info('User and UserContact data written successfully...') - const eventActivateAccount = new EventActivateAccount() - eventActivateAccount.userId = user.id - writeEvent(event.setEventActivateAccount(eventActivateAccount)) + EVENT_ACTIVATE_ACCOUNT(user.id) } catch (e) { await queryRunner.rollbackTransaction() throw new LogError('Error on writing User and User Contact data', e) @@ -819,10 +809,8 @@ export class UserResolver { if (!emailSent) { logger.info(`Account confirmation link: ${activationLink}`) } else { - const event = new Event() - const eventSendConfirmationEmail = new EventSendConfirmationEmail() - eventSendConfirmationEmail.userId = user.id - await writeEvent(event.setEventSendConfirmationEmail(eventSendConfirmationEmail)) + // TODO: this event is used twice, why? + EVENT_SEND_CONFIRMATION_EMAIL(user.id) } return true