- Add main application files (main.py, models.py, schemas.py, etc.) - Add routers for all features (waiting, attendance, members, etc.) - Add HTML templates for admin and user interfaces - Add migration scripts and utility files - Add Docker configuration - Add documentation files - Add .gitignore to exclude database and cache files 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
6.3 KiB
6.3 KiB
대기자 관리 화면 평일/주말 클래스 구분 수정 완료
문제점
평일/주말 클래스 구분이 적용된 후, 대기자 관리 화면에서 오늘 요일에 운영되지 않는 클래스도 표시되는 문제 발생
예시:
- 오늘이 토요일인데 평일 클래스(월-금)도 표시됨
- 오늘이 월요일인데 주말 클래스(토-일)도 표시됨
수정 내용
1. 백엔드 수정 - routers/waiting.py
/api/waiting/list/by-class 엔드포인트 수정
변경 전:
classes = db.query(ClassInfo).filter(
ClassInfo.is_active == True,
ClassInfo.store_id == current_store.id
).order_by(ClassInfo.class_number).all()
변경 후:
# 모든 활성 클래스 조회
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
요일 필터링 함수 추가 (lines 472-501)
// 요일 매핑
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)
변경 전:
const allActiveClasses = await fetch('/api/classes/', { headers: getHeaders() }).then(r => r.json());
allActiveClasses.forEach(cls => {
변경 후:
const allActiveClasses = await fetch('/api/classes/', { headers: getHeaders() }).then(r => r.json());
// 오늘 요일에 운영되는 클래스만 필터링
const todayClasses = filterClassesByToday(allActiveClasses);
todayClasses.forEach(cls => {
효과:
- 마감된 교시 중 대기자가 없는 클래스를 추가할 때도 오늘 운영하는 클래스만 추가
3. 프론트엔드 수정 - templates/reception.html
요일 필터링 함수 추가 (lines 257-286)
동일한 WEEKDAY_MAP과 filterClassesByToday() 함수 추가
loadWaitingStatus() 함수 수정 (line 330-332)
변경 전:
const classesResponse = await fetch('/api/classes/', {
headers: getHeaders()
});
const classes = await classesResponse.json();
변경 후:
const classesResponse = await fetch('/api/classes/', {
headers: getHeaders()
});
const allClasses = await classesResponse.json();
// 오늘 요일에 운영되는 클래스만 필터링
const classes = filterClassesByToday(allClasses);
효과:
- 마지막 교시 정원 체크 시 오늘 운영하는 클래스 중에서만 마지막 교시 판단
- 주말에는 주말 클래스 중 마지막 교시, 평일에는 평일 클래스 중 마지막 교시
동작 방식
백엔드 필터링 (routers/waiting.py)
- 데이터베이스에서 모든 활성 클래스 조회
filter_classes_by_weekday(classes, business_date)호출- business_date의 요일을 확인 (월=0, 화=1, ..., 일=6)
- 각 클래스의
weekday_scheduleJSON 파싱 - 해당 요일이
true인 클래스만 반환
프론트엔드 필터링 (manage.html, reception.html)
- API에서 모든 활성 클래스 조회
filterClassesByToday(classList)호출- 현재 날짜의 요일 확인
- 각 클래스의
weekday_schedule파싱 - 해당 요일이
true인 클래스만 반환
검증 방법
1. 평일 테스트 (월-금)
# 데이터베이스에서 평일 클래스 확인
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 테스트
# 대기자 관리 화면에서 사용하는 API
curl -H "Cookie: access_token=..." http://localhost:8000/api/waiting/list/by-class
# 반환되는 클래스들의 weekday_schedule 확인
# 오늘 요일이 활성화된 클래스만 포함되어야 함
영향 범위
수정된 파일
- ✅
routers/waiting.py- 백엔드 API 엔드포인트 - ✅
templates/manage.html- 대기자 관리 화면 - ✅
templates/reception.html- 대기 접수 화면
영향받지 않는 기능
- ✅ 대기 등록: 이미
filter_classes_by_weekday()사용 중 - ✅ 대기 현황판: 이미
filter_classes_by_weekday()사용 중 - ✅ 클래스 관리: class_type별 필터링 이미 지원
결론
평일/주말 클래스 구분이 전체 시스템에 완벽하게 적용되었습니다:
- ✅ 데이터베이스: class_type과 weekday_schedule로 구분 저장
- ✅ 클래스 관리: 평일/주말/전체 타입별 생성 및 조회
- ✅ 대기 등록: 오늘 요일에 맞는 클래스에만 배정
- ✅ 대기 현황판: 오늘 요일에 운영하는 클래스만 표시
- ✅ 대기자 관리: 오늘 요일에 운영하는 클래스만 표시
- ✅ 대기 접수: 오늘 요일에 운영하는 클래스만 고려
모든 화면에서 오늘 요일에 맞는 클래스만 표시되고 작동합니다.