From ed54a0aa710fee9207bd18af76a62c610b7f7bec Mon Sep 17 00:00:00 2001 From: quaduzi Date: Fri, 30 Jun 2023 14:16:21 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=D0=BE=20=D1=81?= =?UTF-8?q?=D0=BB=D0=BE=D1=82=D0=B0=D0=BC=D0=B8=20=D0=BF=D0=BE=20id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/main.py b/src/main.py index 604c5f5..187073c 100644 --- a/src/main.py +++ b/src/main.py @@ -148,8 +148,8 @@ def create_calendar_slots(datetime_start: datetime, timezone: str, slot_length_m return events -@app.post('/calendar_events/busy', response_model=List[CalendarEvent]) -def mark_busy_calendar_slot( +@app.get('/calendar_events/free_slots', response_model=List[CalendarEvent]) +def get_free_calendar_slots( lower_bound: datetime = None, upper_bound: datetime = None, service: Resource = Depends(get_calendar_service) @@ -188,6 +188,60 @@ def mark_busy_calendar_slot( return event +@app.get('/calendar_events/{slot_id}', response_model=CalendarEvent) +def get_slot_by_id( + slot_id: str, + service: Resource = Depends(get_calendar_service) +): + event_dict = service.events().get( + calendarId=CALENDAR_ID, + eventId=slot_id + ) + event = CalendarEvent(**event_dict) + + if not event: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Slot not found") + + if event.summary != TITLE_FREE: + raise HTTPException(status_code=status.HTTP_409_CONFLICT, detail="Slot is busy") + + return event + + +@app.post('/calendar_events/{slot_id}/mark_busy', response_model=CalendarEvent) +def mark_busy_calendar_slot_by_id( + slot_id: str, + description: str | None = None, + service: Resource = Depends(get_calendar_service) +): + event = get_slot_by_id(slot_id=slot_id) + + event.summary = TITLE_BUSY + event.colorId = COLOR_BUSY + if description: + event.description = description + + service.events().update(calendarId=CALENDAR_ID, eventId=event.id, body=event.dict(exclude_unset=True)).execute() + + return event + + +@app.post('/calendar_events/{slot_id}/mark_free', response_model=CalendarEvent) +def mark_free_calendar_slot_by_id( + slot_id: str, + service: Resource = Depends(get_calendar_service) +): + event = get_slot_by_id(slot_id=slot_id) + + event.summary = TITLE_FREE + event.colorId = COLOR_FREE + event.description = " " + + service.events().update(calendarId=CALENDAR_ID, eventId=event.id, body=event.dict(exclude_unset=True)).execute() + + return event + + @app.post('/calendar_events/mark_free', response_model=CalendarEvent) def mark_free_calendar_slot( lower_bound: datetime = None,