diff --git a/apps/frontend/src/api/client.ts b/apps/frontend/src/api/client.ts index 00460e3..4f7f8b3 100644 --- a/apps/frontend/src/api/client.ts +++ b/apps/frontend/src/api/client.ts @@ -5,8 +5,4 @@ export { setOnUnauthorized, getHealth, searchSecurities, - getBond, - getBondMarketData, - getBondHistory, - getBondCandles, } from '../shared/api/client'; diff --git a/apps/frontend/src/entities/bond/api/bondApi.ts b/apps/frontend/src/entities/bond/api/bondApi.ts new file mode 100644 index 0000000..97aefdc --- /dev/null +++ b/apps/frontend/src/entities/bond/api/bondApi.ts @@ -0,0 +1,44 @@ +import { request } from '@/shared/api/client'; +import type { + ApiResponseMeta, + BondResponse, + BondMarketData, + BondHistoryItem, + CandleItem, +} from '@/shared/api/responses'; + +export function getBond(secid: string): Promise<{ data: BondResponse; meta: ApiResponseMeta }> { + return request(`/api/v1/securities/bonds/${encodeURIComponent(secid)}`); +} + +export function getBondMarketData( + secid: string, +): Promise<{ data: BondMarketData; meta: ApiResponseMeta }> { + return request( + `/api/v1/securities/bonds/${encodeURIComponent(secid)}/marketdata`, + ); +} + +export function getBondHistory( + secid: string, + from: string, + till: string, +): Promise<{ data: BondHistoryItem[]; meta: ApiResponseMeta }> { + return request( + `/api/v1/securities/bonds/${encodeURIComponent(secid)}/history`, + { from, till }, + ); +} + +export function getBondCandles( + secid: string, + interval: '1h' | '24h', + from: string, + till: string, +): Promise<{ data: CandleItem[]; meta: ApiResponseMeta }> { + return request(`/api/v1/securities/bonds/${encodeURIComponent(secid)}/candles`, { + interval, + from, + till, + }); +} diff --git a/apps/frontend/src/entities/bond/index.ts b/apps/frontend/src/entities/bond/index.ts new file mode 100644 index 0000000..92b9f7b --- /dev/null +++ b/apps/frontend/src/entities/bond/index.ts @@ -0,0 +1,3 @@ +export { useBond } from './model/useBond'; +export { useBondCandles } from './model/useBondCandles'; +export { getBond, getBondMarketData, getBondHistory, getBondCandles } from './api/bondApi'; diff --git a/apps/frontend/src/hooks/useBond.test.tsx b/apps/frontend/src/entities/bond/model/useBond.test.tsx similarity index 100% rename from apps/frontend/src/hooks/useBond.test.tsx rename to apps/frontend/src/entities/bond/model/useBond.test.tsx diff --git a/apps/frontend/src/entities/bond/model/useBond.ts b/apps/frontend/src/entities/bond/model/useBond.ts new file mode 100644 index 0000000..302a07f --- /dev/null +++ b/apps/frontend/src/entities/bond/model/useBond.ts @@ -0,0 +1,14 @@ +import { useQuery } from '@tanstack/react-query'; +import { getBond } from '../api/bondApi'; +import type { BondResponse } from '@/shared/api/responses'; + +export function useBond(secid: string) { + return useQuery({ + queryKey: ['bond', secid], + queryFn: async () => { + const res = await getBond(secid); + return res.data; + }, + staleTime: 900_000, + }); +} diff --git a/apps/frontend/src/hooks/useBondCandles.test.tsx b/apps/frontend/src/entities/bond/model/useBondCandles.test.tsx similarity index 97% rename from apps/frontend/src/hooks/useBondCandles.test.tsx rename to apps/frontend/src/entities/bond/model/useBondCandles.test.tsx index d59e4a4..08a159d 100644 --- a/apps/frontend/src/hooks/useBondCandles.test.tsx +++ b/apps/frontend/src/entities/bond/model/useBondCandles.test.tsx @@ -2,7 +2,7 @@ import { describe, it, expect } from 'vitest'; import { renderHook, waitFor } from '@testing-library/react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { http, HttpResponse } from 'msw'; -import { server } from '../test/server'; +import { server } from '../../../test/server'; import { useBondCandles } from './useBondCandles'; import { type ReactNode } from 'react'; diff --git a/apps/frontend/src/entities/bond/model/useBondCandles.ts b/apps/frontend/src/entities/bond/model/useBondCandles.ts new file mode 100644 index 0000000..fb25730 --- /dev/null +++ b/apps/frontend/src/entities/bond/model/useBondCandles.ts @@ -0,0 +1,14 @@ +import { useQuery } from '@tanstack/react-query'; +import { getBondCandles } from '../api/bondApi'; +import type { CandleItem } from '@/shared/api/responses'; + +export function useBondCandles(secid: string, interval: '1h' | '24h', from: string, till: string) { + return useQuery({ + queryKey: ['bondCandles', secid, interval, from, till], + queryFn: async () => { + const res = await getBondCandles(secid, interval, from, till); + return res.data; + }, + staleTime: 3600_000, + }); +} diff --git a/apps/frontend/src/hooks/useBond.ts b/apps/frontend/src/hooks/useBond.ts index 9503e69..37d13b1 100644 --- a/apps/frontend/src/hooks/useBond.ts +++ b/apps/frontend/src/hooks/useBond.ts @@ -1,14 +1 @@ -import { useQuery } from '@tanstack/react-query'; -import { getBond } from '@/shared/api/client'; -import type { BondResponse } from '@/shared/api/responses'; - -export function useBond(secid: string) { - return useQuery({ - queryKey: ['bond', secid], - queryFn: async () => { - const res = await getBond(secid); - return res.data; - }, - staleTime: 900_000, - }); -} +export { useBond } from '../entities/bond/model/useBond'; diff --git a/apps/frontend/src/hooks/useBondCandles.ts b/apps/frontend/src/hooks/useBondCandles.ts index 0ea02c4..9446edc 100644 --- a/apps/frontend/src/hooks/useBondCandles.ts +++ b/apps/frontend/src/hooks/useBondCandles.ts @@ -1,14 +1 @@ -import { useQuery } from '@tanstack/react-query'; -import { getBondCandles } from '@/shared/api/client'; -import type { CandleItem } from '@/shared/api/responses'; - -export function useBondCandles(secid: string, interval: '1h' | '24h', from: string, till: string) { - return useQuery({ - queryKey: ['bondCandles', secid, interval, from, till], - queryFn: async () => { - const res = await getBondCandles(secid, interval, from, till); - return res.data; - }, - staleTime: 3600_000, - }); -} +export { useBondCandles } from '../entities/bond/model/useBondCandles'; diff --git a/apps/frontend/src/pages/BondPage.tsx b/apps/frontend/src/pages/BondPage.tsx index 9fba2c8..25b4871 100644 --- a/apps/frontend/src/pages/BondPage.tsx +++ b/apps/frontend/src/pages/BondPage.tsx @@ -1,6 +1,5 @@ import { useParams } from 'react-router-dom'; -import { useBond } from '../hooks/useBond'; -import { useBondCandles } from '../hooks/useBondCandles'; +import { useBond, useBondCandles } from '../entities/bond'; import { BondDetails } from '../components/BondDetails'; import { PriceChart } from '../components/PriceChart'; diff --git a/apps/frontend/src/shared/api/client.ts b/apps/frontend/src/shared/api/client.ts index b7827a6..d5e60ba 100644 --- a/apps/frontend/src/shared/api/client.ts +++ b/apps/frontend/src/shared/api/client.ts @@ -2,10 +2,6 @@ import type { ApiEnvelope, ApiResponseMeta, AuthResponse, - BondResponse, - BondMarketData, - BondHistoryItem, - CandleItem, SearchResultItem, HealthResponse, } from './responses'; @@ -146,39 +142,3 @@ export function searchSecurities( limit: String(limit), }); } - -export function getBond(secid: string): Promise<{ data: BondResponse; meta: ApiResponseMeta }> { - return request(`/api/v1/securities/bonds/${encodeURIComponent(secid)}`); -} - -export function getBondMarketData( - secid: string, -): Promise<{ data: BondMarketData; meta: ApiResponseMeta }> { - return request( - `/api/v1/securities/bonds/${encodeURIComponent(secid)}/marketdata`, - ); -} - -export function getBondHistory( - secid: string, - from: string, - till: string, -): Promise<{ data: BondHistoryItem[]; meta: ApiResponseMeta }> { - return request( - `/api/v1/securities/bonds/${encodeURIComponent(secid)}/history`, - { from, till }, - ); -} - -export function getBondCandles( - secid: string, - interval: '1h' | '24h', - from: string, - till: string, -): Promise<{ data: CandleItem[]; meta: ApiResponseMeta }> { - return request(`/api/v1/securities/bonds/${encodeURIComponent(secid)}/candles`, { - interval, - from, - till, - }); -} diff --git a/apps/frontend/src/shared/api/index.ts b/apps/frontend/src/shared/api/index.ts index 048384a..5d16891 100644 --- a/apps/frontend/src/shared/api/index.ts +++ b/apps/frontend/src/shared/api/index.ts @@ -5,10 +5,6 @@ export { setOnUnauthorized, getHealth, searchSecurities, - getBond, - getBondMarketData, - getBondHistory, - getBondCandles, } from './client'; export type { ApiResponseMeta,