Files
waiting-system/대기자관리_평일주말_수정완료.md
Jun-dev f699a29a85 Add waiting system application files
- 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>
2025-12-14 00:29:39 +09:00

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_MAPfilterClassesByToday() 함수 추가

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)

  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. 평일 테스트 (월-금)

# 데이터베이스에서 평일 클래스 확인
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 확인
# 오늘 요일이 활성화된 클래스만 포함되어야 함

영향 범위

수정된 파일

  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. 대기 접수: 오늘 요일에 운영하는 클래스만 고려

모든 화면에서 오늘 요일에 맞는 클래스만 표시되고 작동합니다.