62 lines
1.5 KiB
TypeScript
62 lines
1.5 KiB
TypeScript
|
|
import { useState, useCallback } from "react";
|
||
|
|
import type { KisRuntimeCredentials } from "@/features/dashboard/store/use-kis-runtime-store";
|
||
|
|
import type {
|
||
|
|
DashboardStockCashOrderRequest,
|
||
|
|
DashboardStockCashOrderResponse,
|
||
|
|
} from "@/features/dashboard/types/dashboard.types";
|
||
|
|
import { fetchOrderCash } from "@/features/dashboard/apis/kis-stock.api";
|
||
|
|
|
||
|
|
export function useOrder() {
|
||
|
|
const [isLoading, setIsLoading] = useState(false);
|
||
|
|
const [error, setError] = useState<string | null>(null);
|
||
|
|
const [result, setResult] = useState<DashboardStockCashOrderResponse | null>(
|
||
|
|
null,
|
||
|
|
);
|
||
|
|
|
||
|
|
const placeOrder = useCallback(
|
||
|
|
async (
|
||
|
|
request: DashboardStockCashOrderRequest,
|
||
|
|
credentials: KisRuntimeCredentials | null,
|
||
|
|
) => {
|
||
|
|
if (!credentials) {
|
||
|
|
setError("KIS API 자격 증명이 없습니다.");
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
setIsLoading(true);
|
||
|
|
setError(null);
|
||
|
|
setResult(null);
|
||
|
|
|
||
|
|
try {
|
||
|
|
const data = await fetchOrderCash(request, credentials);
|
||
|
|
setResult(data);
|
||
|
|
return data;
|
||
|
|
} catch (err) {
|
||
|
|
const message =
|
||
|
|
err instanceof Error
|
||
|
|
? err.message
|
||
|
|
: "주문 처리 중 오류가 발생했습니다.";
|
||
|
|
setError(message);
|
||
|
|
return null;
|
||
|
|
} finally {
|
||
|
|
setIsLoading(false);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
[],
|
||
|
|
);
|
||
|
|
|
||
|
|
const reset = useCallback(() => {
|
||
|
|
setError(null);
|
||
|
|
setResult(null);
|
||
|
|
setIsLoading(false);
|
||
|
|
}, []);
|
||
|
|
|
||
|
|
return {
|
||
|
|
placeOrder,
|
||
|
|
isLoading,
|
||
|
|
error,
|
||
|
|
result,
|
||
|
|
reset,
|
||
|
|
};
|
||
|
|
}
|