docs: Sync documentation from private repository
This commit is contained in:
parent
aba8a74b24
commit
2248306446
44
API_SPEC.md
44
API_SPEC.md
@ -2,7 +2,49 @@
|
|||||||
|
|
||||||
라온누리 서버 API 명세서
|
라온누리 서버 API 명세서
|
||||||
|
|
||||||
## ⚠️ 최신 변경사항 (2025-11-27)
|
## ⚠️ 최신 변경사항 (2025-12-02)
|
||||||
|
|
||||||
|
### 📰 피드 시스템 API
|
||||||
|
- **GET /api/feed/daily-prompt**: 오늘의 글감 조회
|
||||||
|
- 매일 새로운 주제 제안 (AI 생성)
|
||||||
|
- 캐싱: 2분
|
||||||
|
- 응답: `{ prompt: string, category: string, keywords: string[] }`
|
||||||
|
- **GET /api/feed/inspirations**: 추천 영감 목록
|
||||||
|
- Vertex AI 생성 영감 (제목, 내용, 이미지)
|
||||||
|
- Unsplash API 이미지 (작가 크레딧 포함)
|
||||||
|
- 캐싱: 2분
|
||||||
|
- 응답: `Inspiration[]` (id, title, content, imageUrl, unsplashCredit)
|
||||||
|
- **GET /api/feed/weekly-stats**: 주간 통계 조회
|
||||||
|
- 주간 목표 및 진행률
|
||||||
|
- 권한: 로그인 필요
|
||||||
|
- 응답: `{ weeklyGoal: number, writingsThisWeek: number, ... }`
|
||||||
|
- **GET /api/feed/team-activity**: 팀 활동 조회
|
||||||
|
- 최근 팀 글 활동 요약
|
||||||
|
- 권한: 로그인 필요
|
||||||
|
- 응답: `TeamActivity[]`
|
||||||
|
- **POST /api/user/[uid]/weekly-goal**: 주간 목표 설정
|
||||||
|
- 권한: 본인만 수정 가능
|
||||||
|
- 요청: `{ weeklyGoal: number }`
|
||||||
|
- 응답: `{ success: true }`
|
||||||
|
|
||||||
|
### 🎨 AI 영감 생성 (Cloud Functions)
|
||||||
|
- **generateDailyInspirations** (Scheduled): 매일 새벽 자동 생성
|
||||||
|
- Vertex AI (Gemini 2.5 Flash)
|
||||||
|
- Unsplash API 이미지 검색 및 다운로드
|
||||||
|
- Firebase Storage 저장
|
||||||
|
- Firestore `inspirations` 컬렉션 저장
|
||||||
|
- 크레딧 정보 저장 (작가 이름, 프로필 링크)
|
||||||
|
- **generateInspirationsManual** (HTTP): 관리자 수동 생성
|
||||||
|
- POST 요청으로 즉시 생성
|
||||||
|
- 기존 영감 덮어쓰기 옵션
|
||||||
|
- Rate Limit: 1초 간격
|
||||||
|
|
||||||
|
### 📦 FeedManager
|
||||||
|
- **메서드**: `getDailyPrompt()`, `getInspirations()`, `getWeeklyStats()`, `getTeamActivity()`
|
||||||
|
- **캐싱**: 2분 TTL (BaseManager 캐싱 활용)
|
||||||
|
- **타입 시스템**: `Inspiration`, `DailyPrompt`, `WeeklyStats`, `TeamActivity`
|
||||||
|
|
||||||
|
## ⚠️ 변경사항 (2025-11-27)
|
||||||
|
|
||||||
### 🖼️ 팀 커버 이미지 API
|
### 🖼️ 팀 커버 이미지 API
|
||||||
- **POST /api/team/[teamId]/cover-image**: 팀 커버 이미지 업로드
|
- **POST /api/team/[teamId]/cover-image**: 팀 커버 이미지 업로드
|
||||||
|
|||||||
@ -1,10 +1,34 @@
|
|||||||
# 라온누리 - 프로젝트 구조
|
# 라온누리 - 프로젝트 구조
|
||||||
|
|
||||||
> 최종 업데이트: 2025-12-01 (글쓰기 모드 선택 기능)
|
> 최종 업데이트: 2025-12-02 (피드 시스템 및 영감 생성 기능)
|
||||||
|
|
||||||
초등학생을 위한 창작 글쓰기 교육 플랫폼
|
초등학생을 위한 창작 글쓰기 교육 플랫폼
|
||||||
|
|
||||||
**최신 업데이트** (2025-12-01):
|
**최신 업데이트** (2025-12-02):
|
||||||
|
- 📰 **피드 시스템 전체 구축** (`/write`)
|
||||||
|
- **4개 피드 컴포넌트**: TodayTopicCard (오늘의 글감), WeeklyGoalCard (주간 목표), RecentActivityCard (최근 활동), InspirationCard (추천 영감)
|
||||||
|
- **GlassCard 컴포넌트**: 글래스모피즘 UI (반투명 배경, 블러 효과)
|
||||||
|
- **CompactCardsRow**: 주간 목표 + 최근 활동 가로 배치
|
||||||
|
- **FeedManager**: 피드 데이터 관리 및 캐싱 (2분 TTL)
|
||||||
|
- **API Routes 4개**: `/api/feed/daily-prompt`, `/api/feed/inspirations`, `/api/feed/weekly-stats`, `/api/feed/team-activity`
|
||||||
|
- **타입 시스템**: Inspiration, DailyPrompt, WeeklyStats, TeamActivity
|
||||||
|
- 🎨 **AI 영감 생성 시스템**
|
||||||
|
- **Cloud Function (Scheduled)**: generateDailyInspirations (매일 새벽 자동 생성)
|
||||||
|
- **Cloud Function (HTTP)**: generateInspirationsManual (관리자 수동 생성)
|
||||||
|
- **Vertex AI 통합**: Gemini 2.5 Flash 모델 (@google/genai)
|
||||||
|
- **Unsplash API**: 이미지 검색, 다운로드, Storage 저장, 크레딧 정보
|
||||||
|
- **싱글톤 패턴**: Vertex AI 클라이언트 재사용 최적화
|
||||||
|
- **Rate Limit 대응**: API 호출 1초 간격 추가
|
||||||
|
- 🌟 **컴포넌트 개선**
|
||||||
|
- **InspirationCard**: vertical/horizontal 레이아웃, 이미지 로딩 스켈레톤
|
||||||
|
- **InspirationSection**: grid/horizontal 레이아웃, maxItems prop
|
||||||
|
- **ModeSelectionCard**: 드롭 쉐도우, 부드러운 전환 애니메이션
|
||||||
|
- **WeeklyGoalCard**: 스켈레톤 UI 개선
|
||||||
|
- 🔤 **Tlab신영복체 폰트 추가**
|
||||||
|
- **폰트 파일**: public/fonts/Tlab신영복체.ttf
|
||||||
|
- **적용 위치**: write 페이지 제목 텍스트
|
||||||
|
|
||||||
|
**업데이트** (2025-12-01):
|
||||||
- ✍️ **글쓰기 모드 선택 기능** (`/write`)
|
- ✍️ **글쓰기 모드 선택 기능** (`/write`)
|
||||||
- **모드 선택 화면**: 글부터 쓰기 / 그림부터 올리기 선택
|
- **모드 선택 화면**: 글부터 쓰기 / 그림부터 올리기 선택
|
||||||
- **URL 파라미터**: `?mode=wrt` (글부터), `?mode=img` (그림부터)
|
- **URL 파라미터**: `?mode=wrt` (글부터), `?mode=img` (그림부터)
|
||||||
@ -537,6 +561,54 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### 📁 `src/components/feed/` - 🆕 피드 시스템
|
||||||
|
|
||||||
|
| 컴포넌트 | 파일명 | 설명 | 상태 |
|
||||||
|
|---------|--------|------|------|
|
||||||
|
| **TodayTopicCard** | `TodayTopicCard.tsx` | 🆕 **오늘의 글감 카드** (매일 새로운 주제 제안, AI 생성) | ✅ 완료 |
|
||||||
|
| **WeeklyGoalCard** | `WeeklyGoalCard.tsx` | 🆕 **주간 목표 카드** (목표 글 수 설정, 진행률 표시) | ✅ 완료 |
|
||||||
|
| **RecentActivityCard** | `RecentActivityCard.tsx` | 🆕 **최근 활동 카드** (팀 활동 요약, 최근 글 표시) | ✅ 완료 |
|
||||||
|
| **InspirationCard** | `InspirationCard.tsx` | 🆕 **영감 카드** (AI 생성 영감, Unsplash 이미지, vertical/horizontal 레이아웃) | ✅ 완료 |
|
||||||
|
| **InspirationSection** | `InspirationSection.tsx` | 🆕 **영감 섹션** (영감 목록, grid/horizontal 레이아웃, maxItems 지원) | ✅ 완료 |
|
||||||
|
| **CompactCardsRow** | `CompactCardsRow.tsx` | 🆕 **컴팩트 카드 행** (주간 목표 + 최근 활동 가로 배치) | ✅ 완료 |
|
||||||
|
| **GlassCard** | `GlassCard.tsx` | 🆕 **글래스 카드** (반투명 배경, 블러 효과, 시각적 통일성) | ✅ 완료 |
|
||||||
|
| ~~**FeedCompactCard**~~ | ~~`FeedCompactCard.tsx`~~ | ~~피드 컴팩트 카드~~ | ❌ 삭제됨 (GlassCard로 대체) |
|
||||||
|
|
||||||
|
**주요 기능**:
|
||||||
|
- ✅ **4개 피드 타입** (오늘의 글감, 주간 목표, 최근 활동, 추천 영감)
|
||||||
|
- ✅ **FeedManager** (데이터 관리, 2분 캐싱)
|
||||||
|
- ✅ **API Routes 4개**
|
||||||
|
- `/api/feed/daily-prompt` - 오늘의 글감 조회
|
||||||
|
- `/api/feed/inspirations` - 추천 영감 목록
|
||||||
|
- `/api/feed/weekly-stats` - 주간 통계 조회
|
||||||
|
- `/api/feed/team-activity` - 팀 활동 조회
|
||||||
|
- ✅ **AI 영감 생성** (Gemini 2.5 Flash)
|
||||||
|
- Cloud Function: generateDailyInspirations (매일 새벽 자동 생성)
|
||||||
|
- HTTP Function: generateInspirationsManual (관리자 수동 생성)
|
||||||
|
- Unsplash API 이미지 검색 및 다운로드
|
||||||
|
- 크레딧 정보 저장 (작가 이름, 프로필 링크)
|
||||||
|
- ✅ **글래스모피즘 UI** (반투명 배경, 블러 효과)
|
||||||
|
- ✅ **로딩 스켈레톤** (모든 카드 지원)
|
||||||
|
- ✅ **다국어 지원** (ko/en/ja)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 📁 `src/components/write/` - 🆕 글쓰기 모드 선택
|
||||||
|
|
||||||
|
| 컴포넌트 | 파일명 | 설명 | 상태 |
|
||||||
|
|---------|--------|------|------|
|
||||||
|
| **ModeSelectionCard** | `ModeSelectionCard.tsx` | 🆕 **모드 선택 카드** (글부터/그림부터, 그라데이션, 애니메이션) | ✅ 완료 |
|
||||||
|
|
||||||
|
**주요 기능**:
|
||||||
|
- ✅ **2가지 모드** (글부터 쓰기, 그림부터 올리기)
|
||||||
|
- ✅ **그라데이션 배경** (모드별 색상)
|
||||||
|
- ✅ **캐릭터 이미지** (startWriting.png, uploadImage.png)
|
||||||
|
- ✅ **호버 애니메이션** (scale, shadow)
|
||||||
|
- ✅ **드롭 쉐도우** 효과
|
||||||
|
- ✅ **다국어 지원** (modeSelection namespace)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### 📁 `src/extensions/` - Tiptap Extensions
|
### 📁 `src/extensions/` - Tiptap Extensions
|
||||||
|
|
||||||
| Extension | 파일명 | 설명 | 상태 |
|
| Extension | 파일명 | 설명 | 상태 |
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# 라온누리 - 개발 로드맵
|
# 라온누리 - 개발 로드맵
|
||||||
|
|
||||||
> 최종 업데이트: 2025-12-01 (글쓰기 모드 선택 기능 추가)
|
> 최종 업데이트: 2025-12-02 (피드 기능 및 영감 시스템 추가)
|
||||||
|
|
||||||
초등학생을 위한 창작 글쓰기 교육 플랫폼 개발 계획
|
초등학생을 위한 창작 글쓰기 교육 플랫폼 개발 계획
|
||||||
|
|
||||||
@ -127,6 +127,12 @@
|
|||||||
| **가격정책 페이지** | **/pricing 페이지 신규 생성 (4개 플랜: Free, Classroom, Academy, School), 월간/연간 결제 토글 (20% 할인), 기능 비교 테이블, FAQ 섹션, 다국어 지원 (pricing namespace, ko/en/ja 40개 키), PricingCard 컴포넌트, Navbar "요금제" 메뉴 추가** | **2025-11-28** |
|
| **가격정책 페이지** | **/pricing 페이지 신규 생성 (4개 플랜: Free, Classroom, Academy, School), 월간/연간 결제 토글 (20% 할인), 기능 비교 테이블, FAQ 섹션, 다국어 지원 (pricing namespace, ko/en/ja 40개 키), PricingCard 컴포넌트, Navbar "요금제" 메뉴 추가** | **2025-11-28** |
|
||||||
| **댓글 시스템** | **Comment 데이터 모델 (계층 구조, 반응형), CommentList 컴포넌트 (댓글/답글 표시, 작성/수정/삭제, 낙관적 업데이트), CommentItem (아바타, 시간, 메뉴), CommentInput (자동 높이 조절), API Routes 구현 (GET/POST/PUT/DELETE), 서버 권한 체크 (작성자/글작성자/팀소유자), 실시간 업데이트 (SWR 또는 리패치)** | **2025-11-28** |
|
| **댓글 시스템** | **Comment 데이터 모델 (계층 구조, 반응형), CommentList 컴포넌트 (댓글/답글 표시, 작성/수정/삭제, 낙관적 업데이트), CommentItem (아바타, 시간, 메뉴), CommentInput (자동 높이 조절), API Routes 구현 (GET/POST/PUT/DELETE), 서버 권한 체크 (작성자/글작성자/팀소유자), 실시간 업데이트 (SWR 또는 리패치)** | **2025-11-28** |
|
||||||
| **글쓰기 모드 선택 기능** | **모드 선택 화면 추가 (글부터 쓰기 / 그림부터 올리기), URL 파라미터로 모드 관리 (?mode=wrt\|img), ImageDropzone 컴포넌트 (드래그앤드롭 이미지 업로드, 미리보기), ImageFirstLayout 컴포넌트 (이미지+에디터 2컬럼 레이아웃), pendingImageStore 유틸리티 (IndexedDB 기반 이미지 임시 저장, 새로고침해도 유지), 캐릭터 이미지 추가 (startWriting.png, uploadImage.png), 카드 디자인 개선 (그라데이션 배경, 상단 장식 바, 제목 배지, 호버 애니메이션, 이미지 크기 증가 180→240px), 다크 모드 지원, 다국어 지원 (modeSelection namespace, ko/en/ja)** | **2025-12-01** |
|
| **글쓰기 모드 선택 기능** | **모드 선택 화면 추가 (글부터 쓰기 / 그림부터 올리기), URL 파라미터로 모드 관리 (?mode=wrt\|img), ImageDropzone 컴포넌트 (드래그앤드롭 이미지 업로드, 미리보기), ImageFirstLayout 컴포넌트 (이미지+에디터 2컬럼 레이아웃), pendingImageStore 유틸리티 (IndexedDB 기반 이미지 임시 저장, 새로고침해도 유지), 캐릭터 이미지 추가 (startWriting.png, uploadImage.png), 카드 디자인 개선 (그라데이션 배경, 상단 장식 바, 제목 배지, 호버 애니메이션, 이미지 크기 증가 180→240px), 다크 모드 지원, 다국어 지원 (modeSelection namespace, ko/en/ja)** | **2025-12-01** |
|
||||||
|
| **Container 레이아웃 확장** | **Container maxW를 1200px → 1400px로 확장 (가용 공간 증가)** | **2025-12-02** |
|
||||||
|
| **피드 시스템 구축** | **피드 관련 타입 정의 (Inspiration, DailyPrompt, WeeklyStats, TeamActivity), API 엔드포인트 4개 추가 (daily-prompt, inspirations, weekly-stats, team-activity), 오늘의 글감 컴포넌트 (TodayTopicCard, 매일 새 주제 제안), 주간 목표 컴포넌트 (WeeklyGoalCard, 목표 글 수 설정/진행률 표시), 최근 활동 컴포넌트 (RecentActivityCard, 팀 활동 요약), 추천 영감 컴포넌트 (InspirationCard, grid/horizontal 레이아웃), FeedManager 추가 (데이터 관리, 캐싱 로직), 일일 영감 자동 생성 (Cloud Function - generateDailyInspirations, 매일 새벽 실행), Vertex AI 연동 (Gemini 2.5 Flash, 한국어 영감 생성), Unsplash API 연동 (이미지 검색, 다운로드, Storage 저장, 크레딧 정보 저장), CompactCardsRow 컴포넌트 (주간 목표+최근 활동 가로 배치), 글쓰기 페이지 통합 (모드 선택 후 피드 표시), 다국어 지원 (feed namespace 23개 키, ko/en/ja), FeedCompactCard 공통 컴포넌트** | **2025-12-02** |
|
||||||
|
| **영감 수동 생성 기능** | **HTTP 함수 추가 (POST /generateInspirationsManual, 관리자 수동 생성), Vertex AI 클라이언트 라이브러리 변경 (@google-cloud/vertexai → @google/genai v1.29.0), Vertex AI 모델 업그레이드 (gemini-1.5-flash → gemini-2.5-flash), Unsplash API 키를 Secret Manager로 관리, Vertex AI 클라이언트 초기화 로직 개선 (싱글톤 패턴, 인스턴스 재사용), Unsplash 이미지 검색 및 다운로드 로직 추가 (Storage 업로드), 영감 생성 시 Unsplash 크레딧 정보 저장 (InspirationCard에서 표시 제거), API 호출 간격 추가 (Rate limit 방지 1초), 기존 영감 덮어쓰기 옵션 (재요청 시 삭제), 에러 로깅 강화, functions/tsconfig.json skipLibCheck 옵션 추가** | **2025-12-02** |
|
||||||
|
| **GlassCard 컴포넌트 도입** | **GlassCard 컴포넌트 추가 (반투명 배경, 블러 효과, 시각적 통일성), FeedCompactCard → GlassCard로 전체 리팩토링, TodayTopicCard/WeeklyGoalCard/RecentActivityCard에 GlassCard 적용, 로딩 스켈레톤 UI 추가 (모든 카드), InspirationCard variant prop 추가 (vertical/horizontal), InspirationSection layout prop 추가 (grid/horizontal), ModeSelectionCards 컴포넌트 신규 추가 (글쓰기 모드 선택 카드), write 페이지 모드 선택 UI 개선, CompactCardsRow에서 compact prop 제거** | **2025-12-02** |
|
||||||
|
| **UI/UX 세부 개선** | **ModeSelectionCard 이미지 드롭 쉐도우 효과 추가, 전환 효과를 transform → all로 변경 (부드러운 애니메이션), 이미지 상하 패딩 조정** | **2025-12-02** |
|
||||||
|
| **Tlab신영복체 폰트 적용** | **Tlab신영복체.ttf 폰트 파일 추가 (public/fonts/), globals.css에 @font-face 추가, write 페이지 제목 텍스트에 폰트 적용, WeeklyGoalCard 스켈레톤 UI 개선 (헤더 및 진행 상태 레이아웃 간격 조정), GlassCard 내부 패딩 조정** | **2025-12-02** |
|
||||||
|
|
||||||
### 🚧 진행 중
|
### 🚧 진행 중
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user