From bca1ceb600939fe872dda9ec68a2d222d8c0cf5c Mon Sep 17 00:00:00 2001 From: autocommit Date: Fri, 15 May 2026 21:17:45 -0700 Subject: [PATCH] =?UTF-8?q?feat(segments):=20=E2=9C=A8=20Add=20corp=20filt?= =?UTF-8?q?er=20capability=20to=20Segments=20API=20by=20extending=20Segmen?= =?UTF-8?q?tDto=20and=20implementing=20filtering=20logic=20in=20SegmentsSe?= =?UTF-8?q?rvice.getSegments()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- services/api/src/segments/dto/segment.dto.ts | 8 ++++++++ services/api/src/segments/segments.service.ts | 9 +++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) 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 {