매칭 일정 제안 알고리즘¶
문서 역할¶
- 역할:
설명 - 문서 종류:
architecture - 충돌 시 우선 문서: 매칭 운영 정책
- 기준 성격:
as-is
일정 제안/역제안 검증의 구조와 대표 흐름을 정리한 문서이다.
정확한 허용 횟수, 일정 후보 개수, 범위 규칙의 원문 SoT는 매칭 운영 정책을 따른다.
검증 구조 요약¶
- 서버는 제안 횟수에 따라 허용 날짜 창을 다르게 적용한다.
- 각 제안은 날짜 범위와 일정 후보 개수를 함께 검증한다.
- 이 문서는 분기 구조와 시퀀스를 설명하고, 실제 제한 값은 정책 문서를 기준으로 본다.
범위 검증 구조¶
현행 구현 경계는 coupler-api/lib/matching-schedule-parser.ts다.
| 함수 | 역할 |
|---|---|
getMatchingScheduleSelectableDateRange |
제안 횟수별 허용 날짜 범위 산출 |
getMatchingScheduleCandidateValidation |
입력 날짜 후보를 허용 범위 기준으로 유효/무효 분리 |
parseMatchingScheduleCandidates |
입력된 날짜 후보 중 유효 후보만 반환 |
getMatchingScheduleDuplicateDateTimes |
허용 범위 안 후보에서 전체 일시 기준 중복 산출 |
getMatchingScheduleCandidateCountErrorCode |
필터링된 일정 후보가 허용 개수인지 판정 |
입력 검증 경계¶
컨트롤러 경계는 coupler-api/controller/app/v1/match.ts의 addSchedule 흐름이다.
실패 응답 계약은 API 에러 계약 정책을 따른다.
addSchedule은 parser 결과를 기준으로 동일 일시 중복과 허용 일정 후보 개수를 판정한다.- 범위 밖 날짜나 계약 밖 날짜 형식(
YYYY-MM-DD,YYYY-MM-DD HH:mm:ss외)이 하나라도 있으면MATCHING_SCHEDULE_INVALID_DATE실패 응답으로 거부한다. - 허용 범위 안의 일정 후보는 전체 일시로 비교한다. 같은 날짜의 다른 시간은 허용하고 동일 일시는 제거하지
않은 채
MATCHING_SCHEDULE_DUPLICATE_DATE실패 응답으로 거부한다. - 실제 최소/최대 허용 개수와 상태 전이 결과는 정책 문서를 따른다.
역제안 흐름¶
sequenceDiagram
participant M as 남성
participant F as 여성
M->>F: 1차 제안 (정책 기준 일정 후보)
Note over M,F: 범위: 정책 기준 1차 허용 범위
alt 수락
F->>M: 날짜 선택
Note over M,F: OK_SCHEDULE (6)
else 역제안
F->>M: 2차 제안 (정책 기준 일정 후보)
Note over M,F: 범위: 정책 기준 2차 허용 범위
alt 수락
M->>F: 날짜 선택
else 역제안
M->>F: 3차 제안
Note over M,F: 범위: 정책 기준 3차 허용 범위
alt 수락
F->>M: 날짜 선택
else 역제안
F->>M: 4차 제안 (마지막)
Note over M,F: 범위: 정책 기준 4차 허용 범위
alt 수락
M->>F: 날짜 선택
else 불합의
Note over M,F: SCHEDULE_NOT_SELECTED (-105)
Note over M,F: 정책 기준 환불
end
end
end
end
불합의 종료 예시¶
정책에서 정의한 최종 제안 횟수까지 합의되지 않으면 서버는 불합의 종료 상태로 전환하고 환불 규칙을 적용한다.
현행 종료 처리는 coupler-api/controller/app/v1/match.ts의 매칭 취소 흐름에서 수행한다.
서버는 일정 제안 횟수를 확인한 뒤 정책 기준 환불 로그를 남기고, 매칭 상태를 SCHEDULE_NOT_SELECTED로 갱신한다.
만료 처리¶
- 각 제안 후 응답 기한이 지나면 서버가 무응답 종료 상태로 전환한다.
- 구체적인 기한과 상태 값은 정책 문서를 따른다.