Merge pull request #709 from bigcapitalhq/track-viewed-events

feat: Track account, invoice and item viewed events
This commit is contained in:
Ahmed Bouhuolia
2024-10-14 12:16:40 +02:00
committed by GitHub
8 changed files with 90 additions and 2 deletions

View File

@@ -2,6 +2,7 @@ export const SALE_INVOICE_CREATED = 'Sale invoice created';
export const SALE_INVOICE_EDITED = 'Sale invoice edited'; export const SALE_INVOICE_EDITED = 'Sale invoice edited';
export const SALE_INVOICE_DELETED = 'Sale invoice deleted'; export const SALE_INVOICE_DELETED = 'Sale invoice deleted';
export const SALE_INVOICE_MAIL_DELIVERED = 'Sale invoice mail delivered'; 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_CREATED = 'Sale estimate created';
export const SALE_ESTIMATE_EDITED = 'Sale estimate edited'; 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_CREATED = 'Account created';
export const ACCOUNT_EDITED = 'Account Edited'; export const ACCOUNT_EDITED = 'Account Edited';
export const ACCOUNT_DELETED = 'Account deleted'; export const ACCOUNT_DELETED = 'Account deleted';
export const ACCOUNT_VIEWED = 'Account viewed';
export const ITEM_EVENT_CREATED = 'Item created'; export const ITEM_EVENT_CREATED = 'Item created';
export const ITEM_EVENT_EDITED = 'Item edited'; export const ITEM_EVENT_EDITED = 'Item edited';
export const ITEM_EVENT_DELETED = 'Item deleted'; 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_SIGNED_UP = 'Auth Signed-up';
export const AUTH_RESET_PASSWORD = 'Auth reset password'; export const AUTH_RESET_PASSWORD = 'Auth reset password';

View File

