Files
AI/ontology_platform/web/frontend/src/hooks/useDomains.ts

22 lines
672 B
TypeScript
Raw Normal View History

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
import { useQuery } from "@tanstack/react-query";
import { domainsApi, DomainSummary } from "@/lib/api/domains";
import { ontologyApi, OntologyDetail } from "@/lib/api/ontology";
import { queryKeys } from "./queryKeys";
export function useDomains() {
return useQuery<DomainSummary[]>({
queryKey: queryKeys.domains.list(),
queryFn: () => domainsApi.list(),
staleTime: 1000 * 60 * 30,
});
}
export function useOntology(domain: string | undefined) {
return useQuery<OntologyDetail>({
queryKey: queryKeys.ontology.byDomain(domain ?? ""),
queryFn: () => ontologyApi.get(domain!),
enabled: Boolean(domain),
staleTime: 1000 * 60 * 30,
});
}