From 5f792158b6105f9090ea4b52f7a6e80ef372662a Mon Sep 17 00:00:00 2001 From: Giddh's Black Tiger Date: Mon, 20 Apr 2026 17:38:19 +0530 Subject: [PATCH] refactor: move analytics interface definitions from service to dashboard models and add by country filter --- .../breakdown-chart.component.ts | 3 ++- .../panel/dashboard/dashboard.component.ts | 4 ++-- .../app/panel/dashboard/dashboard.models.ts | 21 ++++++++++++++++ .../timeseries-chart.component.ts | 3 ++- .../analytics/src/lib/analytics.service.ts | 24 ++++--------------- 5 files changed, 32 insertions(+), 23 deletions(-) diff --git a/apps/36-blocks/src/app/panel/dashboard/breakdown-chart/breakdown-chart.component.ts b/apps/36-blocks/src/app/panel/dashboard/breakdown-chart/breakdown-chart.component.ts index 37701795..5524ee99 100644 --- a/apps/36-blocks/src/app/panel/dashboard/breakdown-chart/breakdown-chart.component.ts +++ b/apps/36-blocks/src/app/panel/dashboard/breakdown-chart/breakdown-chart.component.ts @@ -16,7 +16,7 @@ import { MatSelectModule } from '@angular/material/select'; import { MatFormFieldModule } from '@angular/material/form-field'; import { FormsModule } from '@angular/forms'; import { BaseComponent } from '@proxy/ui/base-component'; -import { AnalyticsService, IBreakdownParams } from '@proxy/services/proxy/analytics'; +import { AnalyticsService } from '@proxy/services/proxy/analytics'; import { takeUntil } from 'rxjs'; import * as echarts from 'echarts'; import { MatButtonModule } from '@angular/material/button'; @@ -26,6 +26,7 @@ import { INFO_TOOLTIPS } from '@proxy/constant'; import { BreakdownGroupBy, IBreakdownGroupByOption, + IBreakdownParams, GROUP_BY_OPTIONS, TimeseriesInterval, intervalForRange, diff --git a/apps/36-blocks/src/app/panel/dashboard/dashboard.component.ts b/apps/36-blocks/src/app/panel/dashboard/dashboard.component.ts index 22270074..958236da 100644 --- a/apps/36-blocks/src/app/panel/dashboard/dashboard.component.ts +++ b/apps/36-blocks/src/app/panel/dashboard/dashboard.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, OnInit, computed, effect, inject, signal } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { DateRange, OVERVIEW_CARDS, RANGE_OPTIONS } from './dashboard.models'; +import { DateRange, IAnalyticsParams, OVERVIEW_CARDS, RANGE_OPTIONS } from './dashboard.models'; import { RouterModule } from '@angular/router'; import { MatIconModule } from '@angular/material/icon'; import { MatSelectModule } from '@angular/material/select'; @@ -11,7 +11,7 @@ import { FormsModule, ReactiveFormsModule, FormControl } from '@angular/forms'; import { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatInputModule } from '@angular/material/input'; import { BaseComponent } from '@proxy/ui/base-component'; -import { AnalyticsService, IAnalyticsParams } from '@proxy/services/proxy/analytics'; +import { AnalyticsService } from '@proxy/services/proxy/analytics'; import { FeaturesService } from '@proxy/services/proxy/features'; import { IFeature } from '@proxy/models/features-model'; import { TimeseriesChartComponent } from './timeseries-chart/timeseries-chart.component'; diff --git a/apps/36-blocks/src/app/panel/dashboard/dashboard.models.ts b/apps/36-blocks/src/app/panel/dashboard/dashboard.models.ts index 1aa5826f..0c59c191 100644 --- a/apps/36-blocks/src/app/panel/dashboard/dashboard.models.ts +++ b/apps/36-blocks/src/app/panel/dashboard/dashboard.models.ts @@ -1,5 +1,24 @@ import { INFO_TOOLTIPS } from '@proxy/constant'; +export type Interval = 'hour' | 'day' | 'week'; + +export interface IAnalyticsParams { + feature_configuration_id?: number; + range?: 'day' | 'week' | 'month'; + start?: string; + end?: string; +} + +export interface ITimeseriesParams extends IAnalyticsParams { + metric: 'signups' | 'logins' | 'active_users'; + interval: Interval; +} + +export interface IBreakdownParams extends IAnalyticsParams { + group_by: 'service_id' | 'source' | 'type' | 'country'; + interval?: Interval; +} + export enum DateRange { day = 'day', week = 'week', @@ -55,6 +74,7 @@ export enum BreakdownGroupBy { service_id = 'service_id', source = 'source', type = 'type', + country = 'country', } export interface IBreakdownGroupByOption { @@ -134,6 +154,7 @@ export const GROUP_BY_OPTIONS: IBreakdownGroupByOption[] = [ { label: 'By Type', value: BreakdownGroupBy.type }, // { label: 'By Source', value: BreakdownGroupBy.source }, { label: 'By Service', value: BreakdownGroupBy.service_id }, + { label: 'By Country', value: BreakdownGroupBy.country }, ]; export function intervalForRange(range: string): TimeseriesInterval { diff --git a/apps/36-blocks/src/app/panel/dashboard/timeseries-chart/timeseries-chart.component.ts b/apps/36-blocks/src/app/panel/dashboard/timeseries-chart/timeseries-chart.component.ts index 9d3865df..ab68e605 100644 --- a/apps/36-blocks/src/app/panel/dashboard/timeseries-chart/timeseries-chart.component.ts +++ b/apps/36-blocks/src/app/panel/dashboard/timeseries-chart/timeseries-chart.component.ts @@ -18,7 +18,7 @@ import { MatSelectModule } from '@angular/material/select'; import { MatFormFieldModule } from '@angular/material/form-field'; import { FormsModule } from '@angular/forms'; import { BaseComponent } from '@proxy/ui/base-component'; -import { AnalyticsService, ITimeseriesParams } from '@proxy/services/proxy/analytics'; +import { AnalyticsService } from '@proxy/services/proxy/analytics'; import { forkJoin, takeUntil } from 'rxjs'; import * as echarts from 'echarts'; import { MatCardModule } from '@angular/material/card'; @@ -28,6 +28,7 @@ import { MatDialog, MatDialogRef } from '@angular/material/dialog'; import { TimeseriesInterval, ITimeseriesSeries, + ITimeseriesParams, INTERVAL_OPTIONS, TIMESERIES_METRICS, intervalForRange, diff --git a/libs/services/proxy/analytics/src/lib/analytics.service.ts b/libs/services/proxy/analytics/src/lib/analytics.service.ts index 8dea7120..dd600e79 100644 --- a/libs/services/proxy/analytics/src/lib/analytics.service.ts +++ b/libs/services/proxy/analytics/src/lib/analytics.service.ts @@ -3,25 +3,11 @@ import { HttpWrapperService } from '@proxy/services/httpWrapper'; import { ProxyBaseUrls } from '@proxy/models/root-models'; import { Observable } from 'rxjs'; import { AnalyticsUrls } from '@proxy/urls/analytics-urls'; - -type Interval = 'hour' | 'day' | 'week'; - -export interface IAnalyticsParams { - feature_configuration_id?: number; - range?: 'day' | 'week' | 'month'; - start?: string; - end?: string; -} - -export interface ITimeseriesParams extends IAnalyticsParams { - metric: 'signups' | 'logins' | 'active_users'; - interval: Interval; -} - -export interface IBreakdownParams extends IAnalyticsParams { - group_by: 'service_id' | 'source' | 'type'; - interval?: Interval; -} +import { + IAnalyticsParams, + IBreakdownParams, + ITimeseriesParams, +} from 'apps/36-blocks/src/app/panel/dashboard/dashboard.models'; @Injectable({ providedIn: 'root',