임시커밋
This commit is contained in:
@@ -5,12 +5,12 @@
|
||||
|
||||
import { redirect } from "next/navigation";
|
||||
import { createClient } from "@/utils/supabase/server";
|
||||
import { DashboardContainer } from "@/features/dashboard/components/DashboardContainer";
|
||||
|
||||
/**
|
||||
* 대시보드 페이지
|
||||
* @returns DashboardContainer UI
|
||||
* @see features/dashboard/components/DashboardContainer.tsx 클라이언트 상호작용(검색/시세/차트)은 해당 컴포넌트가 담당합니다.
|
||||
* 대시보드 페이지 (향후 확장용)
|
||||
* @returns 빈 대시보드 안내 UI
|
||||
* @see app/(main)/trade/page.tsx 트레이딩 기능은 `/trade` 경로에서 제공합니다.
|
||||
* @see app/(main)/settings/page.tsx KIS 인증 설정은 `/settings` 경로에서 제공합니다.
|
||||
*/
|
||||
export default async function DashboardPage() {
|
||||
// 상태 정의: 서버에서 세션을 먼저 확인해 비로그인 접근을 차단합니다.
|
||||
@@ -21,5 +21,17 @@ export default async function DashboardPage() {
|
||||
|
||||
if (!user) redirect("/login");
|
||||
|
||||
return <DashboardContainer />;
|
||||
return (
|
||||
<section className="mx-auto flex h-full w-full max-w-5xl flex-col justify-center p-6">
|
||||
{/* ========== DASHBOARD PLACEHOLDER ========== */}
|
||||
<div className="rounded-2xl border border-brand-200 bg-background p-8 shadow-sm dark:border-brand-800/45 dark:bg-brand-900/14">
|
||||
<h1 className="text-2xl font-semibold tracking-tight text-foreground">
|
||||
대시보드
|
||||
</h1>
|
||||
<p className="mt-2 text-sm text-muted-foreground">
|
||||
이 페이지는 향후 포트폴리오 요약과 리포트 기능을 위한 확장 영역입니다.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
26
app/(main)/settings/page.tsx
Normal file
26
app/(main)/settings/page.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* @file app/(main)/settings/page.tsx
|
||||
* @description 로그인 사용자 전용 설정 페이지(Server Component)
|
||||
*/
|
||||
|
||||
import { redirect } from "next/navigation";
|
||||
import { SettingsContainer } from "@/features/settings/components/SettingsContainer";
|
||||
import { createClient } from "@/utils/supabase/server";
|
||||
|
||||
/**
|
||||
* 설정 페이지
|
||||
* @returns SettingsContainer UI
|
||||
* @see features/settings/components/SettingsContainer.tsx KIS 인증 설정 UI를 제공합니다.
|
||||
*/
|
||||
export default async function SettingsPage() {
|
||||
// 상태 정의: 서버에서 세션을 먼저 확인해 비로그인 접근을 차단합니다.
|
||||
const supabase = await createClient();
|
||||
const {
|
||||
data: { user },
|
||||
} = await supabase.auth.getUser();
|
||||
|
||||
if (!user) redirect("/login");
|
||||
|
||||
return <SettingsContainer />;
|
||||
}
|
||||
|
||||
26
app/(main)/trade/page.tsx
Normal file
26
app/(main)/trade/page.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* @file app/(main)/trade/page.tsx
|
||||
* @description 로그인 사용자 전용 트레이딩 페이지(Server Component)
|
||||
*/
|
||||
|
||||
import { redirect } from "next/navigation";
|
||||
import { TradeContainer } from "@/features/trade/components/TradeContainer";
|
||||
import { createClient } from "@/utils/supabase/server";
|
||||
|
||||
/**
|
||||
* 트레이딩 페이지
|
||||
* @returns TradeContainer UI
|
||||
* @see features/trade/components/TradeContainer.tsx 종목 검색/차트/호가/주문 기능을 제공합니다.
|
||||
*/
|
||||
export default async function TradePage() {
|
||||
// 상태 정의: 서버에서 세션을 먼저 확인해 비로그인 접근을 차단합니다.
|
||||
const supabase = await createClient();
|
||||
const {
|
||||
data: { user },
|
||||
} = await supabase.auth.getUser();
|
||||
|
||||
if (!user) redirect("/login");
|
||||
|
||||
return <TradeContainer />;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type {
|
||||
DashboardChartTimeframe,
|
||||
DashboardStockChartResponse,
|
||||
} from "@/features/dashboard/types/dashboard.types";
|
||||
} from "@/features/trade/types/trade.types";
|
||||
import type { KisCredentialInput } from "@/lib/kis/config";
|
||||
import { hasKisConfig, normalizeTradingEnv } from "@/lib/kis/config";
|
||||
import { getDomesticChart } from "@/lib/kis/domestic";
|
||||
|
||||
@@ -3,7 +3,7 @@ import { executeOrderCash } from "@/lib/kis/trade";
|
||||
import {
|
||||
DashboardStockCashOrderRequest,
|
||||
DashboardStockCashOrderResponse,
|
||||
} from "@/features/dashboard/types/dashboard.types";
|
||||
} from "@/features/trade/types/trade.types";
|
||||
import {
|
||||
KisCredentialInput,
|
||||
hasKisConfig,
|
||||
|
||||
@@ -3,7 +3,7 @@ import {
|
||||
getDomesticOrderBook,
|
||||
KisDomesticOrderBookOutput,
|
||||
} from "@/lib/kis/domestic";
|
||||
import { DashboardStockOrderBookResponse } from "@/features/dashboard/types/dashboard.types";
|
||||
import { DashboardStockOrderBookResponse } from "@/features/trade/types/trade.types";
|
||||
import {
|
||||
KisCredentialInput,
|
||||
hasKisConfig,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { KOREAN_STOCK_INDEX } from "@/features/dashboard/data/korean-stocks";
|
||||
import type { DashboardStockOverviewResponse } from "@/features/dashboard/types/dashboard.types";
|
||||
import { KOREAN_STOCK_INDEX } from "@/features/trade/data/korean-stocks";
|
||||
import type { DashboardStockOverviewResponse } from "@/features/trade/types/trade.types";
|
||||
import type { KisCredentialInput } from "@/lib/kis/config";
|
||||
import { hasKisConfig, normalizeTradingEnv } from "@/lib/kis/config";
|
||||
import { getDomesticOverview } from "@/lib/kis/domestic";
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { KOREAN_STOCK_INDEX } from "@/features/dashboard/data/korean-stocks";
|
||||
import { KOREAN_STOCK_INDEX } from "@/features/trade/data/korean-stocks";
|
||||
import type {
|
||||
DashboardStockSearchItem,
|
||||
DashboardStockSearchResponse,
|
||||
KoreanStockIndexItem,
|
||||
} from "@/features/dashboard/types/dashboard.types";
|
||||
} from "@/features/trade/types/trade.types";
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
|
||||
const SEARCH_LIMIT = 10;
|
||||
@@ -15,7 +15,7 @@ const SEARCH_LIMIT = 10;
|
||||
* - [레이어] API Route
|
||||
* - [사용자 행동] 대시보드 검색창 엔터/검색 버튼 클릭 시 호출
|
||||
* - [데이터 흐름] dashboard-main.tsx -> /api/kis/domestic/search -> KOREAN_STOCK_INDEX 필터/정렬 -> JSON 응답
|
||||
* - [연관 파일] features/dashboard/data/korean-stocks.ts, features/dashboard/components/dashboard-main.tsx
|
||||
* - [연관 파일] features/trade/data/korean-stocks.ts, features/trade/components/dashboard-main.tsx
|
||||
* @author jihoon87.lee
|
||||
*/
|
||||
|
||||
@@ -23,7 +23,7 @@ const SEARCH_LIMIT = 10;
|
||||
* 국내주식 검색 API
|
||||
* @param request query string의 q(검색어) 사용
|
||||
* @returns 종목 검색 결과 목록
|
||||
* @see features/dashboard/components/dashboard-main.tsx 검색 폼에서 호출합니다.
|
||||
* @see features/trade/components/dashboard-main.tsx 검색 폼에서 호출합니다.
|
||||
*/
|
||||
export async function GET(request: NextRequest) {
|
||||
// [Step 1] query string에서 검색어(q)를 읽고 공백을 제거합니다.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { DashboardKisRevokeResponse } from "@/features/dashboard/types/dashboard.types";
|
||||
import type { DashboardKisRevokeResponse } from "@/features/trade/types/trade.types";
|
||||
import { normalizeTradingEnv } from "@/lib/kis/config";
|
||||
import {
|
||||
parseKisCredentialRequest,
|
||||
@@ -14,7 +14,7 @@ import { NextRequest, NextResponse } from "next/server";
|
||||
|
||||
/**
|
||||
* @description KIS 액세스 토큰 폐기
|
||||
* @see features/dashboard/components/auth/KisAuthForm.tsx
|
||||
* @see features/settings/components/KisAuthForm.tsx
|
||||
*/
|
||||
export async function POST(request: NextRequest) {
|
||||
const credentials = await parseKisCredentialRequest(request);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { DashboardKisValidateResponse } from "@/features/dashboard/types/dashboard.types";
|
||||
import type { DashboardKisValidateResponse } from "@/features/trade/types/trade.types";
|
||||
import { normalizeTradingEnv } from "@/lib/kis/config";
|
||||
import {
|
||||
parseKisCredentialRequest,
|
||||
@@ -14,7 +14,7 @@ import { NextRequest, NextResponse } from "next/server";
|
||||
|
||||
/**
|
||||
* @description 액세스 토큰 발급 성공 여부로 API 키를 검증합니다.
|
||||
* @see features/dashboard/components/auth/KisAuthForm.tsx
|
||||
* @see features/settings/components/KisAuthForm.tsx
|
||||
*/
|
||||
export async function POST(request: NextRequest) {
|
||||
const credentials = await parseKisCredentialRequest(request);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { DashboardKisWsApprovalResponse } from "@/features/dashboard/types/dashboard.types";
|
||||
import type { DashboardKisWsApprovalResponse } from "@/features/trade/types/trade.types";
|
||||
import { getKisApprovalKey, resolveKisWebSocketUrl } from "@/lib/kis/approval";
|
||||
import { normalizeTradingEnv } from "@/lib/kis/config";
|
||||
import {
|
||||
@@ -14,7 +14,7 @@ import { NextRequest, NextResponse } from "next/server";
|
||||
|
||||
/**
|
||||
* @description 실시간 웹소켓 연결 정보를 발급합니다.
|
||||
* @see features/dashboard/hooks/useKisTradeWebSocket.ts
|
||||
* @see features/trade/hooks/useKisTradeWebSocket.ts
|
||||
*/
|
||||
export async function POST(request: NextRequest) {
|
||||
const credentials = await parseKisCredentialRequest(request);
|
||||
|
||||
Reference in New Issue
Block a user