fix(platform-service): missing cosmos containers + NaN guard in cross-product limit

- cosmos-init.ts: add onboarding_events + onboarding_completions containers
  (onboarding repository references them but they were never registered)
- telemetry cross-product route: parseInt(limit) could produce NaN when
  given non-numeric input — now clamps to 1-100 with default 20
This commit is contained in:
saravanakumardb1 2026-03-19 22:20:31 -07:00
parent 4e7401d164
commit 652a8e5d15
2 changed files with 8 additions and 1 deletions

View File

@ -147,6 +147,9 @@ const CONTAINER_DEFS: Record<string, ContainerConfig> = {
diagnostic_insights: { partitionKeyPath: '/clusterId', defaultTtl: 90 * 86400 },
diagnostic_queries: { partitionKeyPath: '/userId', defaultTtl: 30 * 86400 },
proactive_alerts: { partitionKeyPath: '/productId', defaultTtl: 30 * 86400 },
// Onboarding analytics (Phase 4.3)
onboarding_events: { partitionKeyPath: '/productId' },
onboarding_completions: { partitionKeyPath: '/productId' },
// Broadcast Messaging & Surveys (see docs/roadmaps/not-started/platform_BROADCAST_SURVEY_ROADMAP.md)
broadcasts: { partitionKeyPath: '/productId' },
broadcast_deliveries: { partitionKeyPath: '/userId', defaultTtl: 90 * 86400 },

View File

@ -928,10 +928,14 @@ export async function telemetryRoutes(app: FastifyInstance) {
throw new BadRequestError('Provide 1-20 product IDs');
}
const parsedLimit = limit ? parseInt(limit, 10) : 20;
const clampedLimit =
Number.isFinite(parsedLimit) && parsedLimit > 0 ? Math.min(parsedLimit, 100) : 20;
const [summary, daily, clusters] = await Promise.all([
repo.queryCrossProductSummary(productIds, from, to),
repo.queryCrossProductDaily(productIds, from, to),
repo.queryCrossProductClusters(productIds, limit ? parseInt(limit, 10) : 20),
repo.queryCrossProductClusters(productIds, clampedLimit),
]);
return { summary, daily, clusters };