From d54f14a87a6b9d4e63a3177d9973e53563cf486d Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Mon, 2 Sep 2024 17:12:37 +0200 Subject: [PATCH] feat: Track banking service events --- .../server/src/constants/event-tracker.ts | 6 ++ .../events/BankTransactionEventsTracker.ts | 97 +++++++++++++++++++ .../services/EventsTracker/events/events.ts | 4 +- 3 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 packages/server/src/services/EventsTracker/events/BankTransactionEventsTracker.ts diff --git a/packages/server/src/constants/event-tracker.ts b/packages/server/src/constants/event-tracker.ts index 4fcb92aed..2954dc7e9 100644 --- a/packages/server/src/constants/event-tracker.ts +++ b/packages/server/src/constants/event-tracker.ts @@ -34,6 +34,12 @@ export const ITEM_EVENT_DELETED = 'Item deleted'; export const AUTH_SIGNED_UP = 'Auth Signed-up'; export const AUTH_RESET_PASSWORD = 'Auth reset password'; +export const BANK_TRANSACTION_MATCHED = 'Bank transaction matching deleted'; +export const BANK_TRANSACTION_EXCLUDED = 'Bank transaction excluded'; +export const BANK_TRANSACTION_CATEGORIZED = 'Bank transaction categorized'; +export const BANK_TRANSACTION_UNCATEGORIZED = 'Bank transaction uncategorized'; +export const BANK_ACCOUNT_DISCONNECTED = 'Bank account disconnected'; + export const ACCOUNT_GROUP = 'Account'; export const ITEM_GROUP = 'Item'; export const AUTH_GROUP = 'Auth'; diff --git a/packages/server/src/services/EventsTracker/events/BankTransactionEventsTracker.ts b/packages/server/src/services/EventsTracker/events/BankTransactionEventsTracker.ts new file mode 100644 index 000000000..f19615eb4 --- /dev/null +++ b/packages/server/src/services/EventsTracker/events/BankTransactionEventsTracker.ts @@ -0,0 +1,97 @@ +import { Inject, Service } from 'typedi'; +import { EventSubscriber } from '@/lib/EventPublisher/EventPublisher'; +import { PosthogService } from '../PostHog'; +import events from '@/subscribers/events'; +import { + BANK_TRANSACTION_MATCHED, + BANK_TRANSACTION_EXCLUDED, + BANK_TRANSACTION_CATEGORIZED, + BANK_TRANSACTION_UNCATEGORIZED, + BANK_ACCOUNT_DISCONNECTED, +} from '@/constants/event-tracker'; +import { IBankTransactionMatchedEventPayload } from '@/services/Banking/Matching/types'; +import { IBankAccountDisconnectedEventPayload } from '@/services/Banking/BankAccounts/types'; +import { + ICashflowTransactionCategorizedPayload, + ICashflowTransactionUncategorizedPayload, +} from '@/interfaces'; +import { IBankTransactionExcludedEventPayload } from '@/services/Banking/Exclude/_types'; + +@Service() +export class BankTransactionEventsTracker extends EventSubscriber { + @Inject() + private posthog: PosthogService; + + public attach(bus) { + bus.subscribe( + events.bankMatch.onMatched, + this.handleTrackBankTransactionMatchedEvent + ); + bus.subscribe( + events.bankTransactions.onExcluded, + this.handleTrackBankTransactionExcludedEvent + ); + bus.subscribe( + events.cashflow.onTransactionCategorized, + this.handleTrackBankTransactionCategorizedEvent + ); + bus.subscribe( + events.cashflow.onTransactionUncategorized, + this.handleTrackBankTransactionUncategorizedEvent + ); + bus.subscribe( + events.bankAccount.onDisconnected, + this.handleTrackBankAccountDisconnectedEvent + ); + } + + private handleTrackBankTransactionMatchedEvent = ({ + tenantId, + }: IBankTransactionMatchedEventPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_TRANSACTION_MATCHED, + properties: {}, + }); + }; + + private handleTrackBankTransactionExcludedEvent = ({ + tenantId, + }: IBankTransactionExcludedEventPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_TRANSACTION_EXCLUDED, + properties: {}, + }); + }; + + private handleTrackBankTransactionCategorizedEvent = ({ + tenantId, + }: ICashflowTransactionCategorizedPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_TRANSACTION_CATEGORIZED, + properties: {}, + }); + }; + + private handleTrackBankTransactionUncategorizedEvent = ({ + tenantId, + }: ICashflowTransactionUncategorizedPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_TRANSACTION_UNCATEGORIZED, + properties: {}, + }); + }; + + private handleTrackBankAccountDisconnectedEvent = ({ + tenantId, + }: IBankAccountDisconnectedEventPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_ACCOUNT_DISCONNECTED, + properties: {}, + }); + }; +} diff --git a/packages/server/src/services/EventsTracker/events/events.ts b/packages/server/src/services/EventsTracker/events/events.ts index 8f1b9c54f..1f5215bfd 100644 --- a/packages/server/src/services/EventsTracker/events/events.ts +++ b/packages/server/src/services/EventsTracker/events/events.ts @@ -7,6 +7,7 @@ import { ExpenseEventsTracker } from './ExpenseEventsTracker'; import { AccountEventsTracker } from './AccountEventsTracker'; import { AuthenticationEventsTracker } from './AuthenticationEventsTracker'; import { ItemEventsTracker } from './ItemEventsTracker'; +import { BankTransactionEventsTracker } from './BankTransactionEventsTracker'; export const EventsTrackerListeners = [ SaleInvoiceEventsTracker, @@ -17,5 +18,6 @@ export const EventsTrackerListeners = [ AccountEventsTracker, ExpenseEventsTracker, AuthenticationEventsTracker, - ItemEventsTracker + ItemEventsTracker, + BankTransactionEventsTracker, ];