백로그
0할 일
1Workspaces::EngagementSurveysController 구현
## 작업: 워크스페이스 설문 관리 컨트롤러 ### 참조 (반드시 읽기) - `.claude/skills/rails-core/SKILL.md` - `.claude/skills/rails-testing/SKILL.md` - 기존 패턴 참고: `app/controllers/workspaces/team_strengths_controller.rb`, `app/controllers/workspaces/settings_controller.rb` - 권한 concern: `app/controllers/concerns/workspace_authorization.rb` - PR2 서비스: `app/services/engagement_surveys/create_service.rb`, `app/services/engagement_surveys/result_aggregator.rb` ### 컨트롤러: `app/controllers/workspaces/engagement_surveys_controller.rb` ```ruby module Workspaces class EngagementSurveysController < ApplicationController include WorkspaceAuthorization # index, show → admin or leader # new, create, toggle_status → admin only end end ``` #### 액션 - **index**: 해당 워크스페이스의 설문 목록 (by_period 스코프) - **new**: 새 설문 생성 폼 (연도/분기 선택) - **create**: EngagementSurveys::CreateService 호출, 성공 시 show로 redirect - **show**: EngagementSurveys::ResultAggregator로 결과 조회, @survey + @result 세팅 - **toggle_status**: draft→active→closed 순서로 상태 전환 #### 권한 매트릭스 | 액션 | member | leader | admin | |------|--------|--------|-------| | index | - | O | O | | new/create | - | - | O | | show | - | O | O | | toggle_status | - | - | O | ### 라우트 추가 (`config/routes.rb`) 기존 workspaces 블록 안에 추가: ```ruby resources :engagement_surveys, only: [:index, :new, :create, :show], controller: "workspaces/engagement_surveys" do member do patch :toggle_status end end ``` ### 테스트: `test/controllers/workspaces/engagement_surveys_controller_test.rb` - index 접근 (leader O, member X, 비로그인 X) - create (admin O, leader X) - show 결과 조회 - toggle_status 상태 전환 - 권한 거부 시 적절한 응답 ### 주의사항 - 뷰 파일은 최소한의 placeholder만 생성 (PR5에서 본격 구현) - 기존 WorkspaceAuthorization 패턴 확인 후 동일하게 적용 - 모든 rails 명령: `docker compose exec web`