stock.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. 'use server';
  2. import { ResultDto } from '@/types/response/common';
  3. import { StockListResponse, StockDetailResponse, StockHistoryResponse } from '@/types/stock';
  4. import { fetchJson } from '@/lib/utils/server';
  5. // 종목 목록 조회 (시장 필터/검색/페이징)
  6. export async function fetchStockList(params: { q?: string; market?: string; page?: number; perPage?: number; sort?: string; order?: string }): Promise<ResultDto<StockListResponse>>
  7. {
  8. const queryParams = new URLSearchParams();
  9. queryParams.set('page', String(params.page ?? 1));
  10. queryParams.set('perPage', String(params.perPage ?? 20));
  11. if (params.q) queryParams.set('q', params.q);
  12. if (params.market) queryParams.set('market', params.market);
  13. if (params.sort) queryParams.set('sort', params.sort);
  14. if (params.order) queryParams.set('order', params.order);
  15. return await fetchJson<StockListResponse>(`/api/stocks?${queryParams.toString()}`, {
  16. method: 'GET',
  17. headers: {
  18. 'Accept': 'application/json'
  19. }
  20. });
  21. }
  22. // 종목 상세 조회 (마스터 + 최근 시세)
  23. export async function fetchStockDetail(code: string): Promise<ResultDto<StockDetailResponse>>
  24. {
  25. return await fetchJson<StockDetailResponse>(`/api/stocks/${encodeURIComponent(code)}`, {
  26. method: 'GET',
  27. headers: {
  28. 'Accept': 'application/json'
  29. }
  30. });
  31. }
  32. // 일별 시세 히스토리 조회 (페이징)
  33. export async function fetchStockHistory(code: string, params: { page?: number; perPage?: number; from?: string; to?: string }): Promise<ResultDto<StockHistoryResponse>>
  34. {
  35. const queryParams = new URLSearchParams();
  36. queryParams.set('page', String(params.page ?? 1));
  37. queryParams.set('perPage', String(params.perPage ?? 30));
  38. if (params.from) queryParams.set('from', params.from);
  39. if (params.to) queryParams.set('to', params.to);
  40. return await fetchJson<StockHistoryResponse>(`/api/stocks/${encodeURIComponent(code)}/history?${queryParams.toString()}`, {
  41. method: 'GET',
  42. headers: {
  43. 'Accept': 'application/json'
  44. }
  45. });
  46. }