{"id":21214373,"url":"https://github.com/shasoka/equeue_backend","last_synced_at":"2026-04-16T19:36:55.944Z","repository":{"id":294074850,"uuid":"985864517","full_name":"shasoka/eQueue_backend","owner":"shasoka","description":"Серверная часть eQueue 📙","archived":false,"fork":false,"pushed_at":"2025-05-31T07:27:43.000Z","size":343,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-31T18:13:48.433Z","etag":null,"topics":["alembic","asyncpg","fastapi","moodle","poetry","postgresql","pydantic","python3","sqlalchemy","websocket"],"latest_commit_sha":null,"homepage":"https://eqapi.ru/docs#/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shasoka.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-18T17:21:45.000Z","updated_at":"2025-05-31T07:27:47.000Z","dependencies_parsed_at":"2025-05-18T20:39:09.372Z","dependency_job_id":"61a5fbd7-f81a-4238-8c01-e0700293a1c7","html_url":"https://github.com/shasoka/eQueue_backend","commit_stats":null,"previous_names":["shasoka/equeue_backend"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/shasoka/eQueue_backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shasoka%2FeQueue_backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shasoka%2FeQueue_backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shasoka%2FeQueue_backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shasoka%2FeQueue_backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shasoka","download_url":"https://codeload.github.com/shasoka/eQueue_backend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shasoka%2FeQueue_backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279015771,"owners_count":26085748,"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","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["alembic","asyncpg","fastapi","moodle","poetry","postgresql","pydantic","python3","sqlalchemy","websocket"],"created_at":"2024-11-20T21:27:36.026Z","updated_at":"2025-10-13T14:37:21.513Z","avatar_url":"https://github.com/shasoka.png","language":"Python","readme":"## ![logo](readme_images/sibfu_logo.png) Серверная часть приложения \"eQueue\"\n\n- [eQueue: что это и для кого?](#equeue-что-это-и-для-кого-)\n- [Стек](#стек-)\n- [Деплой](#деплой-)\n\n---\n\n### eQueue: что это и для кого? 🤔\n\n1. **\"Что это\"**: официальная версия - *\"Информационная система управления \n   процессом сдачи лабораторных и практических работ студентами\"*. Идея \n   состоит в том, чтобы дать возможность студентам организовывать рабочие \n   пространства, в которых они могли бы хранить информацию о предметах, \n   преподавателях, их требованиях и пр., а также, что самое важное, вести \n   живые очереди для сдачи работ. \n2. **\"Для кого\"**: целевая аудитория - студенты СФУ, т.к. на данный момент \n   приложение заточено под работу в связке с системой электронного обучения \n   СФУ ([еКурсы](https://e.sfu-kras.ru/)). На `REST API` еКурсов завязана \n   авторизация пользователей, получение студенческих групп, получение \n   доступных предметов и заданий по ним. \n\n### Стек 🔨\n\n1. **[`FastAPI=^0.115.12`](https://fastapi.tiangolo.com/)** - веб-фреймворк\n2. **[`SQLAlchemy=^2.0.40`](https://www.sqlalchemy.org/)** - ORM-библиотека\n3. **[`Pydantic=^2.11.2`](https://docs.pydantic.dev/latest/)** - библиотека \n   валидации данных\n4. **[`Uvicorn=^0.34.0`](https://www.uvicorn.org/)** - ASGI веб-сервер (dev)\n5. **[`Gunicorn=^23.0.0`](https://gunicorn.org/)** - WSGI веб-сервер (prod). \n   Для асинхронности запускается с `uvicorn workers`.\n\nВ качестве СУБД используется `PostgreSQL`.\n\nКроме вышеописанных библиотек также применялись `httpx` (асинхронные запросы к \n`REST API` еКурсов), `alembic` (миграции базы данных), `websockets` (говорит \nсам за себя; для работы с живыми очередями), `asyncpg` (асинхронный движок для \nподключения к `PostgreSQL`), `jinja2` (шаблонизатор).\n\n### Деплой 🚀\n\nПриложение развернуто на удаленном сервере. Достучаться до него можно \n[тут](https://eqapi.ru/docs/). Там же находится полностью задокументированный\n`Swagger UI` (ну, прям полностью, даже все коды ответов для каждого эндпоинта).\n\nЕсли кому-то придет в голову развернуть это, то:\n1. Клонировать репозиторий на целевую машину.\n2. Убедиться, что установлен `docker engine`.\n3. Перекреститься.\n4. В корне проекта создать `.env` файл следующего содержания:\n   ```properties\n   POSTGRES_USER=...\n   POSTGRES_PASSWORD=...\n   POSTGRES_DB=...\n   ```\n5. В папке `./app` создать второй `.env` следующего содержания:\n   ```properties\n   APP_CONFIG__DB__URL=postgresql+asyncpg://\u003cPOSTGRES_USER\u003e:\u003cPOSTGRES_PASSWORD\u003e@localhost:5432/\u003cPOSTGRES_DB\u003e\n   ```\n   Вместо значений в треугольных скобках нужно указать те же значения, что \n   лежат в первом `.env`.\n   \n   *Да, можно было бы обойтись одним файлом окружения.* \n6. В файле `./app/templates/ws_test_client.html` в строках `71:72` заменить \n   протоколы на `https` и `wss`, если привязано доменное имя и получен \n   `SSL`-сертификат (ну, и сами адреса заменить на доменное имя).\n7. Запустить `sudo bash up-linux.sh` и ждать чуда.\n8. После успешного запуска можете проверить адрес в браузере. В корне проекта \n   появится `app.log` файл с логами.\n9. Победа, поздравляю.\n\n\u003e[!CAUTION]\n\u003e Важный момент. VPS должен быть расположен в РФ (насчет Казахстана, РБ и \n\u003e прочих дружественных государств не уверен). В противном случае, еКурсы \n\u003e откажут в обслуживании и получится кирпич 🧱\n\u003e \n\u003e В данной версии приложения прокси в коде не использовались.\n\n![Bateman](readme_images/psycho.jpg)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshasoka%2Fequeue_backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshasoka%2Fequeue_backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshasoka%2Fequeue_backend/lists"}