# -*- coding: utf-8 -*-
"""
예약 API 모듈
예약 현황 조회 및 예약 생성 기능을 제공합니다.
"""
import logging
import requests
from urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
logger = logging.getLogger(__name__)
class ReservationsAPI:
"""예약 관련 API 클래스"""
def __init__(self, base_url: str, login_manager, config):
"""
Args:
base_url: 회의실 시스템 베이스 URL
login_manager: LoginManager 인스턴스
config: 설정 모듈
"""
self.base_url = base_url
self.login_manager = login_manager
self.config = config
def get_reservations(self, date: str, office_id: int = 2):
"""
예약 현황 조회
Args:
date: 날짜 (YYYY-MM-DD)
office_id: 사무실 ID
Returns:
list: 예약 목록 (실패 시 빈 리스트)
"""
url = f"{self.base_url}/room/api/v1/reservations/-/reserved-dates"
params = {
"officeId": office_id,
"useDate": date,
"reservedDateStatus": "RESERVED,ENTRANCE,LEAVING",
"page": 0,
"size": 3600
}
logger.info(f"예약 조회: date={date}, officeId={office_id}")
response = requests.get(
url,
headers=self.login_manager.get_headers(),
params=params,
verify=False
)
if response.status_code == 200:
reservations = response.json()
logger.info(f"예약 {len(reservations)}개 조회 완료")
return reservations
else:
logger.warning(f"예약 조회 실패: {response.status_code}")
return []
def create_reservation(self, room: dict, date: str, start_time: str,
end_time: str, title: str = "회의"):
"""
예약 생성
Args:
room: 회의실 정보 딕셔너리
date: 날짜 (YYYY-MM-DD)
start_time: 시작 시간 (HH:MM)
end_time: 종료 시간 (HH:MM)
title: 회의 제목
Returns:
requests.Response: API 응답 객체
"""
url = f"{self.base_url}/room/api/v1/reservations"
reservation_data = {
"id": "",
"title": title,
"startDateTime": f"{date} {start_time}",
"endDateTime": f"{date} {end_time}",
"organizerId": self.config.USER_ID,
"organizerName": self.config.USER_NAME,
"organizerGroupId": self.config.GROUP_ID,
"organizerGroupName": self.config.GROUP_NAME,
"status": "RESERVED",
"useAllDay": False,
"useRecurrence": False,
"useResponse": False,
"eventId": "",
"visibility": None,
"recurrence": {},
"reservationTargets": [{
"roomId": room['id'],
"attendees": [{
"attendeeId": self.config.USER_ID,
"attendeeType": "INNER_PERSON",
"displayName": f"{self.config.USER_NAME} 전임",
"companyName": self.config.GROUP_NAME,
"email": "",
"mobileNo": ""
}]
}]
}
logger.info(f"예약 생성: {room['name']}, {date} {start_time}-{end_time}")
response = requests.post(
url,
headers=self.login_manager.get_headers(),
json=reservation_data,
verify=False
)
if response.status_code == 201:
logger.info("예약 생성 성공")
else:
logger.error(f"예약 생성 실패: {response.status_code}")
return response