2026-05-12 19:40:31 +09:00
|
|
|
import { defineConfig } from "vite";
|
2026-05-14 13:52:45 +09:00
|
|
|
import react from "@vitejs/plugin-react";
|
2026-05-14 23:37:21 +09:00
|
|
|
import path from "node:path";
|
2026-05-12 19:40:31 +09:00
|
|
|
|
2026-05-20 13:21:08 +09:00
|
|
|
const BACKEND = "http://127.0.0.1:8001";
|
2026-05-12 19:40:31 +09:00
|
|
|
const PROXY_PREFIXES = [
|
|
|
|
|
"/projects",
|
|
|
|
|
"/ontology",
|
2026-05-14 13:52:45 +09:00
|
|
|
"/ontologies",
|
Phase 1.1: 프로젝트 생성 — 폼 기반 도메인 선택 + 인라인 JSON 생성
백엔드 (crawler_platform/app/api/routes.py):
- POST /projects/inline 추가: 파일 시스템 의존 없이 JSON 본문으로 ProjectConfig 인라인 생성
- CreateProjectInlineRequest + InlineSourceConfig Pydantic 모델
- GET /domains 추가: 미리 정의된 도메인 목록 (perfume, tea, coffee, candle, supplement, gift)
- 각 도메인의 entity_types, predicates, attribute_count 반환
프론트엔드 API 레이어 (src/lib/api/):
- domains.ts: domainsApi.list + Zod 스키마
- ontology.ts: ontologyApi.get(domain) + Zod 스키마
- projects.ts: createInline() 메서드 + CreateProjectInlineRequest 타입
TanStack Query 훅 (src/hooks/):
- useDomains: 도메인 목록 (30분 staleTime)
- useOntology(domain): 도메인 상세
- useCreateProjectInline: 인라인 생성 mutation + projects 캐시 무효화
- queryKeys에 domains, ontology 키 팩토리 추가
UI 프리미티브 (src/components/ui/):
- input.tsx, label.tsx, textarea.tsx
OnboardingPage 완전 교체 (src/pages/OnboardingPage.tsx):
- react-hook-form + zod 검증 (project_name 정규식, 도메인 필수)
- 도메인 카드 그리드 선택 (entity/predicate 개수 미리보기)
- 백엔드 /projects/inline POST → 성공 시 sonner 토스트 + /sources/{name}으로 이동
- 로딩/에러/재시도 UI
기타:
- Vite proxy에 /domains prefix 추가
- i18n locale 키 onboarding.* 추가 (한/영)
다음 단계: Phase 1.2 — 온톨로지 엔티티/클레임 직접 입력 + URL 추출
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 14:46:03 +09:00
|
|
|
"/domains",
|
2026-05-12 19:40:31 +09:00
|
|
|
"/extractors",
|
|
|
|
|
"/crawl",
|
|
|
|
|
"/crawl-site",
|
|
|
|
|
"/discover",
|
|
|
|
|
"/research",
|
|
|
|
|
"/recommend",
|
|
|
|
|
"/claims",
|
|
|
|
|
"/entities",
|
|
|
|
|
"/health",
|
2026-05-20 13:21:08 +09:00
|
|
|
"/info",
|
|
|
|
|
"/process",
|
|
|
|
|
"/api/v1",
|
2026-05-14 13:52:45 +09:00
|
|
|
"/api/v1/graph",
|
|
|
|
|
"/api/v1/llm",
|
2026-05-12 19:40:31 +09:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
export default defineConfig({
|
2026-05-14 13:52:45 +09:00
|
|
|
plugins: [react()],
|
2026-05-12 19:40:31 +09:00
|
|
|
root: ".",
|
|
|
|
|
base: "/static/",
|
2026-05-14 23:37:21 +09:00
|
|
|
resolve: {
|
|
|
|
|
alias: {
|
|
|
|
|
"@": path.resolve(process.cwd(), "src"),
|
|
|
|
|
},
|
|
|
|
|
},
|
2026-05-12 19:40:31 +09:00
|
|
|
build: {
|
|
|
|
|
outDir: "../static",
|
|
|
|
|
emptyOutDir: true,
|
|
|
|
|
assetsDir: "assets",
|
|
|
|
|
sourcemap: true,
|
|
|
|
|
},
|
|
|
|
|
server: {
|
2026-05-20 13:21:08 +09:00
|
|
|
port: 8000,
|
2026-05-12 19:40:31 +09:00
|
|
|
strictPort: true,
|
|
|
|
|
proxy: Object.fromEntries(
|
|
|
|
|
PROXY_PREFIXES.map((prefix) => [prefix, { target: BACKEND, changeOrigin: false }]),
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
});
|