{"id":31559085,"url":"https://github.com/shasoka/test_for_hitalent","last_synced_at":"2026-05-08T07:32:36.887Z","repository":{"id":316495567,"uuid":"1063586505","full_name":"shasoka/test_for_hitalent","owner":"shasoka","description":"Тестовое задание на позицию \"Junior Python разработчик\" в компании Hitalent 🤐","archived":false,"fork":false,"pushed_at":"2025-09-24T22:53:33.000Z","size":85,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-05T01:19:21.617Z","etag":null,"topics":["alembic","asyncpg","docker","fastapi","postgresql","pydantic","pytest","rest-api","sqlalchemy"],"latest_commit_sha":null,"homepage":"","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":null,"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-09-24T20:47:31.000Z","updated_at":"2025-09-24T22:53:36.000Z","dependencies_parsed_at":"2025-09-25T00:24:00.552Z","dependency_job_id":"3c2390c1-e9c4-4360-8360-16d9afae0555","html_url":"https://github.com/shasoka/test_for_hitalent","commit_stats":null,"previous_names":["shasoka/test_for_hitalent"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/shasoka/test_for_hitalent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shasoka%2Ftest_for_hitalent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shasoka%2Ftest_for_hitalent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shasoka%2Ftest_for_hitalent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shasoka%2Ftest_for_hitalent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shasoka","download_url":"https://codeload.github.com/shasoka/test_for_hitalent/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shasoka%2Ftest_for_hitalent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32771007,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T02:36:36.067Z","status":"ssl_error","status_checked_at":"2026-05-08T02:36:07.210Z","response_time":54,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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","docker","fastapi","postgresql","pydantic","pytest","rest-api","sqlalchemy"],"created_at":"2025-10-05T01:13:42.211Z","updated_at":"2026-05-08T07:32:36.878Z","avatar_url":"https://github.com/shasoka.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Тестовое задание: API-сервис для вопросов и ответов\n\n### 1. Развертывание\n1. В `./app/` создать `.env` файл с содержимым вида:\n```dotenv\n# Переменные для pydantic-settings\nAPP_CONFIG__DB__URL=postgresql+asyncpg://mega_usr:super_pass@db:5432/cool_db\n\n# Переменные для docker-compose\nPOSTGRES_USER=mega_usr\nPOSTGRES_PASSWORD=super_pass\nPOSTGRES_DB=cool_db\n```\n2. Для обычного запуска - из корня проекта:\n```bash\ndocker compose -f docker-compose.yaml -p hitalent_prod up --build -d\n```\nИнтерактивная документация `Swagger UI` будет доступна по адресу [`http://localhost:8000/`](http://localhost:8000/) (приложение само сделает редирект на `/docs`).\n\nДля прогона тестов - тоже из корня проекта:\n```bash\ndocker compose -f docker-compose.test.yaml -p hitalent_test up --build --abort-on-container-exit test-fastapi\n```\nЗдесь `--abort-on-container-exit` должен положить оба контейнера (и БД, и само приложение), но для чистоты логов я делал `attach` только к контейнеру с приложением (`test-fastapi`), поэтому БД остается жить. Можно не делать `attach`, тогда оба контейнера исправно остановятся.\n\nПосле завершения тестов:\n```bash\ndocker compose -f docker-compose.test.yaml -p hitalent_test down -v\n```\n`hitalent_prod` и `hitalent_test` - названия групп контейнеров, они могут быть любыми. После каждого тестового прогона НЕ обязательно ронять контейнеры с `-v`, т. к. БД от старта к старту будет чистая, но можно делать (и я делал) для уверенности в результате 🙂\n\n### 2. Тезисно о проекте\n- 📚 Стек: `FastAPI`, `SQLAlchemy` с асинхронным двжиком `asyncpg`, `Pydantic` и `pydantic-settings` для конфигурации, для миграций использовал `Alembic`, тесты с `pytest` и `pytest-asyncio`, пакетный менеджер `poetry`.\n- ✍️ Ко всему написаны docstring'и (кроме тестов и интерактивной документации, решил не тратить время на `Given-When-Then` и `Swagger` и сдать задание раньше).\n- 🧪 Интеграционные тесты для всех кейсов `Questions API` (`Answers API` обделил по той же причине, что и документацию к тестам).\n- 📃 Имеется логгер в файл (без временной ротации). Логи хранятся в корне проекта, поэтому можно:\n```bash\ndocker exec -it api_service tail -n 100 ../app.log\n```\n- 🤓 Соблюдены все функциональные и нефункциональные требования, а также рекомендации на тему чистоты и читаемости кода.\n- 😶‍🌫️ `README` писал сам!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshasoka%2Ftest_for_hitalent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshasoka%2Ftest_for_hitalent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshasoka%2Ftest_for_hitalent/lists"}