벌크 이메일 초대 기능

ID: c2083743-9c69-4d77-9f90-8f60afde36b7

높음 완료

## 목표
여러 이메일을 한 번에 등록하고 초대 발송하는 벌크 초대 기능 구현

## 구현 내용
1. InvitationsController에 bulk_create 액션 추가
- POST /workspaces/:workspace_id/invitations/bulk_create
- 여러 이메일을 쉼표/줄바꿈으로 구분하여 받음
- 각 이메일에 대해 초대 생성 + 이메일 발송
- 성공/실패 카운트 flash 메시지

2. InvitationService에 bulk_create! 메서드 추가
- emails 배열, workspace, params(role, expires, group 등), created_by
- 이메일 유효성 검사 (형식, 중복, 이미 초대된 이메일)
- 각 이메일에 대해 create! 호출 (개별 에러 처리)
- 결과 반환: { success: [...], failed: [...] }

3. 벌크 입력 UI (index.html.erb의 Email Invite 탭 수정)
- textarea로 다수 이메일 입력 (쉼표 또는 줄바꿈 구분)
- 기존 단일 이메일 입력도 유지
- "벌크 초대" 토글/탭으로 전환
- 입력된 이메일 수 실시간 카운트 표시 (Stimulus)

4. Stimulus 컨트롤러 (bulk_invite_controller.js)
- textarea 입력 시 이메일 수 카운트
- 이메일 유효성 클라이언트 검증

5. 라우트 추가
- config/routes.rb에 collection route: post :bulk_create

6. 테스트 작성
- test/controllers/workspaces/invitations_controller_bulk_test.rb
- InvitationService bulk_create! 테스트

## 담당 파일 (이 파일만 수정)
- MODIFY: app/controllers/workspaces/invitations_controller.rb (bulk_create 액션 추가)
- MODIFY: app/views/workspaces/invitations/index.html.erb (벌크 UI 추가)
- MODIFY: config/routes.rb (bulk_create route만)
- NEW: app/javascript/controllers/bulk_invite_controller.js
- MODIFY: app/services/workspaces/invitation_service.rb (bulk_create! 메서드만 추가)
- NEW: test/controllers/workspaces/invitations_controller_bulk_test.rb

## 주의사항
- mailer-dev가 InvitationService.create!에 이메일 발송을 추가하므로, bulk_create!는 기존 create!를 내부적으로 호출하면 됨
- config/locales는 수정하지 마세요 (status-dev가 담당)

## 완료 기준
- 여러 이메일을 한 번에 입력하여 초대 생성 가능
- 각 이메일에 개별적으로 초대 이메일 발송됨
- 유효하지 않은 이메일은 건너뛰고 결과 보고
- 테스트 통과

첨부 이미지

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

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

담당자: bulk-dev
생성일: 2026년 02월 28일 07:17

활동 로그

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

    2026년 02월 28일 07:40:40

  • B
    bulk-dev 상태 변경: 할 일 → 리뷰

    2026년 02월 28일 07:22:54

  • B
    bulk-dev 벌크 이메일 초대 기능 구현 완료

    2026년 02월 28일 07:22:53

    상세 보기

    ## 변경 사항

    ### 1. InvitationService (app/services/workspaces/invitation_service.rb)
    - `bulk_create!` 메서드 추가: 여러 이메일을 한번에 초대, 성공/실패 결과 반환
    - `parse_emails` 메서드 추가: 쉼표/세미콜론/줄바꿈/공백으로 이메일 파싱, 중복 제거, 형식 검증

    ### 2. InvitationsController (app/controllers/workspaces/invitations_controller.rb)
    - `bulk_create` 액션 추가: bulk_create! 호출 후 결과에 따른 flash 메시지 표시

    ### 3. 라우트 (config/routes.rb)
    - `post :bulk_create, on: :collection` 추가

    ### 4. UI (app/views/workspaces/invitations/index.html.erb)
    - 이메일 탭 내 "Or bulk invite" 구분선 추가
    - textarea로 여러 이메일 입력 가능
    - 역할/그룹 선택 옵션
    - 이메일 카운트 실시간 표시

    ### 5. Stimulus (app/javascript/controllers/bulk_invite_controller.js)
    - textarea 입력 시 이메일 수 실시간 카운트
    - 이메일 없으면 제출 버튼 비활성화

    ### 6. 테스트 (test/controllers/workspaces/invitations_controller_bulk_test.rb)
    - 8개 테스트 모두 통과
    - 다중 이메일, 줄바꿈/세미콜론 구분, 중복 제거, 무효 이메일 무시, 빈 텍스트, 권한 검증, 역할 지정

  • B
    bulk-dev 벌크 이메일 초대 기능 작업 시작

    2026년 02월 28일 07:19:08

    상세 보기

    ## 작업 범위
    - InvitationService에 bulk_create! 메서드 추가
    - InvitationsController에 bulk_create 액션 추가
    - 라우트 추가
    - 벌크 UI (textarea + 카운트)
    - Stimulus 컨트롤러
    - 테스트 작성