diff --git a/API_SPEC.md b/API_SPEC.md index f8a8554..086ec27 100644 --- a/API_SPEC.md +++ b/API_SPEC.md @@ -221,6 +221,71 @@ interface ApiError { --- +## Image Generation Check API + +### POST /api/check-image-generation + +**설명**: 이미지 생성 가능 여부 확인 (팀/개인 글쓰기에 따라 다른 검증) + +**인증**: 필수 + +**Request Body**: +```typescript +{ + writingId: string; // 글 ID +} +``` + +**Response**: +```typescript +{ + success: true, + data: { + allowed: boolean; // 이미지 생성 가능 여부 + reason?: ImageGenerationDisableReason; // 비활성화 사유 + remaining?: number; // 남은 횟수 + limit?: number; // 전체 한도 (-1은 무제한) + isTeamWriting: boolean; // 팀 글쓰기 여부 + } +} +``` + +**ImageGenerationDisableReason**: +```typescript +type ImageGenerationDisableReason = + | "PLAN_NOT_SUPPORTED" // Pro 플랜 이상 필요 + | "LIMIT_EXCEEDED" // 개인 월간 한도 초과 + | "TEAM_AI_DISABLED" // 팀 AI 비활성화 + | "TEAM_LIMIT_EXCEEDED" // 팀 월간 한도 초과 + | "DAILY_LIMIT_EXCEEDED"; // 팀원 일일 한도 초과 +``` + +**검증 로직**: +1. **팀 글쓰기** (`writing.teamId` 존재): + - `canTeamUseImageGeneration(teamId, userId)` 호출 + - 팀 AI 설정 + 월간/일일 제한 확인 +2. **개인 글쓰기** (`writing.teamId` 없음): + - `canUseAIFeature(userId, AIFeatureType.IMAGE_GENERATION)` 호출 + - 개인 플랜 + 월간 제한 확인 + +**에러**: +- `400`: writingId 누락 +- `401`: 인증 필요 +- `404`: 글을 찾을 수 없음 또는 본인 글이 아님 + +**Manager 사용법**: +```typescript +import { writingManager } from "@/managers"; + +const result = await writingManager.checkImageGenerationAvailability(writingId); +// → { allowed: true, remaining: 5, limit: 10, isTeamWriting: true } +// → { allowed: false, reason: "TEAM_LIMIT_EXCEEDED", isTeamWriting: true } +``` + +**캐싱**: 없음 (실시간 확인 필요) + +--- + ## Text Analysis API ### POST /api/analyze-text diff --git a/PROJECT_STRUCTURE.md b/PROJECT_STRUCTURE.md index 970d0b3..9736210 100644 --- a/PROJECT_STRUCTURE.md +++ b/PROJECT_STRUCTURE.md @@ -1,10 +1,24 @@ # 라온누리 - 프로젝트 구조 -> 최종 업데이트: 2025-12-12 (보안 설정 통합, 팀 소유자 이전 기능) +> 최종 업데이트: 2025-12-16 (이미지 생성 가능 여부 확인 API, 계획된 기능 문서) 초등학생을 위한 창작 글쓰기 교육 플랫폼 -**최신 업데이트** (2025-12-12): +**최신 업데이트** (2025-12-16): +- 🖼️ **이미지 생성 가능 여부 확인 API** + - **POST /api/check-image-generation**: 글 ID 기반 이미지 생성 권한 확인 + - **팀/개인 분기 처리**: 팀 글쓰기 → 팀 AI 설정 + 월간/일일 제한, 개인 글쓰기 → 개인 플랜 + 월간 제한 + - **5가지 비활성화 사유**: PLAN_NOT_SUPPORTED, LIMIT_EXCEEDED, TEAM_AI_DISABLED, TEAM_LIMIT_EXCEEDED, DAILY_LIMIT_EXCEEDED + - **WritingManager.checkImageGenerationAvailability()**: 클라이언트 메서드 추가 + - **타입 추가**: CheckImageGenerationRequest, CheckImageGenerationResult, ImageGenerationDisableReason + - **다국어 지원**: imageUpload.disabledReasons namespace (ko/en/ja) +- 📋 **계획된 기능 문서화** + - **plannedFeature/ 디렉토리 신규 생성**: 향후 개발 예정 기능들 정리 + - **우선순위별 분류**: high-priority.md, medium-priority.md, low-priority.md + - **구현 가이드**: implementation-guide.md + - **주요 기능**: 부모님 대시보드, 선생님 첨삭 시스템, 글 포트폴리오, 협업 글쓰기 등 + +**업데이트** (2025-12-12): - 🔒 **팀 보안 설정 통합** - **TeamSecuritySettingsDialog 확장**: 공개설정(isPublic) + 보안레벨(securityLevel) 통합 - **공개 설정 스위치**: 보안 단계 선택 아래에 배치 (팀 공개, 글 공개 허용, 팀 설명, 커버 이미지) diff --git a/ROADMAP.md b/ROADMAP.md index bed32b3..36fa0ed 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,6 +1,6 @@ # 라온누리 - 개발 로드맵 -> 최종 업데이트: 2025-12-12 (팀 보안 설정 통합, 소유자 이전 기능) +> 최종 업데이트: 2025-12-16 (이미지 생성 가능 여부 확인 API, 계획된 기능 문서화) 초등학생을 위한 창작 글쓰기 교육 플랫폼 개발 계획 @@ -151,6 +151,8 @@ | **결제 주기 변경 기능** | **동일 플랜 결제 주기 변경 (월간↔연간), scheduledPlan.billingCycle 필드 추가, 다음 결제일부터 적용, 월간 30일/연간 365일 구독 기간, billingCycleChangeSuccess 토스트 알림, 다국어 지원** | **2025-12-10** | | **팀 소유자 이전 기능** | **POST /api/team/[teamId]/transfer-ownership API, TeamMemberEditor 소유자 이전 메뉴, 소유자 역할 배지 표시, 다국어 지원 (transferOwnership, transferConfirm 등 ko/en/ja)** | **2025-12-12** | | **팀 보안 설정 통합** | **TeamSecuritySettingsDialog에 공개설정 통합 (isPublic 스위치, allowPublicWritings, description, coverImage), TeamInfoCard에 검색가능/불가능 태그 추가 (FaGlobe/FaEyeSlash), TeamPublicSettings 제거, SecurityLevelSelector searchable 속성 추가, 다국어 지원 (searchable/notSearchable ko/en/ja)** | **2025-12-12** | +| **이미지 생성 가능 여부 확인 API** | **POST /api/check-image-generation (팀/개인 글쓰기 분기 처리), 5가지 비활성화 사유 (PLAN_NOT_SUPPORTED, LIMIT_EXCEEDED, TEAM_AI_DISABLED, TEAM_LIMIT_EXCEEDED, DAILY_LIMIT_EXCEEDED), WritingManager.checkImageGenerationAvailability() 메서드 추가, CheckImageGenerationRequest/Result/DisableReason 타입, 다국어 지원 (imageUpload.disabledReasons namespace ko/en/ja)** | **2025-12-16** | +| **계획된 기능 문서화** | **plannedFeature/ 디렉토리 신규 생성, 우선순위별 분류 (high/medium/low-priority.md), implementation-guide.md 구현 가이드, 주요 기능 (부모님 대시보드, 선생님 첨삭 시스템, 글 포트폴리오, 협업 글쓰기, 개인화 글감 AI, 독후감 템플릿, 음성 녹음, PDF 내보내기, 배지/업적 시스템)** | **2025-12-16** | ### 🚧 진행 중 diff --git a/TECH_STACK.md b/TECH_STACK.md index 68732f1..00cf3ff 100644 --- a/TECH_STACK.md +++ b/TECH_STACK.md @@ -1,6 +1,6 @@ # 라온누리 - 기술 스택 및 개발 환경 -> 최종 업데이트: 2025-12-08 (AI 크레딧 환불 시스템, 구매 플로우) +> 최종 업데이트: 2025-12-16 (이미지 생성 권한 확인 API) ---