feat(analytics-gateway): Implement new analytics data processing methods in client and controller

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Claude Code 2026-03-20 04:26:14 -07:00
parent 0c699abe7c
commit 533f3bbac9
2 changed files with 55 additions and 41 deletions

View file

@ -202,8 +202,8 @@ export class AnalyticsApiClient implements OnModuleInit {
// ============ Acquisition Endpoints ============
async getAcquisitionOverview(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
segmentId?: string;
}): Promise<{
totalSessions: number;
@ -216,16 +216,16 @@ export class AnalyticsApiClient implements OnModuleInit {
}
async getChannels(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
segmentId?: string;
}): Promise<ChannelMetrics[]> {
return this.fetchJson('/acquisition/channels', params);
}
async getSources(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
channel?: string;
segmentId?: string;
}): Promise<SourceMetrics[]> {
@ -233,16 +233,16 @@ export class AnalyticsApiClient implements OnModuleInit {
}
async getCampaigns(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
segmentId?: string;
}): Promise<CampaignMetrics[]> {
return this.fetchJson('/acquisition/campaigns', params);
}
async getReferrers(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
limit?: string;
segmentId?: string;
}): Promise<Array<{ referrer: string; sessions: number; users: number }>> {
@ -252,16 +252,16 @@ export class AnalyticsApiClient implements OnModuleInit {
// ============ Engagement Endpoints ============
async getEngagementOverview(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
segmentId?: string;
}): Promise<EngagementOverview> {
return this.fetchJson('/engagement/overview', params);
}
async getPages(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
sort?: string;
limit?: string;
segmentId?: string;
@ -270,8 +270,8 @@ export class AnalyticsApiClient implements OnModuleInit {
}
async getEvents(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
category?: string;
segmentId?: string;
}): Promise<EventMetrics[]> {
@ -279,8 +279,8 @@ export class AnalyticsApiClient implements OnModuleInit {
}
async getScrollDepth(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
page?: string;
segmentId?: string;
}): Promise<Array<{ depth: number; users: number; percentage: number }>> {
@ -288,8 +288,8 @@ export class AnalyticsApiClient implements OnModuleInit {
}
async getUserFlow(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
startPage?: string;
depth?: string;
segmentId?: string;
@ -300,40 +300,40 @@ export class AnalyticsApiClient implements OnModuleInit {
// ============ Audience Endpoints ============
async getAudienceOverview(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
segmentId?: string;
}): Promise<AudienceOverview> {
return this.fetchJson('/audience/overview', params);
}
async getDevices(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
segmentId?: string;
}): Promise<DeviceBreakdown[]> {
return this.fetchJson('/audience/devices', params);
}
async getBrowsers(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
segmentId?: string;
}): Promise<BrowserBreakdown[]> {
return this.fetchJson('/audience/browsers', params);
}
async getOperatingSystems(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
segmentId?: string;
}): Promise<Array<{ os: string; users: number; sessions: number; percentage: number }>> {
return this.fetchJson('/audience/operating-systems', params);
}
async getGeography(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
granularity?: string;
segmentId?: string;
}): Promise<GeoBreakdown[]> {
@ -341,16 +341,16 @@ export class AnalyticsApiClient implements OnModuleInit {
}
async getLanguages(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
segmentId?: string;
}): Promise<Array<{ language: string; users: number; sessions: number; percentage: number }>> {
return this.fetchJson('/audience/languages', params);
}
async getNewVsReturning(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
segmentId?: string;
}): Promise<{
newUsers: { users: number; sessions: number; percentage: number };
@ -400,15 +400,15 @@ export class AnalyticsApiClient implements OnModuleInit {
async applySegment(
id: string,
params: { startDate: string; endDate: string },
params: { startDate?: string; endDate?: string },
): Promise<SegmentMetrics> {
return this.fetchJson(`/segments/${id}/apply`, params);
}
async compareSegments(params: {
segmentIds: string;
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
metric?: string;
}): Promise<{
segments: SegmentMetrics[];
@ -421,8 +421,8 @@ export class AnalyticsApiClient implements OnModuleInit {
// ============ Trends Endpoints ============
async getTrends(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
metrics?: string;
granularity?: string;
segmentId?: string;
@ -433,8 +433,8 @@ export class AnalyticsApiClient implements OnModuleInit {
// ============ Sessions Endpoints ============
async getSessionMetrics(params: {
startDate: string;
endDate: string;
startDate?: string;
endDate?: string;
segmentId?: string;
}): Promise<{
totalSessions: number;

View file

@ -627,6 +627,20 @@ export class AnalyticsGatewayController {
return this.analyticsClient.deleteSegment(id);
}
// ============ Trends (granular — backward compat) ============
@Get('trends/raw')
async getTrends(@Query() query: TrendsQueryDto) {
return this.analyticsClient.getTrends(query);
}
// ============ Segments (list — backward compat) ============
@Get('segments/all')
async getSegments() {
return this.analyticsClient.getSegments();
}
// ============ Sessions (granular — backward compat) ============
@Get('sessions/metrics')