# 대기자 관리 화면 평일/주말 클래스 구분 수정 완료 ## 문제점 평일/주말 클래스 구분이 적용된 후, 대기자 관리 화면에서 오늘 요일에 운영되지 않는 클래스도 표시되는 문제 발생 **예시:** - 오늘이 토요일인데 평일 클래스(월-금)도 표시됨 - 오늘이 월요일인데 주말 클래스(토-일)도 표시됨 ## 수정 내용 ### 1. 백엔드 수정 - [routers/waiting.py](routers/waiting.py:343-363) #### `/api/waiting/list/by-class` 엔드포인트 수정 **변경 전:** ```python classes = db.query(ClassInfo).filter( ClassInfo.is_active == True, ClassInfo.store_id == current_store.id ).order_by(ClassInfo.class_number).all() ``` **변경 후:** ```python # 모든 활성 클래스 조회 classes_raw = db.query(ClassInfo).filter( ClassInfo.is_active == True, ClassInfo.store_id == current_store.id ).order_by(ClassInfo.class_number).all() # 헬퍼 함수를 사용하여 오늘 요일에 맞는 클래스만 필터링 classes = filter_classes_by_weekday(classes_raw, business_date) ``` **효과:** - 대기자 관리 화면의 클래스 탭에 오늘 운영하는 클래스만 표시 - `filter_classes_by_weekday()` 함수는 이미 waiting.py에 정의되어 있음 ### 2. 프론트엔드 수정 - [templates/manage.html](templates/manage.html) #### 요일 필터링 함수 추가 (lines 472-501) ```javascript // 요일 매핑 const WEEKDAY_MAP = { 0: "mon", // Monday 1: "tue", // Tuesday 2: "wed", // Wednesday 3: "thu", // Thursday 4: "fri", // Friday 5: "sat", // Saturday 6: "sun" // Sunday }; // 오늘 요일에 맞는 클래스만 필터링 function filterClassesByToday(classList) { const today = new Date(); const weekday = WEEKDAY_MAP[today.getDay()]; return classList.filter(cls => { // weekday_schedule이 없으면 모든 요일 운영으로 간주 if (!cls.weekday_schedule) { return true; } const schedule = typeof cls.weekday_schedule === 'string' ? JSON.parse(cls.weekday_schedule) : cls.weekday_schedule; // 해당 요일이 활성화되어 있으면 포함 return schedule[weekday] === true; }); } ``` #### updateClassCounts() 함수 수정 (line 633-634) **변경 전:** ```javascript const allActiveClasses = await fetch('/api/classes/', { headers: getHeaders() }).then(r => r.json()); allActiveClasses.forEach(cls => { ``` **변경 후:** ```javascript const allActiveClasses = await fetch('/api/classes/', { headers: getHeaders() }).then(r => r.json()); // 오늘 요일에 운영되는 클래스만 필터링 const todayClasses = filterClassesByToday(allActiveClasses); todayClasses.forEach(cls => { ``` **효과:** - 마감된 교시 중 대기자가 없는 클래스를 추가할 때도 오늘 운영하는 클래스만 추가 ### 3. 프론트엔드 수정 - [templates/reception.html](templates/reception.html) #### 요일 필터링 함수 추가 (lines 257-286) 동일한 `WEEKDAY_MAP`과 `filterClassesByToday()` 함수 추가 #### loadWaitingStatus() 함수 수정 (line 330-332) **변경 전:** ```javascript const classesResponse = await fetch('/api/classes/', { headers: getHeaders() }); const classes = await classesResponse.json(); ``` **변경 후:** ```javascript const classesResponse = await fetch('/api/classes/', { headers: getHeaders() }); const allClasses = await classesResponse.json(); // 오늘 요일에 운영되는 클래스만 필터링 const classes = filterClassesByToday(allClasses); ``` **효과:** - 마지막 교시 정원 체크 시 오늘 운영하는 클래스 중에서만 마지막 교시 판단 - 주말에는 주말 클래스 중 마지막 교시, 평일에는 평일 클래스 중 마지막 교시 ## 동작 방식 ### 백엔드 필터링 (routers/waiting.py) 1. 데이터베이스에서 모든 활성 클래스 조회 2. `filter_classes_by_weekday(classes, business_date)` 호출 3. business_date의 요일을 확인 (월=0, 화=1, ..., 일=6) 4. 각 클래스의 `weekday_schedule` JSON 파싱 5. 해당 요일이 `true`인 클래스만 반환 ### 프론트엔드 필터링 (manage.html, reception.html) 1. API에서 모든 활성 클래스 조회 2. `filterClassesByToday(classList)` 호출 3. 현재 날짜의 요일 확인 4. 각 클래스의 `weekday_schedule` 파싱 5. 해당 요일이 `true`인 클래스만 반환 ## 검증 방법 ### 1. 평일 테스트 (월-금) ```bash # 데이터베이스에서 평일 클래스 확인 sqlite3 waiting_system.db "SELECT id, class_name, class_type, weekday_schedule FROM class_info WHERE is_active = 1;" ``` **예상 결과:** - 대기자 관리 화면: 평일 클래스(weekday)와 전체 클래스(all)만 표시 - 주말 클래스(weekend)는 표시되지 않음 ### 2. 주말 테스트 (토-일) **예상 결과:** - 대기자 관리 화면: 주말 클래스(weekend)와 전체 클래스(all)만 표시 - 평일 클래스(weekday)는 표시되지 않음 ### 3. API 테스트 ```bash # 대기자 관리 화면에서 사용하는 API curl -H "Cookie: access_token=..." http://localhost:8000/api/waiting/list/by-class # 반환되는 클래스들의 weekday_schedule 확인 # 오늘 요일이 활성화된 클래스만 포함되어야 함 ``` ## 영향 범위 ### 수정된 파일 1. ✅ `routers/waiting.py` - 백엔드 API 엔드포인트 2. ✅ `templates/manage.html` - 대기자 관리 화면 3. ✅ `templates/reception.html` - 대기 접수 화면 ### 영향받지 않는 기능 - ✅ 대기 등록: 이미 `filter_classes_by_weekday()` 사용 중 - ✅ 대기 현황판: 이미 `filter_classes_by_weekday()` 사용 중 - ✅ 클래스 관리: class_type별 필터링 이미 지원 ## 결론 **평일/주말 클래스 구분이 전체 시스템에 완벽하게 적용되었습니다:** 1. ✅ 데이터베이스: class_type과 weekday_schedule로 구분 저장 2. ✅ 클래스 관리: 평일/주말/전체 타입별 생성 및 조회 3. ✅ 대기 등록: 오늘 요일에 맞는 클래스에만 배정 4. ✅ 대기 현황판: 오늘 요일에 운영하는 클래스만 표시 5. ✅ 대기자 관리: 오늘 요일에 운영하는 클래스만 표시 6. ✅ 대기 접수: 오늘 요일에 운영하는 클래스만 고려 **모든 화면에서 오늘 요일에 맞는 클래스만 표시되고 작동합니다.**