부모 티켓
1개 티켓

백로그

0
티켓 없음

할 일

0
티켓 없음

진행 중

0
티켓 없음

리뷰

0
티켓 없음

완료 (15일)

1
보통 67958cd9
서브 티켓 하이라이트 관리 페이지

하이라이트 관리 페이지 (목록/필터/편집/삭제)

## 목표 /bible/highlights — 내 하이라이트 전체 목록, 성경별/색상별 필터, 노트 편집, 삭제 ## 구현 내용 ### 1. 라우트 추가 (config/routes.rb) ```ruby resources :bible_highlights, only: [:index, :update, :destroy], path: "bible/highlights" ``` ### 2. BibleHighlightsController (app/controllers/bible_highlights_controller.rb) ```ruby class BibleHighlightsController < ApplicationController before_action :authenticate_user! def index @highlights = current_user.bible_highlights.order(:book_abbrev, :chapter, :verse) @highlights = @highlights.where(book_abbrev: params[:book]) if params[:book].present? @highlights = @highlights.where(color: params[:color]) if params[:color].present? @grouped = @highlights.group_by(&:book_abbrev) @books = current_user.bible_highlights.distinct.pluck(:book_abbrev).sort @colors = %w[yellow green blue pink purple] end def update @highlight = current_user.bible_highlights.find(params[:id]) if @highlight.update(highlight_params) respond_to do |format| format.turbo_stream format.html { redirect_to bible_highlights_path } end else render :edit, status: :unprocessable_entity end end def destroy @highlight = current_user.bible_highlights.find(params[:id]) @highlight.destroy respond_to do |format| format.turbo_stream { render turbo_stream: turbo_stream.remove(@highlight) } format.html { redirect_to bible_highlights_path, notice: "하이라이트가 삭제되었습니다." } end end private def highlight_params params.require(:bible_highlight).permit(:note) end end ``` ### 3. 뷰 파일들 #### index.html.erb (app/views/bible_highlights/index.html.erb) - 상단: 제목 "내 하이라이트" + 필터 (성경 select + 색상 select) - 필터: form_with GET으로 구현 (Turbo Frame 사용 가능) - 본문: 성경별 그룹핑 (book_abbrev 기준) - 각 그룹 헤더: 성경 이름 + 하이라이트 수 - 각 하이라이트: 장:절 + 색상 뱃지 + 노트 미리보기 + 편집/삭제 버튼 - 성경 본문 이동 링크: qt_day_path 또는 tongtok/read 경로 - 빈 상태: "아직 하이라이트가 없습니다" 안내 - book_abbrev를 한글 성경 이름으로 변환: BibleData::BOOKS에서 abbrev→name 매핑 #### _highlight_item.html.erb (app/views/bible_highlights/_highlight_item.html.erb) - turbo_frame_tag로 감싸기 (인라인 편집용) - 색상별 배경: yellow→bg-yellow-100, green→bg-emerald-100, blue→bg-blue-100, pink→bg-pink-100, purple→bg-purple-100 - 노트 표시 (있으면), 편집 버튼 (Turbo Frame으로 전환) - 삭제 버튼 (button_to DELETE, data-turbo-confirm) #### _highlight_form.html.erb (app/views/bible_highlights/_highlight_form.html.erb) - turbo_frame_tag 안에 노트 편집 폼 - textarea + 저장/취소 버튼 - PATCH 요청 #### update.turbo_stream.erb - turbo_stream.replace로 편집 완료 후 아이템 교체 ### 4. BibleData 헬퍼 확인 - BibleData::BOOKS에서 abbrev→name 변환 메서드 확인 - 없으면 간단한 헬퍼 메서드 추가 ### 5. 통합 테스트 (test/controllers/bible_highlights_controller_test.rb) - index: 하이라이트 목록 표시 - index with filters: 성경/색상 필터 동작 - update: 노트 편집 - destroy: 하이라이트 삭제 - 인증 필수 확인 ## 관련 파일 (이 파일들만 수정/생성) - config/routes.rb (라우트 추가) - app/controllers/bible_highlights_controller.rb (새로 생성) - app/views/bible_highlights/index.html.erb (새로 생성) - app/views/bible_highlights/_highlight_item.html.erb (새로 생성) - app/views/bible_highlights/_highlight_form.html.erb (새로 생성) - app/views/bible_highlights/update.turbo_stream.erb (새로 생성) - test/controllers/bible_highlights_controller_test.rb (새로 생성) - test/fixtures/bible_highlights.yml (필요시) ## 주의사항 - 디자인 시스템 파셜 사용 (shared/card, shared/button, shared/badge, shared/empty_state) - 다크모드 대응 필수 (Tailwind dark: 프리픽스) - N+1 쿼리 방지 - CSRF 토큰 포함 (button_to 기본 포함) - 기존 API 컨트롤러(Api::Bible::HighlightsController)와 충돌 없도록 별도 컨트롤러 - 기존 테스트 전체 통과 확인 필수 - SQLite FK 금지 (belongs_to로만 관계 유지)

H
highlight-dev
8 days