부모 티켓
1개 티켓

백로그

0
티켓 없음

할 일

0
티켓 없음

진행 중

0
티켓 없음

리뷰

1
높음 398ffe8e
서브 티켓 [P3] Ai::ClaudeMdGeneratorService + 다운로드

ClaudeMdGeneratorService + Build::ClaudeMdsController + 미리보기/다운로드 + 테스트

## 목표 PRD Section 13.3 기반 Ai::ClaudeMdGeneratorService + Build::ClaudeMdsController 구현. CLAUDE.md 생성, 미리보기, 파일 다운로드. ## 현재 상태 - Build::ClaudeMdsController 스텁 (show, create + download member route) - 라우트: `resource :claude_md, only: [:show, :create] do get :download, on: :member end` - Project: claude_md_content(text), claude_md_generated_at(datetime) - BlueprintGeneratorService 패턴 참고 가능 ## PRD 코드 (Section 13.3) — API 호출 없이 프로젝트 데이터로 마크다운 생성 ```ruby class Ai::ClaudeMdGeneratorService def initialize(project:) @project = project @user = project.user end def call content = generate @project.update!(claude_md_content: content, claude_md_generated_at: Time.current) content end private def generate # 프로젝트 정보를 CLAUDE.md 마크다운으로 변환 # title, one_line_definition, target_customer, revenue_model, tech_stack, # core_features, db_schema_draft, pages_list, dev_priority 포함 # 개발 원칙, 코딩 컨벤션, 디자인 시스템 등 고정 섹션 추가 end def format_db_schema return "아직 생성되지 않음" unless @project.db_schema_draft.present? @project.db_schema_draft.map { |table, cols| "### #{table}\n#{cols.map { |c| "- #{c}" }.join("\n")}" }.join("\n\n") end end ``` ## 구현 사항 ### 1. app/services/ai/claude_md_generator_service.rb - PRD 코드 기반 (API 호출 없음, 순수 마크다운 생성) - project 데이터를 CLAUDE.md 형식으로 변환 - format_db_schema 헬퍼 ### 2. Build::ClaudeMdsController ```ruby class Build::ClaudeMdsController < ApplicationController before_action :set_project before_action :authorize_owner! def show # claude_md_content가 있으면 미리보기, 없으면 생성 버튼 end def create Ai::ClaudeMdGeneratorService.new(project: @project).call redirect_to build_project_claude_md_path(@project), notice: "CLAUDE.md가 생성되었습니다." end def download content = @project.claude_md_content || Ai::ClaudeMdGeneratorService.new(project: @project).call send_data content, filename: "CLAUDE.md", type: "text/markdown" end private def set_project = @project = Project.find(params[:project_id]) def authorize_owner! redirect_to build_projects_path, alert: I18n.t("errors.messages.not_authorized") unless @project.user == Current.user end end ``` ### 3. 뷰 (build/claude_mds/show.html.erb) - 미리보기: claude_md_content를 simple_format 또는 pre 태그로 표시 - "다운로드" 버튼 (→ download 액션) - "재생성" 버튼 (→ create 액션) - 미생성 시 "CLAUDE.md 생성하기" 버튼 - claude_md_generated_at 타임스탬프 표시 - 다크 테마, 기존 Partial ### ⚠️ 주의 - services/ai/ + build/claude_mds/ 범위만 (developer-2는 build/build_steps/ 작업 중) - 이 서비스는 API 호출 없음 (동기 실행) ### 테스트 - 서비스: CLAUDE.md 콘텐츠 생성 확인, project 필드 업데이트 - 컨트롤러: show, create, download, 인증/소유자 ### 완료 기준 - CLAUDE.md 생성 + 미리보기 - .md 파일 다운로드 - 재생성 가능 - bin/rails test 전체 통과

D
developer-1
25 days

완료 (전체)

0
티켓 없음