stock.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. 'use server';
  2. import { ResultDto } from '@/types/response/common';
  3. import { StockListResponse, StockDetailResponse, StockHistoryResponse } from '@/types/stock';
  4. import { fetchPublicJson } from '@/lib/utils/publicFetch';
  5. // 종목 T+1 공개 데이터 — 익명 공통·일 1회 갱신. Data Cache(tag 'stock-data', 10분 재검증).
  6. const STOCK_REVALIDATE = 600;
  7. const STOCK_TAGS = ['stock-data'];
  8. // 종목 목록 조회 (시장 필터/검색/페이징)
  9. export async function fetchStockList(params: { q?: string; market?: string; page?: number; perPage?: number; sort?: string; order?: string }): Promise<ResultDto<StockListResponse>>
  10. {
  11. const queryParams = new URLSearchParams();
  12. queryParams.set('page', String(params.page ?? 1));
  13. queryParams.set('perPage', String(params.perPage ?? 20));
  14. if (params.q) queryParams.set('q', params.q);
  15. if (params.market) queryParams.set('market', params.market);
  16. if (params.sort) queryParams.set('sort', params.sort);
  17. if (params.order) queryParams.set('order', params.order);
  18. return await fetchPublicJson<StockListResponse>(`/api/stocks?${queryParams.toString()}`, { revalidate: STOCK_REVALIDATE, tags: STOCK_TAGS });
  19. }
  20. // 종목 상세 조회 (마스터 + 최근 시세)
  21. export async function fetchStockDetail(code: string): Promise<ResultDto<StockDetailResponse>>
  22. {
  23. return await fetchPublicJson<StockDetailResponse>(`/api/stocks/${encodeURIComponent(code)}`, { revalidate: STOCK_REVALIDATE, tags: STOCK_TAGS });
  24. }
  25. // 일별 시세 히스토리 조회 (페이징)
  26. export async function fetchStockHistory(code: string, params: { page?: number; perPage?: number; from?: string; to?: string }): Promise<ResultDto<StockHistoryResponse>>
  27. {
  28. const queryParams = new URLSearchParams();
  29. queryParams.set('page', String(params.page ?? 1));
  30. queryParams.set('perPage', String(params.perPage ?? 30));
  31. if (params.from) queryParams.set('from', params.from);
  32. if (params.to) queryParams.set('to', params.to);
  33. return await fetchPublicJson<StockHistoryResponse>(`/api/stocks/${encodeURIComponent(code)}/history?${queryParams.toString()}`, { revalidate: STOCK_REVALIDATE, tags: STOCK_TAGS });
  34. }