From 3f0fb42d99f7f12021e4897adfd3a57cde6de89c Mon Sep 17 00:00:00 2001 From: Sergey Krylov Date: Wed, 24 Jun 2026 09:44:35 +0300 Subject: [PATCH] feat: add BrokerAnalyticsDto type, API function, and hook --- .../broker-analytics/api/brokerAnalyticsApi.ts | 10 ++++++++++ .../src/entities/broker-analytics/index.ts | 2 ++ .../broker-analytics/model/useBrokerAnalytics.ts | 14 ++++++++++++++ apps/frontend/src/shared/api/index.ts | 3 +++ apps/frontend/src/shared/api/types.ts | 10 ++++++++++ 5 files changed, 39 insertions(+) create mode 100644 apps/frontend/src/entities/broker-analytics/api/brokerAnalyticsApi.ts create mode 100644 apps/frontend/src/entities/broker-analytics/index.ts create mode 100644 apps/frontend/src/entities/broker-analytics/model/useBrokerAnalytics.ts diff --git a/apps/frontend/src/entities/broker-analytics/api/brokerAnalyticsApi.ts b/apps/frontend/src/entities/broker-analytics/api/brokerAnalyticsApi.ts new file mode 100644 index 0000000..aeaa747 --- /dev/null +++ b/apps/frontend/src/entities/broker-analytics/api/brokerAnalyticsApi.ts @@ -0,0 +1,10 @@ +import type { ApiResponseMeta, BrokerAnalytics } from '@/shared/api' +import { request } from '@/shared/api/kyClient' + +export function getBrokerAnalytics( + accountId: string, +): Promise<{ data: BrokerAnalytics; meta: ApiResponseMeta }> { + return request( + `/api/v1/broker/accounts/${encodeURIComponent(accountId)}/analytics`, + ) +} diff --git a/apps/frontend/src/entities/broker-analytics/index.ts b/apps/frontend/src/entities/broker-analytics/index.ts new file mode 100644 index 0000000..1869154 --- /dev/null +++ b/apps/frontend/src/entities/broker-analytics/index.ts @@ -0,0 +1,2 @@ +export { getBrokerAnalytics } from './api/brokerAnalyticsApi' +export { useBrokerAnalytics } from './model/useBrokerAnalytics' diff --git a/apps/frontend/src/entities/broker-analytics/model/useBrokerAnalytics.ts b/apps/frontend/src/entities/broker-analytics/model/useBrokerAnalytics.ts new file mode 100644 index 0000000..d499448 --- /dev/null +++ b/apps/frontend/src/entities/broker-analytics/model/useBrokerAnalytics.ts @@ -0,0 +1,14 @@ +import { useQuery } from '@tanstack/react-query' +import type { BrokerAnalytics } from '@/shared/api' +import { getBrokerAnalytics } from '../api/brokerAnalyticsApi' + +export function useBrokerAnalytics(accountId: string | undefined) { + return useQuery({ + queryKey: ['broker', 'analytics', accountId], + enabled: Boolean(accountId), + queryFn: async () => (await getBrokerAnalytics(accountId!)).data, + staleTime: 300_000, + retry: 2, + refetchOnWindowFocus: false, + }) +} diff --git a/apps/frontend/src/shared/api/index.ts b/apps/frontend/src/shared/api/index.ts index 566da60..f7a43d2 100644 --- a/apps/frontend/src/shared/api/index.ts +++ b/apps/frontend/src/shared/api/index.ts @@ -60,3 +60,6 @@ export type BrokerOperationCategory = export type BrokerEventItem = components['schemas']['BrokerEventItemDto'] export type BrokerEventsData = components['schemas']['BrokerEventsDataDto'] export type BrokerEventsSummary = components['schemas']['BrokerEventsSummaryDto'] + +// Broker analytics +export type BrokerAnalytics = components['schemas']['BrokerAnalyticsDto'] diff --git a/apps/frontend/src/shared/api/types.ts b/apps/frontend/src/shared/api/types.ts index 33b54c3..0f22223 100644 --- a/apps/frontend/src/shared/api/types.ts +++ b/apps/frontend/src/shared/api/types.ts @@ -1193,6 +1193,16 @@ export interface components { actualCouponsTotal: number actualPrincipalRepaymentTotal: number } + BrokerAnalyticsDto: { + totalDeposits: number + totalWithdrawn: number + netInvested: number + totalDividends: number + totalCoupons: number + totalReceived: number + totalReturnPercent: number | null + currency: string + } BrokerEventsDataDto: { items: components['schemas']['BrokerEventItemDto'][] summary: components['schemas']['BrokerEventsSummaryDto']