Workspaces::EngagementSurveysController 구현
ID: e36ba067-18a2-4c73-a61a-a1a6d53069bd
## 작업: 워크스페이스 설문 관리 컨트롤러
### 참조 (반드시 읽기)
- `.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`
첨부 이미지
이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)
JPEG, PNG, GIF, WebP / 최대 10MB
활동 로그
아직 활동 기록이 없습니다.