Files
stock-tracker/frontend/src/api/index.ts
T
2026-07-04 00:17:11 +08:00

48 lines
1.8 KiB
TypeScript

import axios from 'axios'
import type {
StockItem, KlineItem, RealtimeQuote,
Collection, CollectionListItem, StockInput,
ShareResponse, CollectionShare,
} from '../types'
const http = axios.create({ baseURL: '/api' })
// --- Stock ---
export const searchStocks = (q: string) =>
http.get<{ data: StockItem[] }>('/stocks/search', { params: { q, limit: 20 } }).then(r => r.data.data)
export const getKline = (code: string, months = 12) =>
http.get<{ data: KlineItem[] }>(`/stocks/kline/${code}`, { params: { months } }).then(r => r.data.data)
export const getRealtime = (code: string) =>
http.get<{ data: RealtimeQuote | null }>(`/stocks/realtime/${code}`).then(r => r.data.data)
// --- Collection ---
export const listCollections = () =>
http.get<CollectionListItem[]>('/collections').then(r => r.data)
export const getCollection = (id: number) =>
http.get<Collection>(`/collections/${id}`).then(r => r.data)
export const createCollection = (name: string, stocks: StockInput[]) =>
http.post<Collection>('/collections', { name, stocks }).then(r => r.data)
export const updateCollection = (id: number, name: string) =>
http.put<Collection>(`/collections/${id}`, { name }).then(r => r.data)
export const deleteCollection = (id: number) =>
http.delete(`/collections/${id}`).then(r => r.data)
export const addStock = (colId: number, data: StockInput) =>
http.post(`/collections/${colId}/stocks`, data).then(r => r.data)
export const removeStock = (colId: number, code: string) =>
http.delete(`/collections/${colId}/stocks/${code}`).then(r => r.data)
export const shareCollection = (id: number) =>
http.post<ShareResponse>(`/collections/${id}/share`).then(r => r.data)
// --- Share ---
export const getSharedCollection = (shortCode: string) =>
http.get<CollectionShare>(`/s/${shortCode}`).then(r => r.data)