diff --git a/PROJECT_STRUCTURE.md b/PROJECT_STRUCTURE.md index 3fe1cb3..52e5d0d 100644 --- a/PROJECT_STRUCTURE.md +++ b/PROJECT_STRUCTURE.md @@ -23,7 +23,7 @@ | **글쓰기** | `/write` | Tiptap 기반 순수 텍스트 에디터 + 주제 선택 | 주제 선택 (자유 주제/개인 주제)
제목 입력 (Editable), 순수 텍스트 에디터 (포맷팅 없음)
실시간 글자수/단어수, 자동 저장 (LocalStorage 3초마다)
템플릿 미리채우기 (제목/내용), Firestore 저장
비로그인도 접근 가능 (저장 시 로그인 유도) | | **테스트** | `/test` | 팀 코드 시스템 테스트 페이지 | 팀 코드 생성/검증 테스트
팀/학생 생성 테스트
학생 로그인 테스트
authStore 상태 확인 | | **팀 목록** | `/team` | 내가 만든 팀 목록 (정식 계정 전용) | 팀 카드 그리드, 팀 정보 (코드, 멤버 수, 보안 설정)
"새 팀 만들기" 버튼 | -| **팀 생성** | `/team/create` | 새 팀 만들기 (정식 계정 전용) | 팀 이름 입력, 팀 코드 자동 생성
보안 모드 선택 (simple/normal/open)
상세 설정 (PIN, 자유 가입)
생성 후 `/team/[teamId]/manage`로 이동 | +| **팀 생성** | `/team/create` | 새 팀 만들기 (정식 계정 전용) | 팀 이름 입력, 팀 코드 자동 생성
🆕 **5단계 보안 레벨 선택** (RadioCard, 애니메이션)
🆕 **명단 관리 (Level 2/4)**: TagsInput으로 Enter/쉼표 입력
생성 후 `/team/[teamId]`로 이동 | | **팀 멤버 페이지** | `/team/[teamId]` | 팀 멤버용 페이지 (멤버/소유자 모두 접근) | 팀 정보, 팀 코드 복사, 멤버 목록
소유자는 "팀 관리" 버튼 표시
팀 코드 로그인 후 기본 이동 페이지 | | **팀 관리** | `/team/[teamId]/manage` | 팀 관리 페이지 (소유자 전용) | 팀 정보 및 코드, 보안 설정 표시
**팀 주제 관리 (생성/삭제)**
멤버 목록 및 관리
"멤버 페이지 보기" 버튼 | @@ -146,6 +146,14 @@ | 컴포넌트 | 파일명 | 설명 | 상태 | |---------|--------|------|------| | **TeamTopicManager** | `TeamTopicManager.tsx` | 팀 주제 목록 및 생성/삭제 UI | ✅ 완료 | +| **SecurityLevelSelector** | `SecurityLevelSelector.tsx` | 🆕 5단계 보안 레벨 선택 (RadioCard, framer-motion 애니메이션) | ✅ 완료 | +| **AllowListManager** | `AllowListManager.tsx` | 🆕 명단 관리 (이름/이메일 추가/제거, TagsInput) | ✅ 완료 | + +**주요 기능** (2025-11-10): +- ✅ SecurityLevelSelector: RadioCard 기반, 선택 시 추가 UI 애니메이션으로 표시 +- ✅ AllowListManager: Level 2/4용 명단 관리, Enter/쉼표로 구분 입력 +- ✅ 그라데이션 배경 (RadioCard와 자연스럽게 연결) +- ✅ react-icons/lu 사용 (이모티콘 제거) --- @@ -212,8 +220,9 @@ | 타입 | 파일명 | 설명 | 상태 | |------|--------|------|------| -| **Team 타입** | `team.ts` | 팀 데이터 모델 (memberUids, members Map), TeamSecurityMode Enum (simple/open) | ✅ 완료 | -| **User 타입** | `user.ts` | 사용자 데이터 모델 (nicknames Map) **[NEW]** | ✅ 완료 | +| **Team 타입** | `team.ts` | 🆕 팀 데이터 모델 (members Map), **TeamSecurityLevel Enum (1-5)** | ✅ 완료 | +| **FirestoreUser 타입** | `firestoreUser.ts` | 🆕 **FirestoreUser** (DB 저장용), **User** (UI용) 분리 | ✅ 완료 | +| ~~**User 타입**~~ | ~~`user.ts`~~ | ~~사용자 데이터 모델~~ | ⚠️ Deprecated (firestoreUser.ts로 변경) | | ~~**Student 타입**~~ | ~~`student.ts`~~ | ~~학생 데이터 모델~~ | ⚠️ Deprecated (user.ts로 대체) | | **Topic 타입** | `topic.ts` | 주제 데이터 모델, TopicCategory/Difficulty/OwnerType Enum, 팀 주제 유틸 함수 | ✅ 완료 | | **API 공통 타입** | `api.ts` | ApiResponse, ApiError, HttpMethod Enum | ✅ 완료 | @@ -296,7 +305,9 @@ src/ │ │ ├── CreateTopicDialog.tsx # ✅ 개인 주제 생성 │ │ └── CreateTeamTopicDialog.tsx # ✅ 팀 주제 생성 │ ├── team/ # ✅ 팀 관련 -│ │ └── TeamTopicManager.tsx # ✅ 팀 주제 관리 +│ │ ├── TeamTopicManager.tsx # ✅ 팀 주제 관리 +│ │ ├── SecurityLevelSelector.tsx # 🆕 보안 레벨 선택 (RadioCard, 애니메이션) +│ │ └── AllowListManager.tsx # 🆕 명단 관리 (TagsInput) │ └── [미구현] │ ├── lesson/ # 학습 컴포넌트 │ ├── sticker/ # 스티커 컴포넌트 diff --git a/ROADMAP.md b/ROADMAP.md index 5117349..f0cc323 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -57,6 +57,12 @@ | **User 타입 최소화** | **FirestoreUser/User 분리, Firebase Auth를 Single Source of Truth로, 데이터 중복 제거** | **2025-11-10** | | **닉네임 저장 위치 변경** | **users.nicknames → team.members[uid].nickname 이동, TeamMember 타입 확장** | **2025-11-10** | | **authStore DB 연동** | **combineUserData로 Firebase Auth + Firestore 자동 결합, userManager.getUser() 활용** | **2025-11-10** | +| **memberUids 제거** | **Team.memberUids 필드 제거, Object.keys(members) 사용, 데이터 중복 제거** | **2025-11-10** | +| **SecurityLevelSelector** | **RadioCard 기반 보안 레벨 선택 UI, framer-motion 애니메이션, 그라데이션 배경** | **2025-11-10** | +| **AllowListManager** | **명단 관리 컴포넌트 (TagsInput), Enter/쉼표 구분 입력 지원** | **2025-11-10** | +| **API Routes 구현** | **보안 레벨 변경, 명단 관리 API (RESTful 원칙), POST/DELETE 메서드 구분** | **2025-11-10** | +| **lib/server/team 확장** | **updateTeamSecurityLevel, add/removeAllowedName/Email, 자동 명단 생성** | **2025-11-10** | +| **react-icons 전환** | **이모티콘 → react-icons/lu로 전환 (LuGlobe, LuClipboardList 등)** | **2025-11-10** | ### 🚧 진행 중