# -*- coding: utf-8 -*-
"""
회의실 API 모듈
회의실 목록 조회, 검색, 필터링 기능을 제공합니다.
"""
import logging
import requests
from urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
logger = logging.getLogger(__name__)
class RoomsAPI:
"""회의실 관련 API 클래스"""
def __init__(self, base_url: str, login_manager):
"""
Args:
base_url: 회의실 시스템 베이스 URL
login_manager: LoginManager 인스턴스
"""
self.base_url = base_url
self.login_manager = login_manager
def get_all_rooms(self, office_id: int = 2, size: int = 9999):
"""
전체 회의실 목록 조회
Args:
office_id: 사무실 ID (1:방배, 2:분당, 3:가양, 4:퓨처)
size: 조회할 최대 개수
Returns:
list: 회의실 목록
Raises:
Exception: API 호출 실패 시
"""
url = f"{self.base_url}/room/api/v1/rooms"
params = {
"officeId": office_id,
"size": size,
"valid": "true",
"sort": "name,asc"
}
logger.info(f"회의실 목록 조회: officeId={office_id}")
response = requests.get(
url,
headers=self.login_manager.get_headers(),
params=params,
verify=False
)
if response.status_code == 200:
rooms = response.json()
logger.info(f"회의실 {len(rooms)}개 조회 완료")
return rooms
else:
raise Exception(f"회의실 목록 조회 실패: {response.status_code}")
def filter_by_floor(self, rooms: list, floor_filter: str) -> list:
"""
층으로 회의실 필터링
Args:
rooms: 전체 회의실 목록
floor_filter: 층 정보 ("7층", "7F", "12F_A" 등)
Returns:
list: 필터링된 회의실 목록
"""
if not floor_filter:
return rooms
floor_filter = floor_filter.replace('층', '').strip()
filtered = [r for r in rooms if floor_filter in r['floorName']]
logger.info(f"층 필터링: {floor_filter} → {len(filtered)}개")
return filtered
def get_room_by_name(self, room_name: str, office_id: int = 2) -> dict:
"""
이름으로 회의실 찾기
Args:
room_name: 회의실 이름 (부분 일치)
office_id: 사무실 ID
Returns:
dict: 회의실 정보 (없으면 None)
"""
rooms = self.get_all_rooms(office_id)
for room in rooms:
if room_name in room['name']:
logger.info(f"회의실 발견: {room['name']}")
return room
logger.warning(f"회의실을 찾을 수 없음: {room_name}")
return None