Recording Block: Policy, Occurrence, Resolved View
문서 정보
- 작성일: 2026-04-09
- 최종 업데이트: 2026-04-09
- 버전: v1.0.0
TL;DR
반복 차단은 policy, 특정 날짜 차단은 occurrence, FE가 읽는 것은 resolved view로 구분해야 합니다.
목차
개요
이 문서는 recording domain에서 차단 정책을 어떻게 저장하고, FE는 어떤 결과를 읽어야 하는지 설명합니다.
핵심 개념
Policy
- 반복 차단 정책
- source:
GymRecurringRecordingBlock - 예: 매주 화요일 10:00~15:00
Occurrence
- 특정 날짜에 실제 발생한 차단 row
- source:
GymRecordingBlock - 예: 2026-04-15 10:00~15:00
Resolved View
- 특정 날짜 기준으로 FE가 소비하는 blocked timeline
- policy + occurrence를 해석한 결과
- GymStaff는
court-summaries/timelineendpoint로 이 view를 소비함 - 날짜 문자열(
YYYY-MM-DD) 기준 요일 계산은 타임존 경계 drift를 피하기 위해 별도 util 기준으로 수행함
사용 방법
언제 뭘 쓸까?
| 상황 | 추천 방식 | 이유 |
|---|---|---|
| Admin 반복 차단 저장 | Policy | 반복 규칙이기 때문 |
| 특정 날짜 예외 차단 | Occurrence | 날짜가 확정된 row이기 때문 |
| FE가 화면에 렌더링 | Resolved View | raw 모델을 직접 알 필요가 없음 |
| claim/send | Occurrence 선택 | 정책 자체는 액션 대상이 아님 |
FAQ
Q: 왜 하나의 테이블로 안 끝내나요?
반복 규칙과 특정 날짜 예외는 저장 의미가 다르고, 화면이 필요로 하는 값도 다르기 때문입니다.
Q: GymStaff는 무엇을 직접 읽나요?
GymStaff는 raw policy가 아니라 특정 날짜 기준으로 해석된 blocked timeline을 읽어야 합니다.
Q: claim/send는 무엇을 payload로 보내나요?
sourceType, sourceUuid, selectedStartTime, selectedEndTime를 함께 보내서 사용자가 선택한 실제 occurrence 한 건을 식별합니다.
Q: send는 어떻게 공유를 만드나요?
send는 직접 SHARED row를 생성하지 않습니다. sender의 OWNER UserSchedule을 확보한 뒤 LEVEL_1 ShareLink를 자동 생성하고, 대상 user가 그 ShareLink를 자동 access하는 방식으로 정상 share domain 흐름을 탑니다.
Q: 왜 UI는 24:00을 보여주는데 서버는 23:59로 저장하나요?
FE/사용자 입장에서는 하루의 끝을 24:00으로 보는 것이 직관적이지만, 서버/DB에서는 23:59 저장이 날짜 경계 처리에 더 단순합니다. 따라서 UI 표시와 저장 규칙을 분리합니다.
관련 문 서
변경 이력
| 버전 | 날짜 | 변경 내용 |
|---|---|---|
| v1.0.0 | 2026-04-09 | 초기 문서 작성 - Policy / Occurrence / Resolved View 백과 문서 추가 |