/** * @file app/api/kis/indices/route.ts * @description 국내 KOSPI/KOSDAQ 지수 조회 API * * @description [주요 책임] * - 로그인 및 KIS API 설정 여부 확인 * - `getDomesticDashboardIndices` 함수를 호출하여 지수 데이터를 조회 * - 조회된 데이터를 클라이언트에 JSON 형식으로 반환 */ import { NextResponse } from "next/server"; import { hasKisConfig } from "@/lib/kis/config"; import { getDomesticDashboardIndices } from "@/lib/kis/dashboard"; import { hasKisApiSession } from "@/app/api/kis/_session"; import { createKisApiErrorResponse, KIS_API_ERROR_CODE, toKisApiErrorMessage, } from "@/app/api/kis/_response"; import { readKisCredentialsFromHeaders } from "@/app/api/kis/domestic/_shared"; export async function GET(request: Request) { const hasSession = await hasKisApiSession(); if (!hasSession) { return createKisApiErrorResponse({ status: 401, code: KIS_API_ERROR_CODE.AUTH_REQUIRED, message: "로그인이 필요합니다.", }); } const credentials = readKisCredentialsFromHeaders(request.headers); if (!hasKisConfig(credentials)) { return createKisApiErrorResponse({ status: 400, code: KIS_API_ERROR_CODE.CREDENTIAL_REQUIRED, message: "KIS API 키 설정이 필요합니다.", }); } try { const indices = await getDomesticDashboardIndices(credentials); return NextResponse.json( { indices, fetchedAt: new Date().toISOString(), }, { headers: { "cache-control": "no-store", }, }, ); } catch (error) { return createKisApiErrorResponse({ status: 500, code: KIS_API_ERROR_CODE.UPSTREAM_FAILURE, message: toKisApiErrorMessage( error, "지수 조회 중 오류가 발생했습니다.", ), }); } }