R2 예약 관리 F3
예약 생성
직원이 회의실·시간·참석자를 정해 예약한다. 충돌을 막고 확정과 알림 전송을 구분한다.
수용 기준
- 같은 회의실의 시간이 겹치면 한 예약만 확정된다.
- 필수 항목·수용 인원·운영 시간을 충족하지 못하면 확정하지 않는다.
- 알림 전송에 실패해도 이미 확정된 예약이 중복 생성되거나 취소되지 않는다.
세부 범위
F3:0 회의실 및 시간대 선택
직원이 운영 중인 회의실과 회사 시간대 기준 시작·종료 시간을 선택한다. [시작, 종료) 구간으로 충돌을 판정해 맞닿은 예약은 허용하고 확정 직전에 다시 검사한다.
- 09:00–10:00 예약이 있을 때 09:30–10:30 확정은 거절되고 10:00–11:00은 허용된다.
- 과거 시간, 종료≤시작, 운영 시간 밖 또는 점검 중 회의실은 선택·확정할 수 없다.
- 두 직원이 같은 시간대를 동시에 확정하면 한 건만 저장되고 나머지는 새 가용 시간을 안내받는다.
F3:1 참석자 추가 및 인원 제한
예약자는 활성 직원 명부에서 참석자를 선택한다. 예약자를 포함한 고유 인원 수를 수용 인원과 비교하고 외부 게스트는 초기 범위에서 제외한다.
- 같은 직원을 두 번 선택해도 참석 인원은 한 명으로 계산한다.
- 예약자를 포함한 고유 인원이 수용 인원을 초과하면 확정 버튼과 서버 저장이 거절된다.
- 비활성 직원이나 외부 이메일을 추가하려 하면 이유를 표시하고 참석자 목록에 저장하지 않는다.
F3:2 예약 확정과 알림 상태
서버가 권한·시간 충돌·입력 버전을 다시 검사해 booking_id와 request_id로 예약을 한 번만 확정한다. 확정 이후 참석자 알림을 큐에 넣고 예약 결과와 전송 결과를 별도로 표시한다.
- 같은 request_id 재전송은 기존 booking_id를 반환하고 두 번째 예약을 만들지 않는다.
- 동시 예약 충돌이면 내용을 보존한 채 시간 재선택으로 돌아가고 확정 알림은 만들지 않는다.
- 저장 성공 후 알림 장애에는 확정 상태와 전송 실패·재시도 상태를 함께 보여준다.
- 성공한 최초 확정은 E1을 booking_id 기준 한 번만 기록하고 실패·수정 재전송은 새 확정으로 집계하지 않는다.