Skip to content

Добавлена ручка /event/ical для получения событий из 3'd party источников - #134

Open
CaseAsLimbo wants to merge 5 commits into
mainfrom
feat/add-3d-party-import-route
Open

Добавлена ручка /event/ical для получения событий из 3'd party источников#134
CaseAsLimbo wants to merge 5 commits into
mainfrom
feat/add-3d-party-import-route

Conversation

@CaseAsLimbo

@CaseAsLimbo CaseAsLimbo commented Sep 5, 2026

Copy link
Copy Markdown

Изменения

  • Добавлена ручка /event/ical, парсящая полученный через multipart/form-data .ical или .ics файл и создающая на его основе события/событие в БД.
  • добавлен модуль calendar_backend/utils/services.py; в него вынесена логика двух эндпоинтов: POST /event/repeating и POST /event/bulk, это сделано для переиспользования их логики в ручке получения событий из 3'd party.

Детали реализации

  • group_id обязательный параметр, иначе поднимаем 403 Forbidden (пока не менял логику в соответствии с этим в /event/bulk и /event/repeating -- исключение поднимается только в /event/ical)

  • Для полей group_id, room_id и lecturer_id предполагается создание кастомных полей в формате Icalendar(отдающая сторона должна о них знать и передавать). На данный момент названия кастомных полей зашиты в логике ручке следующим образом

  • ручка `/event/ical' может парсить обычные и повторяющееся события

  • На данный момент из .ical файла берется поле RRULE, а из него INTERVAL для repeat_timedelta_days и UNTIL для repeat_until_ts. Однако формат RRULE позволяет очень гибко настраивать даты проведения событий. Возможно имеет смысл переработать способ создания повторяющихся событий, делая их не только интервальными, но и, например, в конкретные дни недели в течении месяца(ical позволяет это описать).

Cсылки на доку

В планах

  • Добавить проверку граничных условий
  • Добавить тесты на ручку event/ical
    • Добавить билдер ical файлов для тестов
  • Добавить логирование неудачно распраршенных(скипнутых) событий - на данный момент просто ловится исключение в блоке try-except.
  • Добавить логику частичного успеха работы эндпоинта, если были скипнуты не все события?

Check-List

  • Вы проверили свой код перед отправкой запроса?
  • Вы написали тесты к реализованным функциям?
  • Вы не забыли применить форматирование black и isort для Back-End или Prettier для Front-End?

@CaseAsLimbo CaseAsLimbo self-assigned this Sep 5, 2026
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown

💩 Code linting failed, use black and isort to fix it.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown

Code Coverage

Coverage Report
FileStmtsMissCoverMissing
calendar_backend
   __main__.py660%1–16
   exceptions.py13285%8, 14
calendar_backend/methods
   list_calendar.py1168923%29–37, 41–80, 87–110, 117–123, 130–135, 144–157, 161–172
   utils.py352626%14–19, 23–28, 34–38, 42–46, 52–56
calendar_backend/models
   base.py64198%87
calendar_backend/routes
   base.py74791%75, 80–81, 86–87, 98, 101
calendar_backend/routes/event
   comment.py47687%30, 41–43, 52, 64
   comment_review.py27485%23–29, 41
   event.py921089%39, 46–49, 54, 134–137
   user_event.py231343%31–51, 69–80
calendar_backend/routes/group
   group.py38392%26, 42, 58
calendar_backend/routes/lecturer
   comment.py48883%35, 49, 57–61, 70
   comment_review.py25484%21–29, 41
   lecturer.py60887%27, 41, 44, 54, 78–81
   photo.py43588%43, 48, 65, 76, 79
   photo_review.py512061%39–58, 75–77
calendar_backend/routes/models
   base.py60985%36–40, 43, 56, 67, 80
   event.py62395%15, 42, 60
   group.py391659%13–19, 22, 32–38, 41
   lecturer.py46296%21, 31
   room.py21195%13
calendar_backend/routes/room
   room.py39392%26, 44, 58
calendar_backend/utils
   services.py49296%53, 55
TOTAL128424881% 

Summary

Tests Skipped Failures Errors Time
34 0 💤 0 ❌ 0 🔥 7.349s ⏱️

@CaseAsLimbo
CaseAsLimbo force-pushed the feat/add-3d-party-import-route branch from ca1602f to b777d4e Compare September 9, 2026 19:41
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

💩 Code linting failed, use black and isort to fix it.

@CaseAsLimbo
CaseAsLimbo force-pushed the feat/add-3d-party-import-route branch from b777d4e to 66c18a0 Compare September 9, 2026 19:44
@CaseAsLimbo
CaseAsLimbo requested a review from petrCher September 9, 2026 20:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant