ARI Inclusion은 요금제에 포함되는 부가 서비스나 옵션을 관리합니다. 조식, 픽업 서비스, 얼리 체크인, 레이트 체크아웃 등 다양한 서비스을 정의하고, 요금제에 연결하여 사용할 수 있습니다.
주요 개념:
- 기본 서비스: 시스템이 제공하는 공통 서비스 (얼리 체크인, 레이트 체크아웃, 추가 인원)
- 커스텀 서비스: 숙박 시설이 직접 생성하는 서비스 (조식, 픽업 서비스 등)
- 요금 설정: 서비스별 추가 요금 설정
- 수량 관리: 요금제에 서비스 연결 시 수량 지정
- 변경 이력: 모든 수정 사항이 히스토리로 저장됨
기본 서비스 코드
시스템이 제공하는 기본 서비스:
| 코드 | 이름 | 설명 |
|---|
EARLY_CHECK_IN | 얼리 체크인 | 정규 체크인 시간보다 일찍 입실 |
LATE_CHECK_OUT | 레이트 체크아웃 | 정규 체크아웃 시간보다 늦게 퇴실 |
EXTRA_OCCUPANCY | 추가 인원 | 기준 인원 초과 시 추가 인원 |
Queries
getAriInclusionList
특정 숙박 시설의 서비스 목록을 조회합니다.
GraphQL Signature
query GetAriInclusionList($accommodationId: ID!) {
getAriInclusionList(accommodationId: $accommodationId) {
id
code
name
charge
currency
isImmutable
isFavorite
}
}
파라미터
query {
getAriInclusionList(accommodationId: "01H8X9Y2Z3A4B5C6D7E8F9G0H1") {
id
code
name
charge
currency
isImmutable
isFavorite
}
}
getDefaultAriInclusionList
시스템이 제공하는 기본 서비스 목록을 조회합니다.
GraphQL Signature
query GetDefaultAriInclusionList {
getDefaultAriInclusionList {
id
code
name
charge
currency
isImmutable
isFavorite
}
}
기본 서비스 목록을 반환합니다. accommodationId가 null인 항목들입니다.
기본 서비스 코드:
EARLY_CHECK_IN: 얼리 체크인
LATE_CHECK_OUT: 레이트 체크아웃
EXTRA_OCCUPANCY: 추가 인원
query {
getDefaultAriInclusionList {
id
code
name
charge
currency
isImmutable
}
}
Mutations
createAriInclusion
새로운 서비스을 생성합니다.
GraphQL Signature
mutation CreateAriInclusion($accommodationId: ID!, $input: CreateAriInclusionInput!) {
createAriInclusion(accommodationId: $accommodationId, input: $input) {
id
code
name
charge
currency
isImmutable
isFavorite
}
}
파라미터
input
CreateAriInclusionInput!
required
서비스 생성 정보
서비스 코드 (숙박 시설 내에서 고유해야 함)
생성된 AriInclusion 객체를 반환합니다.
mutation {
createAriInclusion(
accommodationId: "01H8X9Y2Z3A4B5C6D7E8F9G0H1"
input: {
code: "BREAKFAST"
name: "조식"
charge: "15000"
currency: "KRW"
isImmutable: false
isFavorite: true
}
) {
id
code
name
charge
currency
isImmutable
isFavorite
}
}
검증 규칙
- 동일한
accommodationId와 code 조합이 이미 존재하면 ARI_INCLUSION.CODE_ALREADY_EXISTS 에러 발생
- 생성 시 버전 1의 히스토리가 자동으로 생성됨
updateAriInclusion
기존 서비스을 수정합니다.
GraphQL Signature
mutation UpdateAriInclusion($id: Int!, $input: UpdateAriInclusionInput!) {
updateAriInclusion(id: $id, input: $input) {
id
code
name
charge
currency
isImmutable
isFavorite
}
}
파라미터
input
UpdateAriInclusionInput!
required
수정할 필드 (모든 필드 선택적)
수정된 AriInclusion 객체를 반환합니다.
mutation {
updateAriInclusion(
id: 1
input: {
name: "프리미엄 조식"
charge: "20000"
isFavorite: true
}
) {
id
name
charge
isFavorite
}
}
검증 규칙
- 서비스 코드 변경 시 중복 검증 실행
- 수정 시 새로운 버전의 히스토리가 자동으로 생성됨
isImmutable: true인 서비스도 수정 가능 (플래그는 참고용)
deleteAriInclusion
서비스을 삭제합니다.
GraphQL Signature
mutation DeleteAriInclusion($id: Int!) {
deleteAriInclusion(id: $id)
}
파라미터
mutation {
deleteAriInclusion(id: 1)
}
제약 사항
요금제에서 사용 중인 서비스은 삭제할 수 없습니다. CANNOT_DELETE_USING_INCLUSION 에러가 발생합니다. 삭제하려면 먼저 모든 요금제에서 해당 서비스을 제거해야 합니다.
서비스 히스토리
모든 서비스 수정 사항은 히스토리로 저장됩니다.
AriInclusionHistory
버전 관리
- 생성 시: 버전 1의 히스토리 생성
- 수정 시: 최신 버전 + 1의 히스토리 생성
- 히스토리는 삭제되지 않으며 영구 보관됨
# 서비스 생성
createAriInclusion(input: { name: "조식", charge: "15000" })
# → 히스토리 버전 1 생성
# 첫 번째 수정
updateAriInclusion(input: { charge: "18000" })
# → 히스토리 버전 2 생성
# 두 번째 수정
updateAriInclusion(input: { name: "프리미엄 조식", charge: "20000" })
# → 히스토리 버전 3 생성
요금제에 서비스 연결
서비스은 요금제 생성 또는 수정 시 연결됩니다.
생성 시 연결
mutation {
createAriRatePlan(
accommodationId: "01H8X9Y2Z3A4B5C6D7E8F9G0H1"
input: {
name: "조식 포함 요금제"
# ... 기타 필드
inclusions: [
{
id: 1 # 조식 서비스 ID
quantity: 2 # 수량: 2인분
},
{
id: 3 # 얼리 체크인 서비스 ID
quantity: 1
}
]
}
) {
id
name
inclusions {
quantity
inclusion {
name
charge
}
}
}
}
수정 시 재설정
mutation {
updateAriRatePlan(
ratePlanId: 1
input: {
inclusions: [
{
id: 1 # 조식만 남김
quantity: 3 # 수량 변경: 3인분
}
]
}
) {
id
inclusions {
quantity
inclusion {
name
}
}
}
}
AriRatePlanInclusion 구조
활용 사례
1. 조식 포함 요금제
# 1. 조식 서비스 생성
mutation {
createAriInclusion(
accommodationId: "01H8X9Y2Z3A4B5C6D7E8F9G0H1"
input: {
code: "BREAKFAST"
name: "조식 뷔페"
charge: "15000"
currency: "KRW"
}
) {
id
}
}
# 2. 조식 포함 요금제 생성
mutation {
createAriRatePlan(
accommodationId: "01H8X9Y2Z3A4B5C6D7E8F9G0H1"
input: {
name: "조식 포함 스탠다드 요금제"
# ... 기타 필드
inclusions: [
{
id: 1 # 위에서 생성한 조식 ID
quantity: 2 # 기준 인원 2명분
}
]
}
) {
id
name
inclusions {
quantity
inclusion {
name
charge
}
}
}
}
2. 얼리 체크인 옵션
# 얼리 체크인 서비스 생성
mutation {
createAriInclusion(
accommodationId: "01H8X9Y2Z3A4B5C6D7E8F9G0H1"
input: {
code: "EARLY_CHECK_IN"
name: "얼리 체크인 (12시)"
charge: "20000"
currency: "KRW"
isImmutable: false
isFavorite: true
}
) {
id
name
charge
}
}
3. 여러 서비스 조합
mutation {
createAriRatePlan(
accommodationId: "01H8X9Y2Z3A4B5C6D7E8F9G0H1"
input: {
name: "프리미엄 패키지"
# ... 기타 필드
inclusions: [
{ id: 1, quantity: 2 }, # 조식 2인분
{ id: 2, quantity: 1 }, # 공항 픽업 1회
{ id: 3, quantity: 1 }, # 얼리 체크인 1회
{ id: 4, quantity: 1 } # 레이트 체크아웃 1회
]
}
) {
id
name
inclusions {
quantity
inclusion {
name
charge
}
}
}
}
4. 즐겨찾기 관리
자주 사용하는 서비스을 즐겨찾기로 설정:
mutation {
updateAriInclusion(
id: 1
input: { isFavorite: true }
) {
id
name
isFavorite
}
}
사용 흐름
- 기본 서비스 확인:
getDefaultAriInclusionList로 시스템 제공 서비스 확인
- 커스텀 서비스 생성:
createAriInclusion으로 필요한 서비스 생성
- 요금제 연결: 요금제 생성/수정 시
inclusions 배열로 연결
- 요금 계산: 예약 시 서비스 수량에 따른 추가 요금 계산
- 관리: 필요 시 서비스 수정 또는 삭제 (미사용 항목만)
모범 사례
- 명확한 이름: 고객이 이해하기 쉬운 서비스 이름 사용
- 적절한 코드: 시스템 전체에서 일관성 있는 코드 체계 유지
- 통화 일치: 숙박 시설의 기본 통화와 일치시키기
- 즐겨찾기 활용: 자주 사용하는 서비스은 즐겨찾기로 관리
- 히스토리 보존: 요금 변경 시 히스토리가 자동 저장되므로 과거 예약 추적 가능
- 삭제 전 확인: 요금제에서 사용 중인지 확인 후 삭제
주의 사항
서비스의 요금을 변경하면 새로운 히스토리가 생성됩니다. 과거 예약은 예약 당시의 요금으로 기록되므로, 서비스 요금 변경이 과거 예약에 영향을 주지 않습니다.
기본 서비스(EARLY_CHECK_IN, LATE_CHECK_OUT, EXTRA_OCCUPANCY)은 accommodationId가 null이며, 시스템 전체에서 공유됩니다. 숙박 시설별로 별도의 서비스을 생성하려면 다른 코드를 사용하세요.
관련 API