diff --git a/packages/server/src/constants/event-tracker.ts b/packages/server/src/constants/event-tracker.ts index 0bff17bcd..88e10c7ef 100644 --- a/packages/server/src/constants/event-tracker.ts +++ b/packages/server/src/constants/event-tracker.ts @@ -2,6 +2,7 @@ export const SALE_INVOICE_CREATED = 'Sale invoice created'; export const SALE_INVOICE_EDITED = 'Sale invoice edited'; export const SALE_INVOICE_DELETED = 'Sale invoice deleted'; export const SALE_INVOICE_MAIL_DELIVERED = 'Sale invoice mail delivered'; +export const SALE_INVOICE_VIEWED = 'Sale invoice viewed'; export const SALE_ESTIMATE_CREATED = 'Sale estimate created'; export const SALE_ESTIMATE_EDITED = 'Sale estimate edited'; @@ -26,10 +27,12 @@ export const EXPENSE_DELETED = 'Expense deleted'; export const ACCOUNT_CREATED = 'Account created'; export const ACCOUNT_EDITED = 'Account Edited'; export const ACCOUNT_DELETED = 'Account deleted'; +export const ACCOUNT_VIEWED = 'Account viewed'; export const ITEM_EVENT_CREATED = 'Item created'; export const ITEM_EVENT_EDITED = 'Item edited'; export const ITEM_EVENT_DELETED = 'Item deleted'; +export const ITEM_EVENT_VIEWED = 'Item viewed'; export const AUTH_SIGNED_UP = 'Auth Signed-up'; export const AUTH_RESET_PASSWORD = 'Auth reset password'; diff --git a/packages/server/src/services/Accounts/GetAccount.ts b/packages/server/src/services/Accounts/GetAccount.ts index c16c69459..ef4759bd3 100644 --- a/packages/server/src/services/Accounts/GetAccount.ts +++ b/packages/server/src/services/Accounts/GetAccount.ts @@ -3,6 +3,8 @@ import I18nService from '@/services/I18n/I18nService'; import HasTenancyService from '@/services/Tenancy/TenancyService'; import { AccountTransformer } from './AccountTransform'; import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Service() export class GetAccount { @@ -15,6 +17,9 @@ export class GetAccount { @Inject() private transformer: TransformerInjectable; + @Inject() + private eventPublisher: EventPublisher; + /** * Retrieve the given account details. * @param {number} tenantId @@ -39,6 +44,13 @@ export class GetAccount { new AccountTransformer(), { accountsGraph } ); + const eventPayload = { + tenantId, + accountId, + }; + // Triggers `onAccountViewed` event. + await this.eventPublisher.emitAsync(events.accounts.onViewed, eventPayload); + return this.i18nService.i18nApply( [['accountTypeLabel'], ['accountNormalFormatted']], transformed, diff --git a/packages/server/src/services/EventsTracker/events/AccountEventsTracker.ts b/packages/server/src/services/EventsTracker/events/AccountEventsTracker.ts index 8b371a79f..3f2dff8dd 100644 --- a/packages/server/src/services/EventsTracker/events/AccountEventsTracker.ts +++ b/packages/server/src/services/EventsTracker/events/AccountEventsTracker.ts @@ -11,6 +11,7 @@ import { ACCOUNT_CREATED, ACCOUNT_EDITED, ACCOUNT_DELETED, + ACCOUNT_VIEWED, } from '@/constants/event-tracker'; @Service() @@ -31,6 +32,7 @@ export class AccountEventsTracker extends EventSubscriber { events.accounts.onDeleted, this.handleTrackDeletedAccountEvent ); + bus.subscribe(events.accounts.onViewed, this.handleTrackAccountViewedEvent); } private handleTrackAccountCreatedEvent = ({ @@ -62,4 +64,12 @@ export class AccountEventsTracker extends EventSubscriber { properties: {}, }); }; + + private handleTrackAccountViewedEvent = ({ tenantId }) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: ACCOUNT_VIEWED, + properties: {}, + }); + }; } diff --git a/packages/server/src/services/EventsTracker/events/ItemEventsTracker.ts b/packages/server/src/services/EventsTracker/events/ItemEventsTracker.ts index 97820b2e9..d4d52f8dc 100644 --- a/packages/server/src/services/EventsTracker/events/ItemEventsTracker.ts +++ b/packages/server/src/services/EventsTracker/events/ItemEventsTracker.ts @@ -11,6 +11,7 @@ import { ITEM_EVENT_CREATED, ITEM_EVENT_EDITED, ITEM_EVENT_DELETED, + ITEM_EVENT_VIEWED, } from '@/constants/event-tracker'; @Service() @@ -25,6 +26,7 @@ export class ItemEventsTracker extends EventSubscriber { bus.subscribe(events.item.onCreated, this.handleTrackItemCreatedEvent); bus.subscribe(events.item.onEdited, this.handleTrackEditedItemEvent); bus.subscribe(events.item.onDeleted, this.handleTrackDeletedItemEvent); + bus.subscribe(events.item.onViewed, this.handleTrackViewedItemEvent); } private handleTrackItemCreatedEvent = ({ @@ -56,4 +58,14 @@ export class ItemEventsTracker extends EventSubscriber { properties: {}, }); }; + + private handleTrackViewedItemEvent = ({ + tenantId, + }: IItemEventDeletedPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: ITEM_EVENT_VIEWED, + properties: {}, + }); + }; } diff --git a/packages/server/src/services/EventsTracker/events/SaleInvoicesEventsTracker.ts b/packages/server/src/services/EventsTracker/events/SaleInvoicesEventsTracker.ts index 1ec34c885..4a2f638b0 100644 --- a/packages/server/src/services/EventsTracker/events/SaleInvoicesEventsTracker.ts +++ b/packages/server/src/services/EventsTracker/events/SaleInvoicesEventsTracker.ts @@ -10,6 +10,7 @@ import { SALE_INVOICE_CREATED, SALE_INVOICE_DELETED, SALE_INVOICE_EDITED, + SALE_INVOICE_VIEWED, } from '@/constants/event-tracker'; @Service() @@ -33,6 +34,10 @@ export class SaleInvoiceEventsTracker extends EventSubscriber { events.saleInvoice.onDeleted, this.handleTrackDeletedInvoiceEvent ); + bus.subscribe( + events.saleInvoice.onViewed, + this.handleTrackViewedInvoiceEvent + ); } private handleTrackInvoiceCreatedEvent = ({ @@ -64,4 +69,12 @@ export class SaleInvoiceEventsTracker extends EventSubscriber { properties: {}, }); }; + + private handleTrackViewedInvoiceEvent = ({ tenantId }) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: SALE_INVOICE_VIEWED, + properties: {}, + }); + }; } diff --git a/packages/server/src/services/Items/GetItem.ts b/packages/server/src/services/Items/GetItem.ts index af07e6cca..fd43cbf87 100644 --- a/packages/server/src/services/Items/GetItem.ts +++ b/packages/server/src/services/Items/GetItem.ts @@ -3,6 +3,8 @@ import { IItem } from '@/interfaces'; import HasTenancyService from '@/services/Tenancy/TenancyService'; import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable'; import ItemTransformer from './ItemTransformer'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Inject() export class GetItem { @@ -12,6 +14,9 @@ export class GetItem { @Inject() private transformer: TransformerInjectable; + @Inject() + private eventPublisher: EventPublisher; + /** * Retrieve the item details of the given id with associated details. * @param {number} tenantId @@ -31,6 +36,16 @@ export class GetItem { .withGraphFetched('purchaseTaxRate') .throwIfNotFound(); - return this.transformer.transform(tenantId, item, new ItemTransformer()); + const transformed = await this.transformer.transform( + tenantId, + item, + new ItemTransformer() + ); + const eventPayload = { tenantId, itemId }; + + // Triggers the `onItemViewed` event. + await this.eventPublisher.emitAsync(events.item.onViewed, eventPayload); + + return transformed; } } diff --git a/packages/server/src/services/Sales/Invoices/GetSaleInvoice.ts b/packages/server/src/services/Sales/Invoices/GetSaleInvoice.ts index 35e203049..0cad1e952 100644 --- a/packages/server/src/services/Sales/Invoices/GetSaleInvoice.ts +++ b/packages/server/src/services/Sales/Invoices/GetSaleInvoice.ts @@ -4,6 +4,8 @@ import { SaleInvoiceTransformer } from './SaleInvoiceTransformer'; import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable'; import HasTenancyService from '@/services/Tenancy/TenancyService'; import { CommandSaleInvoiceValidators } from './CommandSaleInvoiceValidators'; +import events from '@/subscribers/events'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; @Service() export class GetSaleInvoice { @@ -16,6 +18,9 @@ export class GetSaleInvoice { @Inject() private validators: CommandSaleInvoiceValidators; + @Inject() + private eventPublisher: EventPublisher; + /** * Retrieve sale invoice with associated entries. * @param {Number} saleInvoiceId - @@ -41,10 +46,20 @@ export class GetSaleInvoice { // Validates the given sale invoice existance. this.validators.validateInvoiceExistance(saleInvoice); - return this.transformer.transform( + const transformed = await this.transformer.transform( tenantId, saleInvoice, new SaleInvoiceTransformer() ); + const eventPayload = { + tenantId, + saleInvoiceId, + }; + // Triggers the `onSaleInvoiceItemViewed` event. + await this.eventPublisher.emitAsync( + events.saleInvoice.onViewed, + eventPayload + ); + return transformed; } } diff --git a/packages/server/src/subscribers/events.ts b/packages/server/src/subscribers/events.ts index d3498f5d4..b5f5e740c 100644 --- a/packages/server/src/subscribers/events.ts +++ b/packages/server/src/subscribers/events.ts @@ -74,6 +74,9 @@ export default { * Accounts service. */ accounts: { + onViewed: 'onAccountViewed', + onListViewed: 'onAccountsListViewed', + onCreating: 'onAccountCreating', onCreated: 'onAccountCreated', @@ -127,6 +130,9 @@ export default { * Sales invoices service. */ saleInvoice: { + onViewed: 'onSaleInvoiceItemViewed', + onListViewed: 'onSaleInvoiceListViewed', + onCreate: 'onSaleInvoiceCreate', onCreating: 'onSaleInvoiceCreating', onCreated: 'onSaleInvoiceCreated', @@ -338,6 +344,8 @@ export default { * Items service. */ item: { + onViewed: 'onItemViewed', + onCreated: 'onItemCreated', onCreating: 'onItemCreating',