From 32ba6f9a6cf5116b7dffe6dfa6268e71be161bb3 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Sat, 19 Oct 2024 23:47:14 +0200 Subject: [PATCH] feat: track more services events --- .../server/src/constants/event-tracker.ts | 3 +++ .../src/services/Accounts/GetAccount.ts | 10 ++----- .../Cashflow/NewCashflowTransactionService.ts | 1 + .../RefundSyncCreditNoteBalance.ts | 5 ++-- .../events/SaleEstimateEventsTracker.ts | 13 ++++++++++ .../TransactionsLockingEventsTracker.ts | 26 +++++++++++++++++++ .../src/services/Items/ItemsApplication.ts | 18 ++++++------- .../Sales/Estimates/GetSaleEstimate.ts | 15 ++++++++++- packages/server/src/subscribers/events.ts | 1 + 9 files changed, 71 insertions(+), 21 deletions(-) diff --git a/packages/server/src/constants/event-tracker.ts b/packages/server/src/constants/event-tracker.ts index 26e038e4e..d7f9d4d81 100644 --- a/packages/server/src/constants/event-tracker.ts +++ b/packages/server/src/constants/event-tracker.ts @@ -9,6 +9,7 @@ export const SALE_ESTIMATE_CREATED = 'Sale estimate created'; export const SALE_ESTIMATE_EDITED = 'Sale estimate edited'; export const SALE_ESTIMATE_DELETED = 'Sale estimate deleted'; export const SALE_ESTIMATE_PDF_VIEWED = 'Sale estimate PDF viewed'; +export const SALE_ESTIMATE_VIEWED = 'Sale estimate viewed'; export const PAYMENT_RECEIVED_CREATED = 'Payment received created'; export const PAYMENT_RECEIVED_EDITED = 'payment received edited'; @@ -47,6 +48,8 @@ export const AUTH_RESET_PASSWORD = 'Auth reset password'; export const SUBSCRIPTION_CANCELLED = 'Subscription cancelled'; export const SUBSCRIPTION_RESUMED = 'Subscription resumed'; export const SUBSCRIPTION_PLAN_CHANGED = 'Subscription plan changed'; +export const SUBSCRIPTION_PAYMENT_SUCCEED = 'Subscription payment succeed'; +export const SUBSCRIPTION_PAYMENT_FAILED = 'Subscription payment failed'; export const CUSTOMER_CREATED = 'Customer created'; export const CUSTOMER_EDITED = 'Customer edited'; diff --git a/packages/server/src/services/Accounts/GetAccount.ts b/packages/server/src/services/Accounts/GetAccount.ts index 17752709f..5ad0cc917 100644 --- a/packages/server/src/services/Accounts/GetAccount.ts +++ b/packages/server/src/services/Accounts/GetAccount.ts @@ -1,5 +1,4 @@ import { Service, Inject } from 'typedi'; -import I18nService from '@/services/I18n/I18nService'; import HasTenancyService from '@/services/Tenancy/TenancyService'; import { AccountTransformer } from './AccountTransform'; import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable'; @@ -11,9 +10,6 @@ export class GetAccount { @Inject() private tenancy: HasTenancyService; - @Inject() - private i18nService: I18nService; - @Inject() private transformer: TransformerInjectable; @@ -44,10 +40,8 @@ export class GetAccount { new AccountTransformer(), { accountsGraph } ); - const eventPayload = { - tenantId, - accountId, - }; + const eventPayload = { tenantId, accountId }; + // Triggers `onAccountViewed` event. await this.eventPublisher.emitAsync(events.accounts.onViewed, eventPayload); diff --git a/packages/server/src/services/Cashflow/NewCashflowTransactionService.ts b/packages/server/src/services/Cashflow/NewCashflowTransactionService.ts index 8a5b15be0..43a8a692f 100644 --- a/packages/server/src/services/Cashflow/NewCashflowTransactionService.ts +++ b/packages/server/src/services/Cashflow/NewCashflowTransactionService.ts @@ -122,6 +122,7 @@ export default class NewCashflowTransactionService { * @param {number} tenantId - * @param {ICashflowOwnerContributionDTO} ownerContributionDTO * @param {number} userId - User id. + * @returns {Promise} */ public newCashflowTransaction = async ( tenantId: number, diff --git a/packages/server/src/services/CreditNotes/RefundSyncCreditNoteBalance.ts b/packages/server/src/services/CreditNotes/RefundSyncCreditNoteBalance.ts index 9414b33b6..17f21209f 100644 --- a/packages/server/src/services/CreditNotes/RefundSyncCreditNoteBalance.ts +++ b/packages/server/src/services/CreditNotes/RefundSyncCreditNoteBalance.ts @@ -1,7 +1,6 @@ -import Knex from 'knex'; -import { IRefundCreditNote } from '@/interfaces'; -import HasTenancyService from '@/services/Tenancy/TenancyService'; +import { Knex } from 'knex'; import { Inject, Service } from 'typedi'; +import HasTenancyService from '@/services/Tenancy/TenancyService'; @Service() export default class RefundSyncCreditNoteBalance { diff --git a/packages/server/src/services/EventsTracker/events/SaleEstimateEventsTracker.ts b/packages/server/src/services/EventsTracker/events/SaleEstimateEventsTracker.ts index 643562248..263044bff 100644 --- a/packages/server/src/services/EventsTracker/events/SaleEstimateEventsTracker.ts +++ b/packages/server/src/services/EventsTracker/events/SaleEstimateEventsTracker.ts @@ -12,6 +12,7 @@ import { SALE_ESTIMATE_EDITED, SALE_ESTIMATE_DELETED, SALE_ESTIMATE_PDF_VIEWED, + SALE_ESTIMATE_VIEWED, } from '@/constants/event-tracker'; @Service() @@ -39,6 +40,10 @@ export class SaleEstimateEventsTracker extends EventSubscriber { events.saleEstimate.onPdfViewed, this.handleTrackPdfViewedEstimateEvent ); + bus.subscribe( + events.saleEstimate.onViewed, + this.handleTrackViewedEstimateEvent + ); } private handleTrackEstimateCreatedEvent = ({ @@ -80,4 +85,12 @@ export class SaleEstimateEventsTracker extends EventSubscriber { properties: {}, }); }; + + private handleTrackViewedEstimateEvent = ({ tenantId }) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: SALE_ESTIMATE_VIEWED, + properties: {}, + }); + }; } diff --git a/packages/server/src/services/EventsTracker/events/TransactionsLockingEventsTracker.ts b/packages/server/src/services/EventsTracker/events/TransactionsLockingEventsTracker.ts index 1c1cfc81b..47d3069af 100644 --- a/packages/server/src/services/EventsTracker/events/TransactionsLockingEventsTracker.ts +++ b/packages/server/src/services/EventsTracker/events/TransactionsLockingEventsTracker.ts @@ -4,6 +4,8 @@ import { ITransactionsLockingPartialUnlocked } from '@/interfaces'; import { PosthogService } from '../PostHog'; import { SUBSCRIPTION_CANCELLED, + SUBSCRIPTION_PAYMENT_FAILED, + SUBSCRIPTION_PAYMENT_SUCCEED, SUBSCRIPTION_PLAN_CHANGED, SUBSCRIPTION_RESUMED, } from '@/constants/event-tracker'; @@ -27,6 +29,14 @@ export class TransactionsLockingEventsTracker extends EventSubscriber { events.subscription.onSubscriptionPlanChanged, this.handleSubscriptionPlanChangedEvent ); + bus.subscribe( + events.subscription.onSubscriptionPaymentSucceed, + this.handleSubscriptionPaymentFailedEvent + ); + bus.subscribe( + events.subscription.onSubscriptionPaymentFailed, + this.handleSubscriptionPaymentSucceed + ); } private handleSubscriptionResumedEvent = ({ tenantId }) => { @@ -52,4 +62,20 @@ export class TransactionsLockingEventsTracker extends EventSubscriber { properties: {}, }); }; + + private handleSubscriptionPaymentFailedEvent = ({ tenantId }) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: SUBSCRIPTION_PAYMENT_FAILED, + properties: {}, + }); + }; + + private handleSubscriptionPaymentSucceed = ({ tenantId }) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: SUBSCRIPTION_PAYMENT_SUCCEED, + properties: {}, + }); + }; } diff --git a/packages/server/src/services/Items/ItemsApplication.ts b/packages/server/src/services/Items/ItemsApplication.ts index a19a9db8f..24b72ec39 100644 --- a/packages/server/src/services/Items/ItemsApplication.ts +++ b/packages/server/src/services/Items/ItemsApplication.ts @@ -39,8 +39,8 @@ export class ItemsApplication { /** * Creates a new item (service/product). - * @param {number} tenantId - * @param {IItemCreateDTO} itemDTO + * @param {number} tenantId + * @param {IItemCreateDTO} itemDTO * @returns {Promise} */ public async createItem( @@ -52,8 +52,8 @@ export class ItemsApplication { /** * Retrieves the given item. - * @param {number} tenantId - * @param {number} itemId + * @param {number} tenantId + * @param {number} itemId * @returns {Promise} */ public getItem(tenantId: number, itemId: number): Promise { @@ -62,9 +62,9 @@ export class ItemsApplication { /** * Edits the given item (service/product). - * @param {number} tenantId - * @param {number} itemId - * @param {IItemEditDTO} itemDTO + * @param {number} tenantId + * @param {number} itemId + * @param {IItemEditDTO} itemDTO * @returns {Promise} */ public editItem(tenantId: number, itemId: number, itemDTO: IItemEditDTO) { @@ -73,8 +73,8 @@ export class ItemsApplication { /** * Deletes the given item (service/product). - * @param {number} tenantId - * @param {number} itemId + * @param {number} tenantId + * @param {number} itemId * @returns {Promise} */ public deleteItem(tenantId: number, itemId: number) { diff --git a/packages/server/src/services/Sales/Estimates/GetSaleEstimate.ts b/packages/server/src/services/Sales/Estimates/GetSaleEstimate.ts index c1a89c20d..644950188 100644 --- a/packages/server/src/services/Sales/Estimates/GetSaleEstimate.ts +++ b/packages/server/src/services/Sales/Estimates/GetSaleEstimate.ts @@ -3,6 +3,8 @@ import HasTenancyService from '@/services/Tenancy/TenancyService'; import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable'; import { SaleEstimateTransfromer } from './SaleEstimateTransformer'; import { SaleEstimateValidators } from './SaleEstimateValidators'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Service() export class GetSaleEstimate { @@ -15,6 +17,9 @@ export class GetSaleEstimate { @Inject() private validators: SaleEstimateValidators; + @Inject() + private eventPublisher: EventPublisher; + /** * Retrieve the estimate details with associated entries. * @async @@ -35,10 +40,18 @@ export class GetSaleEstimate { this.validators.validateEstimateExistance(estimate); // Transformes sale estimate model to POJO. - return this.transformer.transform( + const transformed = await this.transformer.transform( tenantId, estimate, new SaleEstimateTransfromer() ); + const eventPayload = { tenantId, saleEstimateId: estimateId }; + + // Triggers `onSaleEstimateViewed` event. + await this.eventPublisher.emitAsync( + events.saleEstimate.onViewed, + eventPayload + ); + return transformed; } } diff --git a/packages/server/src/subscribers/events.ts b/packages/server/src/subscribers/events.ts index 7d7eb95d7..bd3833b9b 100644 --- a/packages/server/src/subscribers/events.ts +++ b/packages/server/src/subscribers/events.ts @@ -180,6 +180,7 @@ export default { * Sales estimates service. */ saleEstimate: { + onViewed: 'onSaleEstimateViewed', onPdfViewed: 'onSaleEstimatePdfViewed', onCreating: 'onSaleEstimateCreating',