[Phase 2] PR 2-2: Blog Admin CRUD

ID: 27a2dcaf-3c2d-4ca2-b417-e65adb2ddb05

높음 완료

## 개요
Admin에서 블로그 포스트/카테고리 관리 CRUD

## 생성할 파일
- `app/controllers/admin/blog_posts_controller.rb`
- `app/controllers/admin/blog_categories_controller.rb`
- `app/views/admin/blog_posts/` (index, show, new, edit, _form)
- `app/views/admin/blog_categories/` (index, _form)
- 테스트 2개

## 수정할 파일
- `config/routes.rb` — admin 내 blog 리소스
- `app/views/layouts/admin.html.erb` — 사이드바 메뉴

## 완료 기준
- Admin 카테고리 CRUD
- Admin 포스트 CRUD (draft/published/archived)
- 이미지 업로드 (featured_image)
- 12개 기본 카테고리 시드

## 의존성
PR 2-1 (Blog 모델)

첨부 이미지

이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)

JPEG, PNG, GIF, WebP / 최대 10MB

담당자: 팀리드
생성일: 2026년 03월 11일 11:39

활동 로그

  • 팀리드 전체 리뷰 완료 — 25개 티켓 승인 및 이슈 수정

    2026년 03월 11일 22:24:25

    상세 보기

    ## 리뷰 결과
    - bin/ci: 통과 (Rubocop 0 offenses, Brakeman 0 warnings, 테스트 전체 통과)
    - 25개 티켓 모두 done 처리

    ## 보안 수정 (Critical/High)
    - `blog/posts/show.html.erb`: `raw` → `sanitize` (XSS 방지)
    - `study/enrollments_controller.rb`: 무료 등록 바이패스 차단
    - `study/workshop_payments_controller.rb`: IDOR 수정 (`Current.user.payments.find_by!`)
    - `study/assignment.rb`: 파일 content_type 검증 추가
    - `config/brakeman.ignore`: 기존 admin mass assignment 4건 무시 처리

    ## 코드 품질 수정
    - `blog/posts_controller.rb`, `admin/blog_posts_controller.rb`: LIKE wildcard injection → `sanitize_sql_like`
    - `blog/posts_controller.rb`: N+1 → `includes(:author, :category)`
    - `study/workshops_controller.rb`: N+1 → `includes(:course_applications)`

    ## UX/접근성 수정
    - `blog/comments/_comment.html.erb`: reply-form Stimulus scope 수정
    - `study/lessons/show.html.erb`: iframe title 속성 추가
    - `blog/posts/index.html.erb`, `blog/categories/show.html.erb`: 검색 aria-label
    - `blog/likes/_button.html.erb`: 좋아요 버튼 aria-label
    - `accordion_controller.js`: aria-expanded 토글 추가
    - `video_player_controller.js`: YouTube interval cleanup in disconnect()

  • 팀리드 상태 변경: 리뷰 → 완료

    2026년 03월 11일 22:23:26

  • D
    developer-1 Blog Admin CRUD 구현 완료 (24 tests, 0 failures)

    2026년 03월 11일 13:34:46

    상세 보기

    ## 생성된 파일
    ### 컨트롤러 (2)
    - admin/blog_posts_controller.rb — CRUD + 필터/검색/페이지네이션
    - admin/blog_categories_controller.rb — CRUD

    ### 뷰 (9)
    - admin/blog_posts/ — index, show, new, edit, _form
    - admin/blog_categories/ — index, new, edit, _form

    ### 테스트 (2파일, 24 tests)
    - admin/blog_posts_controller_test.rb (14)
    - admin/blog_categories_controller_test.rb (10)

    ### 시드
    - db/seeds/seed_blog_categories.rb — 12개 기본 카테고리

    ### 수정
    - routes.rb — admin blog_posts, blog_categories 추가
    - sidebar — 블로그 메뉴 추가
    - ko.yml — admin 번역 추가

  • D
    developer-1 상태 변경: 진행 중 → 리뷰

    2026년 03월 11일 13:34:41

  • 팀리드 작업 시작 - Blog Admin + 블로그 공개 + Study Admin 3개 병렬

    2026년 03월 11일 13:12:50

    상세 보기

    ## 작업 계획
    - developer-1: PR 2-2 Blog Admin CRUD (admin/blog_posts, admin/blog_categories)
    - developer-2: PR 3-1 블로그 공개 페이지 (blog/posts, blog/categories)
    - developer-3: PR 4-2 Study Admin CRUD (admin/study_courses, chapters, lessons)

    ## 파일 충돌 방지 전략
    - routes.rb: 각 에이전트가 담당 영역만 수정
    - admin sidebar: developer-1이 블로그 메뉴, developer-3이 교육 메뉴 담당
    - developer-2는 blog subdomain 영역만 수정 (admin 미접촉)

  • 팀리드 티켓 클레임 완료

    2026년 03월 11일 13:12:33