사주 입력 (/saju)
사주 정보를 입력하는 흐름입니다. 로그인 여부에 따라 서버 저장과 임시저장(draft) 경로가 나뉩니다.
관련 경로
app/(main)/saju/page.tsx
widgets/saju-input/
features/saju-input/
├── hooks/ ← 폼 상태, 스텝, 검증, 제출 로직
├── model/ ← 응답 가공, 파생 계산
├── type/
├── form/client/ ← 폼 UI (클라이언트 컴포넌트)
└── step/ ← 스텝별 UI
entities/saju/
app/api/saju/route.ts
app/api/saju/draft/route.ts
입력 흐름
/saju 진입
│
├── 로그인 상태 → POST /api/saju → 저장 후 /saju/result 이동
│
└── 미로그인 → POST /api/saju/draft → localStorage 임시저장
→ 로그인 후 draft 복원 → 서버 저장
폼 구조
사주 입력은 스텝 기반 폼입니다. 스텝 상태, 검증, 제출은 모두 features/saju-input/hooks에서 관리합니다.
// ✅ 올바른 구조
// hooks/useSajuInputForm.ts → 상태·검증·제출
// form/client/ → props 기반 렌더링만
// page.tsx → 위젯 조립
체크리스트
작업 전 확인 사항:
- 서버 제출인지 로컬 draft 저장인지 구분했는가
/saju/result로 넘어가는 데이터 전달 방식을 확인했는가- 인증 쿠키(
saju_access_token) 요구 여부를 확인했는가 - API 응답 가공을 UI 컴포넌트에 직접 넣지 않았는가