|
1 | | -# timetable-backend |
2 | | -Бэкэнд сервиса расписания студентов физфака |
| 1 | +# Сервис расписания |
3 | 2 |
|
4 | | -# Установка |
5 | | -## Google API |
6 | | -* Чтобы подключить Google API, нужно создать приложение в google cloud console , получить client_secret.json |
7 | | -и закинуть его в репозиторий |
| 3 | +Серверная часть сервиса хранения и управления информацией о расписании |
8 | 4 |
|
9 | | -* https://developers.google.com/calendar/api/quickstart/python |
| 5 | +## Функционал |
| 6 | +1. Управление учебными группами, аудиториями |
| 7 | +2. Управление событями, комменатриями к событиям |
| 8 | +3. Управление преподавателями, фотографиями преподователей и комментариями к преподавателям |
10 | 9 |
|
11 | | -## dotenv |
12 | | -* Переименовать `.env.example` в `.env` |
13 | | -* Внести в `.env` корректные переменные окружения |
| 10 | +- Про понятия использоованные в этом пункте можно почитать ниже(см. Основные абстракции) |
14 | 11 |
|
15 | 12 | ## Запуск |
16 | | -```console |
17 | | -foo@bar:~$ python3 -m venv venv |
18 | | -foo@bar:~$ pip install -r requirements.txt |
19 | | -foo@bar:~$ uvicorn --reload --log-level debug calendar_backend.routes.base:app |
| 13 | + |
| 14 | +1. Перейдите в папку проекта |
| 15 | + |
| 16 | +2. Создайте виртуальное окружение командой и активируйте его: |
| 17 | + ```console |
| 18 | + foo@bar:~$ python3 -m venv venv |
| 19 | + foo@bar:~$ source ./venv/bin/activate # На MacOS и Linux |
| 20 | + foo@bar:~$ venv\Scripts\activate # На Windows |
| 21 | + ``` |
| 22 | + |
| 23 | +3. Установите библиотеки |
| 24 | + ```console |
| 25 | + foo@bar:~$ pip install -r requirements.txt |
| 26 | + foo@bar:~$ pip install -r requirements.dev.txt |
| 27 | + ``` |
| 28 | +4. Запускайте приложение! |
| 29 | + ```console |
| 30 | + foo@bar:~$ python -m calendar_backend |
| 31 | + ``` |
| 32 | + |
| 33 | +## ENV-variables description |
| 34 | + |
| 35 | +- `DB_DSN=postgresql://postgres@localhost:5432/postgres` – Данные для подключения к БД |
| 36 | +- `STATIC_PATH` - путь до папки, в которой лежит статика. например, фотографии преподавателей |
| 37 | +- `REQUIRE_REVIEW_PHOTOS` - требовать ли ревью фотографии преподавателя(Если нет, то она сразу ппоявится в выдаче. Если да, то нужно будет подтверждение этой фотографии от пользователя с достаточными скоупами) |
| 38 | +- `REQUIRE_REVIEW_LECTURER_COMMENT` - требовать ли ревью комментариев к преподавателям(аналогично `REQUIRE_REVIEW_PHOTOS`) |
| 39 | +- `REQUIRE_REVIEW_EVENT_COMMENT`- требовать ли ревью комментариев к событиям(аналогично `REQUIRE_REVIEW_PHOTOS`) |
| 40 | +- `SUPPORTED_FILE_EXTENSIONS` - поддеедживаемые форматы файлов. На данный момент форматы конкретно изображений. |
| 41 | +- Остальные общие для всех АПИ параметры описаны [тут](https://github.com/profcomff/.github/wiki/%5Bbackend%5D-Настройки-приложения) |
| 42 | + |
| 43 | +## Основные абстракции |
| 44 | + |
| 45 | +- `Учебная группа`. Имеет поля: номер, имя. В имя записывается название кафедры. В номер - номер группы, например 442м |
| 46 | +- `Преподаватель`. Имеет поля: Имя, Фамилия, Отчество, Описание. Описание можно загружать текстом в формате .md |
| 47 | +- `Фотография преподавателя`. Имеет отношение к конкретному преподавателю. Загрузить может любой пользователь и в зависимости от настроек приложения(см ENV-variables description) может выдаваться по запросу сразу или после аппрува этой фотографии от модератора. Ревью может быть как положительным, так и отрицательным. |
| 48 | +- `Комментарий к преподавателю`. Имеет отношение к конкретному преподавателю. Загрузить может любой пользователь и в зависимости от настроек приложения(см ENV-variables description) может выдаваться по запросу сразу или после аппрува этого комментария от модератора. Ревью может быть как положительным, так и отрицательным. |
| 49 | +- `Аудитория`. Имеет поля: номер и направление(север, юг), здание, урл до карты здания в Яндекс картах, например. |
| 50 | +- `Событие`. Одно событие может происходить сразу в нескольких аудиториям, сразу для нескольких групп, несколькими преподавателями. Событие имеет название, время начала и конца. Событие может быть не только парой, но и чем то иным. Например, пара - это событие. Мероприятие "Первый снег" - это событие |
| 51 | +- `Комментарий к событию`. Имеет отношение к конкретному событию. Загрузить может любой пользователь и в зависимости от настроек приложения(см ENV-variables description) может выдаваться по запросу сразу или после аппрува этого комментария от модератора. Ревью может быть как положительным, так и отрицательным. |
| 52 | + |
| 53 | + |
| 54 | +## Сценарий использования |
| 55 | + |
| 56 | +### Создать группу |
| 57 | + |
| 58 | +Дёрнуть ручку `POST /group`. вы передаете |
| 59 | +```json |
| 60 | +{ |
| 61 | + "name": "string", // название кафедры |
| 62 | + "number": "string" // номер группы |
| 63 | +} |
| 64 | +``` |
| 65 | + |
| 66 | +### Создать аудиторию |
| 67 | + |
| 68 | +Дёрнуть ручку `POST /room`. вы передаете |
| 69 | +```json |
| 70 | +{ |
| 71 | + "name": "string", // название аудитории |
| 72 | + "building": "string", // название здания (например, Физический факультет) |
| 73 | + "building_url": "string", // урл до карты здания |
| 74 | + "direction": "North" // север/юг(если здание == Физический факультет) |
| 75 | +} |
| 76 | +``` |
| 77 | + |
| 78 | +### Создать преподавателя |
| 79 | + |
| 80 | +Дёрнуть ручку `POST /lecturer`. вы передаете |
| 81 | +```json |
| 82 | +{ |
| 83 | + "first_name": "string", // имя |
| 84 | + "middle_name": "string", // фамилия |
| 85 | + "last_name": "string", // отчество |
| 86 | + "description": "string" // описание в формате .md |
| 87 | +} |
| 88 | +``` |
| 89 | + |
| 90 | +### Создать событие |
| 91 | + |
| 92 | +Дёрнуть ручку `POST /event`. вы передаете |
| 93 | +```json |
| 94 | +{ |
| 95 | + "name": "string", // название |
| 96 | + "room_id": [0], // айдишники аудиторий, в которых оно проходит |
| 97 | + "group_id": [0], // айдишники групп, у которых оно проходит |
| 98 | + "lecturer_id": [0], // айдишники преподавателей, которые его ведут |
| 99 | + "start_ts": "2023-10-29T06:07:09.827Z", // время начала |
| 100 | + "end_ts": "2023-10-29T06:07:09.827Z" // время конца |
| 101 | +} |
| 102 | +``` |
| 103 | + |
| 104 | +### Получить список необработнных модераторами фотографий преподавателей |
| 105 | + |
| 106 | +Дёрнуть ручку `GET /lecturer/photo/review` |
| 107 | + |
| 108 | +### Ревью фотографии |
| 109 | + |
| 110 | +Дёрнуть ручку `POST /lecturer/photo/review/{id}`. вы передаете |
| 111 | +```json |
| 112 | +{ |
| 113 | + "action": "Approved" // Подтвердить фотографии или ("Declined") |
| 114 | +} |
20 | 115 | ``` |
| 116 | + |
| 117 | +### Ревью комментария |
| 118 | + |
| 119 | +Дёрнуть ручку `POST /lecturer/{lecturer_id}/comment/{id}/review`. вы передаете action в query-string. С комментариями к событиям аналогично |
| 120 | + |
| 121 | +## Contributing |
| 122 | + |
| 123 | +- Основная [информация](https://github.com/profcomff/.github/wiki/%255Bdev%255D-Backend-%25D1%2580%25D0%25B0%25D0%25B7%25D1%2580%25D0%25B0%25D0%25B1%25D0%25BE%25D1%2582%25D0%25BA%25D0%25B0) по разработке наших приложений |
| 124 | + |
| 125 | +- [Ссылка](https://github.com/profcomff/timetable-api/blob/main/CONTRIBUTING.md) на страницу с информацией по разработке timetable-api |
| 126 | + |
| 127 | + |
0 commit comments