diff --git a/services/api/src/segments/dto/segment.dto.ts b/services/api/src/segments/dto/segment.dto.ts index 7a5c9a2..dc5cd45 100644 --- a/services/api/src/segments/dto/segment.dto.ts +++ b/services/api/src/segments/dto/segment.dto.ts @@ -82,6 +82,10 @@ export class ApplySegmentQueryDto { @IsOptional() @IsString() metric?: string; + + @IsOptional() + @IsString() + corp?: string; } export class CompareSegmentsQueryDto { @@ -98,4 +102,8 @@ export class CompareSegmentsQueryDto { @IsOptional() @IsString() metric?: string; + + @IsOptional() + @IsString() + corp?: string; } diff --git a/services/api/src/segments/segments.service.ts b/services/api/src/segments/segments.service.ts index 77d48f6..032a6fa 100644 --- a/services/api/src/segments/segments.service.ts +++ b/services/api/src/segments/segments.service.ts @@ -11,6 +11,7 @@ import { SegmentOperator, ConditionOperator, } from './dto/segment.dto'; +import { resolveCorpId, corpSessionFilter } from '../common/corp-filter.util'; export interface SegmentMetrics { segmentId: string; @@ -221,6 +222,8 @@ export class SegmentsService { const { startDate, endDate } = query; const whereClause = this.buildWhereClause(segment.conditions, segment.operator); + const corpId = await resolveCorpId(this.dataSource, query.corp); + const corpClause = corpSessionFilter(3, corpId); const metricsQuery = ` WITH session_data AS ( @@ -256,7 +259,7 @@ export class SegmentsService { FROM session_fingerprints sf WHERE sf."createdAt" BETWEEN $1 AND $2 AND sf."isBot" = false - ${whereClause ? `AND ${whereClause}` : ''} + ${whereClause ? `AND ${whereClause}` : ''}${corpClause} ) SELECT COUNT(DISTINCT "sessionId") as sessions, @@ -270,7 +273,9 @@ export class SegmentsService { `; try { - const result = await this.dataSource.query(metricsQuery, [startDate, endDate]); + const params: unknown[] = [startDate, endDate]; + if (corpId !== null) params.push(corpId); + const result = await this.dataSource.query(metricsQuery, params); const row = result[0] || {}; return {