view models
This commit is contained in:
@@ -1,7 +1,18 @@
|
||||
import { AnalyticsApiClient } from '../../api/analytics/AnalyticsApiClient';
|
||||
import { RecordPageViewOutputDTO, RecordEngagementOutputDTO } from '../../types/generated';
|
||||
import { RecordPageViewInputViewModel } from '../../view-models/RecordPageViewInputViewModel';
|
||||
import { RecordEngagementInputViewModel } from '../../view-models/RecordEngagementInputViewModel';
|
||||
import { RecordPageViewOutputViewModel } from '../../view-models/RecordPageViewOutputViewModel';
|
||||
import { RecordEngagementOutputViewModel } from '../../view-models/RecordEngagementOutputViewModel';
|
||||
|
||||
// TODO: Create proper DTOs in generated types
|
||||
interface RecordPageViewInputDTO {
|
||||
path: string;
|
||||
userId?: string;
|
||||
}
|
||||
|
||||
interface RecordEngagementInputDTO {
|
||||
eventType: string;
|
||||
userId?: string;
|
||||
metadata?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
/**
|
||||
* Analytics Service
|
||||
@@ -15,31 +26,18 @@ export class AnalyticsService {
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Record a page view
|
||||
*/
|
||||
async recordPageView(input: RecordPageViewInputViewModel): Promise<RecordPageViewOutputDTO> {
|
||||
const apiInput: { path: string; userId?: string } = {
|
||||
path: input.path,
|
||||
};
|
||||
if (input.userId) {
|
||||
apiInput.userId = input.userId;
|
||||
}
|
||||
return await this.apiClient.recordPageView(apiInput);
|
||||
}
|
||||
* Record a page view
|
||||
*/
|
||||
async recordPageView(input: RecordPageViewInputDTO): Promise<RecordPageViewOutputViewModel> {
|
||||
const result = await this.apiClient.recordPageView(input);
|
||||
return new RecordPageViewOutputViewModel(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Record an engagement event
|
||||
*/
|
||||
async recordEngagement(input: RecordEngagementInputViewModel): Promise<RecordEngagementOutputDTO> {
|
||||
const apiInput: { eventType: string; userId?: string; metadata?: Record<string, unknown> } = {
|
||||
eventType: input.eventType,
|
||||
};
|
||||
if (input.userId) {
|
||||
apiInput.userId = input.userId;
|
||||
}
|
||||
if (input.metadata) {
|
||||
apiInput.metadata = input.metadata;
|
||||
}
|
||||
return await this.apiClient.recordEngagement(apiInput);
|
||||
}
|
||||
* Record an engagement event
|
||||
*/
|
||||
async recordEngagement(input: RecordEngagementInputDTO): Promise<RecordEngagementOutputViewModel> {
|
||||
const result = await this.apiClient.recordEngagement(input);
|
||||
return new RecordEngagementOutputViewModel(result);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user