백로그
0할 일
0진행 중
0리뷰
0완료 (30일)
3API Base Controller + routes + /me endpoint
## 작업 내용 1. `Api::V1::BaseController` 생성 (`app/controllers/api/v1/base_controller.rb`): - `ActionController::API` 상속 - `before_action :doorkeeper_authorize!` - JSON 에러 핸들링 (401, 403, 404, 422) - `current_resource_owner` 헬퍼 (doorkeeper token → User) 2. `config/routes.rb`에 API namespace 추가: ```ruby namespace :api do namespace :v1 do resource :me, only: [:show], controller: 'profiles' resources :users, only: [] do resource :diagnoses, only: [:show], module: 'users' resource :strength_profile, only: [:show], module: 'users' end end end ``` 3. `Api::V1::ProfilesController` 생성 (`GET /api/v1/me`): - doorkeeper scope: `:profile` - 현재 토큰 소유자의 프로필 반환 - 응답: id, email, name, locale, role, email_verified_at, created_at 4. CORS 설정 (rack-cors gem 또는 수동): - API 경로만 CORS 허용 ## 참고 파일 - `app/models/user.rb` — User 모델 구조 확인 - `config/initializers/doorkeeper.rb` — 스코프 설정 확인 - `config/routes.rb` — 기존 라우트 확인 ## 완료 기준 - GET /api/v1/me가 Bearer 토큰으로 동작 - 토큰 없이 요청 시 401 응답 - JSON 에러 핸들링 동작
diagnoses + strength_profile API endpoints
## 작업 내용 1. 먼저 기존 모델 구조 파악: - `app/models/diagnosis_session.rb` — 진단 세션 모델 확인 - `app/models/` — 강점 관련 모델 확인 (strength, diagnosis_result 등) - 기존 뷰에서 진단 결과 어떻게 표시하는지 확인 2. `Api::V1::Users::DiagnosesController` 생성 (`GET /api/v1/users/:user_id/diagnoses`): - doorkeeper scope: `:diagnoses` - Client Credentials일 경우 params[:user_id]로 사용자 조회 - Authorization Code일 경우 현재 토큰 소유자만 허용 (또는 user_id 일치 확인) - 응답: 진단 이력 목록 (id, completed_at, status 등) 3. `Api::V1::Users::StrengthProfilesController` 생성 (`GET /api/v1/users/:user_id/strength_profile`): - doorkeeper scope: `:strengths` - 가장 최근 완료된 진단의 강점 프로필 반환 - 응답: top strengths, 점수, 완료 일시 등 4. JSON 직렬화: - jbuilder 사용 (프로젝트에 이미 있을 경우) 또는 `render json:` + `as_json` - 민감 정보 제외 (password_digest 등) ## 의존성 - backend-dev의 BaseController + routes 완료 후 작업 ## 참고 - `Api::V1::BaseController`를 상속 - doorkeeper_authorize! 는 BaseController에서 처리됨 - scope별 접근 제어: `before_action -> { doorkeeper_authorize! :diagnoses }` ## 완료 기준 - GET /api/v1/users/:id/diagnoses 동작 - GET /api/v1/users/:id/strength_profile 동작 - scope 미충족 시 403 응답 - Client Credentials + Authorization Code 모두 지원
Resource API 통합 테스트
## 작업 내용 `test/integration/api/v1/` 디렉토리에 통합 테스트 작성 1. **ProfilesController 테스트** (`profiles_test.rb`): - Bearer 토큰으로 GET /api/v1/me 성공 - 토큰 없이 요청 시 401 - profile scope 없는 토큰으로 요청 시 403 - 응답 JSON 구조 검증 2. **DiagnosesController 테스트** (`diagnoses_test.rb`): - Authorization Code 토큰으로 자신의 진단 이력 조회 - Client Credentials 토큰으로 특정 사용자 진단 조회 - diagnoses scope 없는 토큰으로 403 - 존재하지 않는 사용자 404 3. **StrengthProfilesController 테스트** (`strength_profiles_test.rb`): - 강점 프로필 조회 성공 - strengths scope 없는 토큰으로 403 - 진단 결과 없는 사용자 처리 4. **공통 테스트**: - CORS 헤더 확인 - 만료된 토큰으로 401 - 잘못된 형식 토큰으로 401 ## 의존성 - backend-dev + api-dev 완료 후 작업 ## 참고 - `test/integration/doorkeeper_oauth_test.rb` — 기존 doorkeeper 테스트 패턴 참고 - Minitest 사용, fixtures 기반 ## 완료 기준 - 모든 테스트 통과 - 전체 `rails test` 통과 (기존 payments 버그 제외)