Skip to content

Бэкэнд сервиса расписания студентов физфака

License

Notifications You must be signed in to change notification settings

profcomff/timetable-api

Repository files navigation

Сервис расписания

Серверная часть сервиса хранения и управления информацией о расписании

Функционал

  1. Управление учебными группами, аудиториями
  2. Управление событями, комменатриями к событиям
  3. Управление преподавателями, фотографиями преподователей и комментариями к преподавателям
  • Про понятия использоованные в этом пункте можно почитать ниже(см. Основные абстракции)

Запуск

  1. Перейдите в папку проекта

  2. Создайте виртуальное окружение командой и активируйте его:

    foo@bar:~$ python3 -m venv venv
    foo@bar:~$ source ./venv/bin/activate  # На MacOS и Linux
    foo@bar:~$ venv\Scripts\activate  # На Windows
  3. Установите библиотеки

    foo@bar:~$ pip install -r requirements.txt
    foo@bar:~$ pip install -r requirements.dev.txt
  4. Запускайте приложение!

    foo@bar:~$ python -m calendar_backend

ENV-variables description

  • DB_DSN=postgresql://postgres@localhost:5432/postgres – Данные для подключения к БД
  • STATIC_PATH - путь до папки, в которой лежит статика. например, фотографии преподавателей
  • REQUIRE_REVIEW_PHOTOS - требовать ли ревью фотографии преподавателя(Если нет, то она сразу ппоявится в выдаче. Если да, то нужно будет подтверждение этой фотографии от пользователя с достаточными скоупами)
  • REQUIRE_REVIEW_LECTURER_COMMENT - требовать ли ревью комментариев к преподавателям(аналогично REQUIRE_REVIEW_PHOTOS)
  • REQUIRE_REVIEW_EVENT_COMMENT- требовать ли ревью комментариев к событиям(аналогично REQUIRE_REVIEW_PHOTOS)
  • SUPPORTED_FILE_EXTENSIONS - поддеедживаемые форматы файлов. На данный момент форматы конкретно изображений.
  • Остальные общие для всех АПИ параметры описаны тут

Основные абстракции

  • Учебная группа. Имеет поля: номер, имя. В имя записывается название кафедры. В номер - номер группы, например 442м
  • Преподаватель. Имеет поля: Имя, Фамилия, Отчество, Описание. Описание можно загружать текстом в формате .md
  • Фотография преподавателя. Имеет отношение к конкретному преподавателю. Загрузить может любой пользователь и в зависимости от настроек приложения(см ENV-variables description) может выдаваться по запросу сразу или после аппрува этой фотографии от модератора. Ревью может быть как положительным, так и отрицательным.
  • Комментарий к преподавателю. Имеет отношение к конкретному преподавателю. Загрузить может любой пользователь и в зависимости от настроек приложения(см ENV-variables description) может выдаваться по запросу сразу или после аппрува этого комментария от модератора. Ревью может быть как положительным, так и отрицательным.
  • Аудитория. Имеет поля: номер и направление(север, юг), здание, урл до карты здания в Яндекс картах, например.
  • Событие. Одно событие может происходить сразу в нескольких аудиториям, сразу для нескольких групп, несколькими преподавателями. Событие имеет название, время начала и конца. Событие может быть не только парой, но и чем то иным. Например, пара - это событие. Мероприятие "Первый снег" - это событие
  • Комментарий к событию. Имеет отношение к конкретному событию. Загрузить может любой пользователь и в зависимости от настроек приложения(см ENV-variables description) может выдаваться по запросу сразу или после аппрува этого комментария от модератора. Ревью может быть как положительным, так и отрицательным.

Сценарий использования

Создать группу

Дёрнуть ручку POST /group. вы передаете

{
  "name": "string", // название кафедры
  "number": "string" // номер группы
}

Создать аудиторию

Дёрнуть ручку POST /room. вы передаете

{
  "name": "string", // название аудитории
  "building": "string", // название здания (например, Физический факультет)
  "building_url": "string", // урл до карты здания
  "direction": "North" // север/юг(если здание == Физический факультет)
}

Создать преподавателя

Дёрнуть ручку POST /lecturer. вы передаете

{
  "first_name": "string", // имя
  "middle_name": "string", // фамилия
  "last_name": "string", // отчество
  "description": "string" // описание в формате .md
}

Создать событие

Дёрнуть ручку POST /event. вы передаете

{
  "name": "string", // название
  "room_id": [0], // айдишники аудиторий, в которых оно проходит
  "group_id": [0], // айдишники групп, у которых оно проходит
  "lecturer_id": [0], // айдишники преподавателей, которые его ведут
  "start_ts": "2023-10-29T06:07:09.827Z", // время начала
  "end_ts": "2023-10-29T06:07:09.827Z" // время конца
}

Получить список необработнных модераторами фотографий преподавателей

Дёрнуть ручку GET /lecturer/photo/review

Ревью фотографии

Дёрнуть ручку POST /lecturer/photo/review/{id}. вы передаете

{
  "action": "Approved" // Подтвердить фотографии или ("Declined")
}

Ревью комментария

Дёрнуть ручку POST /lecturer/{lecturer_id}/comment/{id}/review. вы передаете action в query-string. С комментариями к событиям аналогично

Contributing

  • Основная информация по разработке наших приложений

  • Ссылка на страницу с информацией по разработке timetable-api