diff --git a/backend/src/analytics/analytics.module.ts b/backend/src/analytics/analytics.module.ts index 27ae839..81b46df 100644 --- a/backend/src/analytics/analytics.module.ts +++ b/backend/src/analytics/analytics.module.ts @@ -4,6 +4,7 @@ import { AnalyticsEvent } from './entities/analytics-event.entity'; import { RetentionCohort } from './entities/retention-cohort.entity'; import { UsersAnalyticsListener } from './listeners/users-analytics.listener'; import { AnalyticsController } from './controllers/analytics.controller'; +import { AnalyticsService } from './analytics.service'; import { TrackEventProvider } from './providers/track-event.provider'; import { GetOnboardingFunnelProvider } from './providers/get-onboarding-funnel.provider'; import { GetRetentionCurveProvider } from './providers/get-retention-curve.provider'; @@ -12,11 +13,12 @@ import { GetRetentionCurveProvider } from './providers/get-retention-curve.provi imports: [TypeOrmModule.forFeature([AnalyticsEvent, RetentionCohort])], controllers: [AnalyticsController], providers: [ + AnalyticsService, UsersAnalyticsListener, TrackEventProvider, GetOnboardingFunnelProvider, GetRetentionCurveProvider, ], - exports: [TrackEventProvider, GetOnboardingFunnelProvider, GetRetentionCurveProvider, TypeOrmModule], + exports: [AnalyticsService, TrackEventProvider, GetOnboardingFunnelProvider, GetRetentionCurveProvider, TypeOrmModule], }) export class AnalyticsModule {} \ No newline at end of file diff --git a/backend/src/analytics/analytics.service.ts b/backend/src/analytics/analytics.service.ts new file mode 100644 index 0000000..8dd28b7 --- /dev/null +++ b/backend/src/analytics/analytics.service.ts @@ -0,0 +1,16 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AnalyticsService { + /** + * No-op health check method for the analytics module. + * Can be extended with actual analytics logic in subsequent issues. + */ + ping(): { status: string; module: string; timestamp: string } { + return { + status: 'ok', + module: 'analytics', + timestamp: new Date().toISOString(), + }; + } +} diff --git a/backend/src/analytics/controllers/analytics.controller.ts b/backend/src/analytics/controllers/analytics.controller.ts index 2e5fcb1..88d123f 100644 --- a/backend/src/analytics/controllers/analytics.controller.ts +++ b/backend/src/analytics/controllers/analytics.controller.ts @@ -3,6 +3,7 @@ import { ApiTags, ApiOperation, ApiQuery, ApiResponse } from '@nestjs/swagger'; import { TrackEventProvider } from '../providers/track-event.provider'; import { GetOnboardingFunnelProvider } from '../providers/get-onboarding-funnel.provider'; import { GetRetentionCurveProvider } from '../providers/get-retention-curve.provider'; +import { AnalyticsService } from '../analytics.service'; import { TrackEventDto } from '../dtos/track-event.dto'; import { DateRangeDto } from '../dtos/date-range.dto'; import { AnalyticsMetricResult } from '../dtos/analytics-metric-result.dto'; @@ -15,8 +16,16 @@ export class AnalyticsController { private readonly trackEventProvider: TrackEventProvider, private readonly getOnboardingFunnelProvider: GetOnboardingFunnelProvider, private readonly getRetentionCurveProvider: GetRetentionCurveProvider, + private readonly analyticsService: AnalyticsService, ) {} + @Get('ping') + @ApiOperation({ summary: 'Health check for analytics module' }) + @ApiResponse({ status: 200, description: 'Analytics module is healthy' }) + ping() { + return this.analyticsService.ping(); + } + @Post('track') @ApiOperation({ summary: 'Track an analytics event' }) async track(@Body() dto: TrackEventDto) {