{"id":21887204,"url":"https://github.com/profcomff/timetable-api","last_synced_at":"2025-04-15T09:50:23.989Z","repository":{"id":41846098,"uuid":"433204043","full_name":"profcomff/timetable-api","owner":"profcomff","description":"Бэкэнд сервиса расписания студентов физфака","archived":false,"fork":false,"pushed_at":"2025-03-15T12:38:59.000Z","size":286,"stargazers_count":18,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-28T18:55:14.751Z","etag":null,"topics":["timetable-service"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/profcomff.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-29T21:35:25.000Z","updated_at":"2025-03-15T12:39:01.000Z","dependencies_parsed_at":"2023-02-19T01:40:15.754Z","dependency_job_id":"6329aa01-94ff-4041-a272-2c92c1cb86c4","html_url":"https://github.com/profcomff/timetable-api","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/profcomff%2Ftimetable-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/profcomff%2Ftimetable-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/profcomff%2Ftimetable-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/profcomff%2Ftimetable-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/profcomff","download_url":"https://codeload.github.com/profcomff/timetable-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249048712,"owners_count":21204305,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["timetable-service"],"created_at":"2024-11-28T11:08:47.126Z","updated_at":"2025-04-15T09:50:23.972Z","avatar_url":"https://github.com/profcomff.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Сервис расписания\n\nСерверная часть сервиса хранения и управления информацией о расписании\n\n[\u003cimg src=\"https://cdn.profcomff.com/easycode/easycode.svg\" width=\"200\"\u003e\u003c/img\u003e](https://easycode.profcomff.com/templates/docker-fastapi/workspace?mode=manual\u0026param.Repository+URL=https://github.com/profcomff/timetable-api.git\u0026param.Working+directory=timetable-api)\n\n## Функционал\n1. Управление учебными группами, аудиториями\n2. Управление событями, комменатриями к событиям\n3. Управление преподавателями, фотографиями преподователей и комментариями к преподавателям\n\n- Про понятия использоованные в этом пункте можно почитать ниже(см. Основные абстракции)\n\n## Запуск\n\n1. Перейдите в папку проекта\n\n2. Создайте виртуальное окружение командой и активируйте его:\n    ```console\n    foo@bar:~$ python3 -m venv venv\n    foo@bar:~$ source ./venv/bin/activate  # На MacOS и Linux\n    foo@bar:~$ venv\\Scripts\\activate  # На Windows\n    ```\n\n3. Установите библиотеки\n    ```console\n    foo@bar:~$ pip install -r requirements.txt\n    foo@bar:~$ pip install -r requirements.dev.txt\n    ```\n4. Запускайте приложение!\n    ```console\n    foo@bar:~$ python -m calendar_backend\n    ```\n\n## ENV-variables description\n\n- `DB_DSN=postgresql://postgres@localhost:5432/postgres` – Данные для подключения к БД\n- `STATIC_PATH` - путь до папки, в которой лежит статика. например, фотографии преподавателей\n- `REQUIRE_REVIEW_PHOTOS` - требовать ли ревью фотографии преподавателя(Если нет, то она сразу ппоявится в выдаче. Если да, то нужно будет подтверждение этой фотографии от пользователя с достаточными скоупами)\n- `REQUIRE_REVIEW_LECTURER_COMMENT` - требовать ли ревью комментариев к преподавателям(аналогично `REQUIRE_REVIEW_PHOTOS`)\n- `REQUIRE_REVIEW_EVENT_COMMENT`- требовать ли ревью комментариев к событиям(аналогично `REQUIRE_REVIEW_PHOTOS`)\n- `SUPPORTED_FILE_EXTENSIONS` - поддеедживаемые форматы файлов. На данный момент форматы конкретно изображений.\n- Остальные общие для всех АПИ параметры описаны [тут](https://github.com/profcomff/.github/wiki/%5Bbackend%5D-Настройки-приложения)\n\n## Основные абстракции\n\n- `Учебная группа`. Имеет поля: номер, имя. В имя записывается название кафедры. В номер - номер группы, например 442м\n- `Преподаватель`. Имеет поля: Имя, Фамилия, Отчество, Описание. Описание можно загружать текстом в формате .md\n- `Фотография преподавателя`. Имеет отношение к конкретному преподавателю. Загрузить может любой пользователь и в зависимости от настроек приложения(см ENV-variables description) может выдаваться по запросу сразу или после аппрува этой фотографии от модератора. Ревью может быть как положительным, так и отрицательным.\n- `Комментарий к преподавателю`. Имеет отношение к конкретному преподавателю. Загрузить может любой пользователь и в зависимости от настроек приложения(см ENV-variables description) может выдаваться по запросу сразу или после аппрува этого комментария от модератора. Ревью может быть как положительным, так и отрицательным.\n- `Аудитория`. Имеет поля: номер и направление(север, юг), здание, урл до карты здания в Яндекс картах, например.\n- `Событие`. Одно событие может происходить сразу в нескольких аудиториям, сразу для нескольких групп, несколькими преподавателями. Событие имеет название, время начала и конца. Событие может быть не только парой, но и чем то иным. Например, пара - это событие. Мероприятие \"Первый снег\" - это событие\n- `Комментарий к событию`. Имеет отношение к конкретному событию. Загрузить может любой пользователь и в зависимости от настроек приложения(см ENV-variables description) может выдаваться по запросу сразу или после аппрува этого комментария от модератора. Ревью может быть как положительным, так и отрицательным.\n\n\n## Сценарий использования\n\n### Создать группу\n\nДёрнуть ручку `POST /group`. вы передаете\n```json\n{\n  \"name\": \"string\", // название кафедры\n  \"number\": \"string\" // номер группы\n}\n```\n\n### Создать аудиторию\n\nДёрнуть ручку `POST /room`. вы передаете\n```json\n{\n  \"name\": \"string\", // название аудитории\n  \"building\": \"string\", // название здания (например, Физический факультет)\n  \"building_url\": \"string\", // урл до карты здания\n  \"direction\": \"North\" // север/юг(если здание == Физический факультет)\n}\n```\n\n### Создать преподавателя\n\nДёрнуть ручку `POST /lecturer`. вы передаете\n```json\n{\n  \"first_name\": \"string\", // имя\n  \"middle_name\": \"string\", // фамилия\n  \"last_name\": \"string\", // отчество\n  \"description\": \"string\" // описание в формате .md\n}\n```\n\n### Создать событие\n\nДёрнуть ручку `POST /event`. вы передаете\n```json\n{\n  \"name\": \"string\", // название\n  \"room_id\": [0], // айдишники аудиторий, в которых оно проходит\n  \"group_id\": [0], // айдишники групп, у которых оно проходит\n  \"lecturer_id\": [0], // айдишники преподавателей, которые его ведут\n  \"start_ts\": \"2023-10-29T06:07:09.827Z\", // время начала\n  \"end_ts\": \"2023-10-29T06:07:09.827Z\" // время конца\n}\n```\n\n### Получить список необработнных модераторами фотографий преподавателей\n\nДёрнуть ручку `GET /lecturer/photo/review`\n\n### Ревью фотографии\n\nДёрнуть ручку `POST /lecturer/photo/review/{id}`. вы передаете\n```json\n{\n  \"action\": \"Approved\" // Подтвердить фотографии или (\"Declined\")\n}\n```\n\n### Ревью комментария\n\nДёрнуть ручку `POST /lecturer/{lecturer_id}/comment/{id}/review`. вы передаете action в query-string. С комментариями к событиям аналогично\n\n## Contributing\n\n- Основная [информация](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) по разработке наших приложений\n\n- [Ссылка](https://github.com/profcomff/timetable-api/blob/main/CONTRIBUTING.md) на страницу с информацией по разработке timetable-api\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprofcomff%2Ftimetable-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprofcomff%2Ftimetable-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprofcomff%2Ftimetable-api/lists"}