@@ -3,6 +3,8 @@ import I18nService from '@/services/I18n/I18nService';
import HasTenancyService from '@/services/Tenancy/TenancyService'; import HasTenancyService from '@/services/Tenancy/TenancyService';
import { AccountTransformer } from './AccountTransform'; import { AccountTransformer } from './AccountTransform';
import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable'; import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable';
import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
import events from '@/subscribers/events';
@Service() @Service()
export class GetAccount { export class GetAccount {
@@ -15,6 +17,9 @@ export class GetAccount {
@Inject() @Inject()
private transformer: TransformerInjectable; private transformer: TransformerInjectable;
@Inject()
private eventPublisher: EventPublisher;
/** /**
* Retrieve the given account details. * Retrieve the given account details.
* @param {number} tenantId * @param {number} tenantId
@@ -39,6 +44,13 @@ export class GetAccount {
new AccountTransformer(), new AccountTransformer(),
{ accountsGraph } { accountsGraph }
); );
const eventPayload = {
tenantId,
accountId,
};
// Triggers `onAccountViewed` event.
await this.eventPublisher.emitAsync(events.accounts.onViewed, eventPayload);
return this.i18nService.i18nApply( return this.i18nService.i18nApply(
[['accountTypeLabel'], ['accountNormalFormatted']], [['accountTypeLabel'], ['accountNormalFormatted']],
transformed, transformed,

View File

@@ -11,6 +11,7 @@ import {
ACCOUNT_CREATED, ACCOUNT_CREATED,
ACCOUNT_EDITED, ACCOUNT_EDITED,
ACCOUNT_DELETED, ACCOUNT_DELETED,
ACCOUNT_VIEWED,
} from '@/constants/event-tracker'; } from '@/constants/event-tracker';
@Service() @Service()
@@ -31,6 +32,7 @@ export class AccountEventsTracker extends EventSubscriber {
events.accounts.onDeleted, events.accounts.onDeleted,
this.handleTrackDeletedAccountEvent this.handleTrackDeletedAccountEvent
); );
bus.subscribe(events.accounts.onViewed, this.handleTrackAccountViewedEvent);
} }
private handleTrackAccountCreatedEvent = ({ private handleTrackAccountCreatedEvent = ({
@@ -62,4 +64,12 @@ export class AccountEventsTracker extends EventSubscriber {
properties: {}, properties: {},
}); });
}; };
private handleTrackAccountViewedEvent = ({ tenantId }) => {
this.posthog.trackEvent({
distinctId: `tenant-${tenantId}`,
event: ACCOUNT_VIEWED,
properties: {},
});
};
} }

View File

@@ -11,6 +11,7 @@ import {
ITEM_EVENT_CREATED, ITEM_EVENT_CREATED,
ITEM_EVENT_EDITED, ITEM_EVENT_EDITED,
ITEM_EVENT_DELETED, ITEM_EVENT_DELETED,
ITEM_EVENT_VIEWED,
} from '@/constants/event-tracker'; } from '@/constants/event-tracker';
@Service() @Service()
@@ -25,6 +26,7 @@ export class ItemEventsTracker extends EventSubscriber {
bus.subscribe(events.item.onCreated, this.handleTrackItemCreatedEvent); bus.subscribe(events.item.onCreated, this.handleTrackItemCreatedEvent);
bus.subscribe(events.item.onEdited, this.handleTrackEditedItemEvent); bus.subscribe(events.item.onEdited, this.handleTrackEditedItemEvent);
bus.subscribe(events.item.onDeleted, this.handleTrackDeletedItemEvent); bus.subscribe(events.item.onDeleted, this.handleTrackDeletedItemEvent);
bus.subscribe(events.item.onViewed, this.handleTrackViewedItemEvent);
} }
private handleTrackItemCreatedEvent = ({ private handleTrackItemCreatedEvent = ({
@@ -56,4 +58,14 @@ export class ItemEventsTracker extends EventSubscriber {
properties: {}, properties: {},
}); });
}; };
private handleTrackViewedItemEvent = ({
tenantId,
}: IItemEventDeletedPayload) => {
this.posthog.trackEvent({
distinctId: `tenant-${tenantId}`,
event: ITEM_EVENT_VIEWED,
properties: {},
});
};
} }

View File

@@ -10,6 +10,7 @@ import {
SALE_INVOICE_CREATED, SALE_INVOICE_CREATED,
SALE_INVOICE_DELETED, SALE_INVOICE_DELETED,
SALE_INVOICE_EDITED, SALE_INVOICE_EDITED,
SALE_INVOICE_VIEWED,
} from '@/constants/event-tracker'; } from '@/constants/event-tracker';
@Service() @Service()
@@ -33,6 +34,10 @@ export class SaleInvoiceEventsTracker extends EventSubscriber {
events.saleInvoice.onDeleted, events.saleInvoice.onDeleted,
this.handleTrackDeletedInvoiceEvent this.handleTrackDeletedInvoiceEvent
); );
bus.subscribe(
events.saleInvoice.onViewed,
this.handleTrackViewedInvoiceEvent
);
} }
private handleTrackInvoiceCreatedEvent = ({ private handleTrackInvoiceCreatedEvent = ({
@@ -64,4 +69,12 @@ export class SaleInvoiceEventsTracker extends EventSubscriber {
properties: {}, properties: {},
}); });
}; };
private handleTrackViewedInvoiceEvent = ({ tenantId }) => {
this.posthog.trackEvent({
distinctId: `tenant-${tenantId}`,
event: SALE_INVOICE_VIEWED,
properties: {},
});
};
} }

View File

@@ -3,6 +3,8 @@ import { IItem } from '@/interfaces';
import HasTenancyService from '@/services/Tenancy/TenancyService'; import HasTenancyService from '@/services/Tenancy/TenancyService';
import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable'; import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable';
import ItemTransformer from './ItemTransformer'; import ItemTransformer from './ItemTransformer';
import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
import events from '@/subscribers/events';
@Inject() @Inject()
export class GetItem { export class GetItem {
@@ -12,6 +14,9 @@ export class GetItem {
@Inject() @Inject()
private transformer: TransformerInjectable; private transformer: TransformerInjectable;
@Inject()
private eventPublisher: EventPublisher;
/** /**
* Retrieve the item details of the given id with associated details. * Retrieve the item details of the given id with associated details.
* @param {number} tenantId * @param {number} tenantId
@@ -31,6 +36,16 @@ export class GetItem {
.withGraphFetched('purchaseTaxRate') .withGraphFetched('purchaseTaxRate')
.throwIfNotFound(); .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;
} }
} }

View File

@@ -4,6 +4,8 @@ import { SaleInvoiceTransformer } from './SaleInvoiceTransformer';
import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable'; import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable';
import HasTenancyService from '@/services/Tenancy/TenancyService'; import HasTenancyService from '@/services/Tenancy/TenancyService';
import { CommandSaleInvoiceValidators } from './CommandSaleInvoiceValidators'; import { CommandSaleInvoiceValidators } from './CommandSaleInvoiceValidators';
import events from '@/subscribers/events';
import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
@Service() @Service()
export class GetSaleInvoice { export class GetSaleInvoice {
@@ -16,6 +18,9 @@ export class GetSaleInvoice {
@Inject() @Inject()
private validators: CommandSaleInvoiceValidators; private validators: CommandSaleInvoiceValidators;
@Inject()
private eventPublisher: EventPublisher;
/** /**
* Retrieve sale invoice with associated entries. * Retrieve sale invoice with associated entries.
* @param {Number} saleInvoiceId - * @param {Number} saleInvoiceId -
@@ -41,10 +46,20 @@ export class GetSaleInvoice {
// Validates the given sale invoice existance. // Validates the given sale invoice existance.
this.validators.validateInvoiceExistance(saleInvoice); this.validators.validateInvoiceExistance(saleInvoice);
return this.transformer.transform( const transformed = await this.transformer.transform(
tenantId, tenantId,
saleInvoice, saleInvoice,
new SaleInvoiceTransformer() new SaleInvoiceTransformer()
); );
const eventPayload = {
tenantId,
saleInvoiceId,
};
// Triggers the `onSaleInvoiceItemViewed` event.
await this.eventPublisher.emitAsync(
events.saleInvoice.onViewed,
eventPayload
);
return transformed;
} }
} }

View File

@@ -74,6 +74,9 @@ export default {
* Accounts service. * Accounts service.
*/ */
accounts: { accounts: {
onViewed: 'onAccountViewed',
onListViewed: 'onAccountsListViewed',
onCreating: 'onAccountCreating', onCreating: 'onAccountCreating',
onCreated: 'onAccountCreated', onCreated: 'onAccountCreated',
@@ -127,6 +130,9 @@ export default {
* Sales invoices service. * Sales invoices service.
*/ */
saleInvoice: { saleInvoice: {
onViewed: 'onSaleInvoiceItemViewed',
onListViewed: 'onSaleInvoiceListViewed',
onCreate: 'onSaleInvoiceCreate', onCreate: 'onSaleInvoiceCreate',
onCreating: 'onSaleInvoiceCreating', onCreating: 'onSaleInvoiceCreating',
onCreated: 'onSaleInvoiceCreated', onCreated: 'onSaleInvoiceCreated',
@@ -338,6 +344,8 @@ export default {
* Items service. * Items service.
*/ */
item: { item: {
onViewed: 'onItemViewed',
onCreated: 'onItemCreated', onCreated: 'onItemCreated',
onCreating: 'onItemCreating', onCreating: 'onItemCreating',