From 6e64188d6057b2ace154cac75a1acfee52a88ac4 Mon Sep 17 00:00:00 2001 From: Documentation Bot Date: Mon, 10 Nov 2025 08:17:05 +0000 Subject: [PATCH] docs: Sync documentation from private repository --- PROJECT_STRUCTURE.md | 6 ++++-- ROADMAP.md | 1 + TECH_STACK.md | 34 +++++++++++++++++++++++++++------- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/PROJECT_STRUCTURE.md b/PROJECT_STRUCTURE.md index 6dda8c8..57c6851 100644 --- a/PROJECT_STRUCTURE.md +++ b/PROJECT_STRUCTURE.md @@ -1,10 +1,11 @@ # 라온누리 - 프로젝트 구조 -> 최종 업데이트: 2025-11-10 (다중 글조각 관리, 테마 레시피 추가) +> 최종 업데이트: 2025-11-10 (주제 변경 경고, 다중 글조각 관리) 초등학생을 위한 창작 글쓰기 교육 플랫폼 **주요 업데이트** (2025-11-10): +- ⚠️ 주제 변경 경고 Dialog (내용 초기화 알림, 임시 저장 안내) - 📝 다중 글조각 관리 시스템 (DraftManager, SavedDraftsDialog) - 💾 강화된 자동 저장 (2초 debounce, 저장 상태 표시) - 🎨 테마 슬롯 레시피 추가 (Dialog, Select 자동 배경색) @@ -24,7 +25,7 @@ |-------|------|------|---------| | **랜딩 페이지** | `/` | 서비스 소개 및 홍보 (비로그인 전용) | Hero, Features, How It Works, CTA, Footer
로그인 시 `/home`으로 자동 리다이렉트 | | **유저 홈** | `/home` | 인증된 사용자 대시보드 | 환영 메시지, 빠른 시작 대시보드, 최근 활동
비로그인 시 `/`로 자동 리다이렉트
정식 계정은 "내 팀" 카드 추가 표시 | -| **글쓰기** | `/write` | Tiptap 기반 순수 텍스트 에디터 + 주제 선택 | 주제 선택 (자유 주제/개인 주제/팀 주제)
제목 입력 (Editable), 순수 텍스트 에디터 (포맷팅 없음)
🆕 **다중 글조각 관리** (최대 10개), "새 글쓰기" / "저장된 글조각" 버튼
🆕 **강화된 자동 저장** (2초 debounce, 저장 상태 표시: 저장 중/저장됨)
템플릿 미리채우기 (제목/내용), Firestore 저장
비로그인도 접근 가능 (저장 시 로그인 유도) | +| **글쓰기** | `/write` | Tiptap 기반 순수 텍스트 에디터 + 주제 선택 | 주제 선택 (자유 주제/개인 주제/팀 주제)
🆕 **주제 변경 경고** (작성 중 내용 초기화 알림, 임시 저장 안내)
제목 입력 (Editable), 순수 텍스트 에디터 (포맷팅 없음)
🆕 **다중 글조각 관리** (최대 10개), "새 글쓰기" / "저장된 글조각" 버튼
🆕 **강화된 자동 저장** (2초 debounce, 저장 상태 표시: 저장 중/저장됨)
템플릿 미리채우기 (제목/내용), Firestore 저장
비로그인도 접근 가능 (저장 시 로그인 유도) | | **테스트** | `/test` | 팀 코드 시스템 테스트 페이지 | 팀 코드 생성/검증 테스트
팀/학생 생성 테스트
학생 로그인 테스트
authStore 상태 확인 | | **팀 목록** | `/team` | 내가 만든 팀 목록 (정식 계정 전용) | 팀 카드 그리드, 팀 정보 (코드, 멤버 수, 보안 설정)
"새 팀 만들기" 버튼 | | **팀 생성** | `/team/create` | 새 팀 만들기 (정식 계정 전용) | 팀 이름 입력, 팀 코드 자동 생성
🆕 **5단계 보안 레벨 선택** (RadioCard, 애니메이션)
🆕 **명단 관리 (Level 2/4)**: TagsInput으로 Enter/쉼표 입력
생성 후 `/team/[teamId]`로 이동 | @@ -135,6 +136,7 @@ - ✅ 순수 텍스트 입력 (포맷팅 없음) - ✅ 초등학생 친화적 단순 인터페이스 - ✅ 실시간 글자 수/단어 수 카운터 +- ✅ 🆕 **주제 변경 경고 Dialog** (작성 중 내용 초기화 알림 + 임시 저장 안내) - ✅ 🆕 **다중 글조각 관리** (최대 10개, FIFO 방식) - ✅ 🆕 **강화된 자동 저장** (2초 debounce, localStorage) - ✅ 🆕 **저장 상태 표시** (저장 중 → 저장됨 → 시간 표시) diff --git a/ROADMAP.md b/ROADMAP.md index f8aa974..892d7af 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -67,6 +67,7 @@ | **테마 슬롯 레시피** | **Dialog, Select slot recipe 추가 (자동 배경색, border, shadow)** | **2025-11-10** | | **TopicSelector 그룹핑** | **ItemGroup으로 자유/팀/개인 주제 구분, 팀 주제에 팀 이름 표시, Separator 추가** | **2025-11-10** | | **TopicOption 확장** | **teamName 필드 추가, TopicManager에서 팀 정보 조회 (동적 import)** | **2025-11-10** | +| **주제 변경 경고 Dialog** | **작성 중 내용이 있을 때 주제 변경 시 경고 Dialog 표시, 임시 저장 안내** | **2025-11-10** | ### 🚧 진행 중 diff --git a/TECH_STACK.md b/TECH_STACK.md index ed39d30..793f7d4 100644 --- a/TECH_STACK.md +++ b/TECH_STACK.md @@ -1,6 +1,6 @@ # 라온누리 - 기술 스택 및 개발 환경 -> 최종 업데이트: 2025-11-07 (타입 Enum화, 팀 주제 시스템 추가) +> 최종 업데이트: 2025-11-10 (주제 변경 경고 Dialog, 다중 글조각 관리) --- @@ -405,32 +405,52 @@ const nickname = teamManager.getMemberNickname(team, uid, user?.name); ``` 1. 사용자가 /write 페이지 접근 - ├─> LocalStorage에서 임시 저장된 글 불러오기 + ├─> LocalStorage에서 임시 저장된 글 불러오기 (DraftManager) └─> 에디터에 복원 -2. 글 작성 중 +2. 주제 선택 + ├─> 작성 중인 내용 없음: 바로 주제 변경 + 템플릿 적용 + └─> 작성 중인 내용 있음: + ├─> 🆕 **경고 Dialog 표시** + │ ├─> "제목과 내용이 모두 초기화됩니다" + │ └─> "임시 저장된 내용은 저장된 글조각에서 복구 가능" + ├─> 사용자 선택: + │ ├─> "취소": 주제 변경 취소 + │ └─> "확인하고 초기화": 주제 변경 + 내용 초기화 + └─> 확인 시 템플릿 미리채우기 (제목/내용) + +3. 글 작성 중 ├─> 제목: Editable 컴포넌트 (인라인 편집) ├─> 본문: Tiptap 순수 텍스트 에디터 (포맷팅 비활성화) │ └─> 초등학생을 위한 단순한 텍스트 입력에 집중 - ├─> 3초마다 LocalStorage에 자동 저장 + ├─> 2초마다 LocalStorage에 자동 저장 (DraftManager, FIFO) + ├─> 저장 상태 표시 (저장 중 → 저장됨 → 시간) └─> 하단 고정 버튼 (취소, 저장) -3. 저장 버튼 클릭 +4. 저장 버튼 클릭 ├─> 미인증 시: 로그인 다이얼로그 표시 └─> 인증 시: └─> writingManager.createWriting() 호출 ├─> 유효성 검사 (제목, 내용) ├─> 텍스트 통계 계산 (글자 수, 단어 수) ├─> Firestore에 저장 - └─> LocalStorage 임시 저장 삭제 후 /home 이동 + └─> LocalStorage draft 삭제 후 /home 이동 -4. WritingManager API +5. WritingManager API ├─> createWriting() - 새 글 작성 ├─> getWriting() - 글 조회 ├─> getUserWritings() - 사용자 글 목록 ├─> getRecentWritings() - 최근 글 목록 ├─> updateWriting() - 글 수정 └─> deleteWriting() - 글 삭제 + +6. DraftManager (클라이언트 전용) + ├─> saveDraft() - 글조각 저장 (최대 10개, FIFO) + ├─> getDraft() - 글조각 조회 + ├─> getAllDrafts() - 전체 글조각 목록 + ├─> deleteDraft() - 글조각 삭제 + ├─> setCurrentDraftId() - 현재 편집 중인 draft 설정 + └─> migrateLegacyDraft() - 기존 단일 draft 마이그레이션 ``` ### 4. 상태 관리 원칙