인프런 커뮤니티 질문&답변
4주 2회차 과제 질문
해결된 질문
작성
·
15
답변 3
0
작가님 빠른 답변 감사 드립니다!
죄송합니다. 제가 파이썬과 Fast API 입문한 지 얼마 안되서 그런지 아직 과제 요구 사항이 이해가 잘 되지 않습니다 ㅜㅜ.
아래 책의 예제 test_timeslot_api.py 에서 작가님 말씀을 참조하여, 18시 - 19시 정각 타임 슬롯을 먼저 생성 후, 테스트 케이스로 18시 30분 부터 19시 10분까지 진행되는 타임슬롯을 추가 하려는 테스트를 해보았는데, 중복 검사 테스트를 통과 하였습니다.
책 309쪽에서 작가님이 제공해주신 아래 코드가 모든 타임 슬롯 중복 검사를 잘 하는 것 같습니다.
stmt = select(TimeSlot).where(
and_(
TimeSlot.calendar_id == user.calendar.id,
TimeSlot.start_time < payload.end_time,
TimeSlot.end_time > payload.start_time
)
)
result = await session.execute(stmt)
existing_time_slots = result.scalars().all()
for existing_time_slot in existing_time_slots:
if any(day in existing_time_slot.weekdays for day in payload.weekdays):
raise TimeSlotOverlapError()@pytest.mark.parametrize("start_time, end_time, weekdays, expected_status_code", [
(time(18, 30), time(19, 10), [calendar.MONDAY], status.HTTP_422_UNPROCESSABLE_CONTENT),
])
@pytest.mark.usefixtures("host_user_calendar")
async def test_겹치는_시간대가_있는_경우_HTTP_422_응답을_한다(
client_with_auth: TestClient,
start_time: time,
end_time: time,
weekdays: list[int],
expected_status_code: int,
):
# 첫 번째 타임슬롯 생성
payload = {
"start_time": time(18, 00).isoformat(),
"end_time": time(19, 00).isoformat(),
"weekdays": [calendar.MONDAY, calendar.TUESDAY, calendar.WEDNESDAY],
}
response = client_with_auth.post("/time-slots", json=payload)
assert response.status_code == status.HTTP_201_CREATED
# 두 번째 타임슬롯 생성 시도
payload = {
"start_time": start_time.isoformat(),
"end_time": end_time.isoformat(),
"weekdays": weekdays,
}
print (payload)
response = client_with_auth.post("/time-slots", json=payload)
assert response.status_code == expected_status_code
0
책에서는 일정이 정각에 시작되어 한 시간 동안 진행된다는 전제로 타임슬롯의 시간 중복 검사를 구현했습니다. 그래서 18시 30분에 시작해서 40분동안 하는 타임슬롯의 경우, 책에 나온 질의문으로는 중복 검사가 완전히 되지 않아요. 과제는 이에 대한 구현을 내드린 거예요. 🙂
0
안녕하세요, 인프런 AI 인턴입니다. 김도균님.
FastAPI 과제의 코드 부분에서 궁금증이 생기신 것 같습니다. 특히, 책 309쪽의 “이미 존재하는 타임슬롯과 겹치는지 확인”이라는 코드 부분이 질문의 핵심이신 것 같습니다.
코드의 핵심 기능
해당 코드는 타임슬롯의 중복 여부를 확인하는 부분입니다. 이 기능은 주로 데이터베이스에 새로운 타임슬롯을 추가하기 전, 이미 존재하는 타임슬롯과 겹치는지를 검사하여 불필요한 중복을 방지하는 역할을 합니다. 구체적으로는 다음과 같은 논리로 동작합니다:
- 존재 여부 확인: 데이터베이스에서 동일한 요일 및 시간대에 이미 타임슬롯이 존재하는지 확인합니다.
- 중복 방지: 존재할 경우, 중복 타임슬롯 추가를 방지하기 위해 오류를 발생시킵니다.
과제의 요구 사항과의 차이점
과제의 요구 사항은 단순한 중복 확인 이상의 기능을 요구할 수 있습니다. 예를 들어, 타임슬롯 수정 시 새로운 요일 추가 및 삭제, 또는 특정 시간대에 대한 상세한 정책 구현이 필요할 수도 있습니다. 책에 제공된 기본 코드는 그러한 상위 조건을 바탕으로 확장될 수 있는 기초를 제공합니다.
아래의 관련 질문들을 참고하면, 과제의 요구 사항과 해당 코드의 의도를 더 깊이 이해하는 데 도움이 될 것입니다:
- 4주 2회차 과제 관련 질문 및 답변
- 타임슬롯 관리 시 고려해야 할 사항
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





아, 이런. 제가 강의에 내용을 잘못 담았네요. 말씀하신 게 맞습니다.
제가 과제에서 의도하려던 코드는 다음과 같았습니다.
그래놓고 정작 화면엔 이 코드를 넣지 않아서 정상 동작하는 코드를 전제로 설명한 상황이 되었네요. 🫠 대본을 읽으면서 진행해서 코드를 미처 못챙겼습니다.
혼란을 드려 죄송합니다. ㅜㅜ 강의 영상을 손봐야겠네요.