{"id":25426756,"url":"https://github.com/cdxy1/avito-test-task","last_synced_at":"2025-05-14T05:15:21.729Z","repository":{"id":277894814,"uuid":"930709163","full_name":"cdxy1/avito-test-task","owner":"cdxy1","description":"Тестовое задание","archived":false,"fork":false,"pushed_at":"2025-03-16T16:49:20.000Z","size":228,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-16T17:33:09.744Z","etag":null,"topics":["fastapi","postgres","pyhton","redis","sqlalchemy"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cdxy1.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}},"created_at":"2025-02-11T04:35:07.000Z","updated_at":"2025-03-16T16:49:23.000Z","dependencies_parsed_at":"2025-02-16T21:31:25.033Z","dependency_job_id":null,"html_url":"https://github.com/cdxy1/avito-test-task","commit_stats":null,"previous_names":["cdxy1/avito-test-task"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdxy1%2Favito-test-task","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdxy1%2Favito-test-task/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdxy1%2Favito-test-task/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdxy1%2Favito-test-task/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cdxy1","download_url":"https://codeload.github.com/cdxy1/avito-test-task/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254076851,"owners_count":22010611,"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":["fastapi","postgres","pyhton","redis","sqlalchemy"],"created_at":"2025-02-17T00:21:47.195Z","updated_at":"2025-05-14T05:15:21.696Z","avatar_url":"https://github.com/cdxy1.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Магазин мерча на FastAPI\n\nТестовое задание по созданию магазина мерча, реализованное с использованием FastAPI.\n\n## Технологии\n\n- **Python 3.12**\n- **FastAPI** — фреймворк для создания API.\n- **SQLAlchemy** — ORM для работы с базой данных.\n- **Alembic** — инструмент для миграций базы данных.\n- **Redis** — кэширование и хранение сессий.\n- **PostgreSQL** — основная база данных.\n- **Docker** — контейнеризация приложения.\n- **Pytest** — тестирование.\n- **Locust** — нагрузочное тестирование.\n\n## Зависимости\n\nПроект использует Poetry для управления зависимостями. Все зависимости перечислены в `pyproject.toml`.\n\nОсновные зависимости:\n- `fastapi`\n- `uvicorn`\n- `sqlalchemy`\n- `passlib`\n- `pyjwt`\n- `bcrypt`\n- `alembic`\n- `redis`\n- `asyncpg`\n- `psycopg2-binary`\n\nДля разработки и тестирования:\n- `ruff`\n- `aiosqlite`\n- `pytest-asyncio`\n- `httpx`\n- `pytest-cov`\n- `locust`\n\n## Установка и запуск\n\n### 1. Клонируйте репозиторий\n\n```\ngit clone https://github.com/cdxy1/avito-test-task.git\n```\n\n### 2. Установите зависимости\n\nУбедитесь, что у вас установлен Poetry. Затем выполните:\n\n```\npoetry install\n```\n\n### 3. Настройка окружения\n\nСоздайте файл `.env` в корне проекта и добавьте туда необходимые переменные окружения:\n\n### 4. Запуск с Docker\n\nПроект включает `docker-compose.yml` для запуска приложения, PostgreSQL и Redis.\n\n```\ndocker-compose up --build\n```\n\nПосле запуска приложение будет доступно по адресу: `http://localhost:8000`.\n\n### 5. Миграции базы данных\n\nДля применения миграций используйте Alembic:\n\n```\nalembic upgrade head\n```\n\n### 6. Запуск без Docker\n\nЕсли вы хотите запустить приложение без Docker, убедитесь, что у вас установлены PostgreSQL и Redis. Затем выполните:\n\n```\nuvicorn app.main:app --reload\n```\n\nПриложение будет доступно по адресу: `http://localhost:8000`.\n\n## Тестирование\n\nПокрытие тестами:\n\n```\n---------- coverage: platform darwin, python 3.12.0-final-0 ----------\nName                               Stmts   Miss  Cover\n------------------------------------------------------\napp/__init__.py                        0      0   100%\napp/db.py                             22      4    82%\napp/init_data.py                       8      8     0%\napp/main.py                           32      3    91%\napp/models/__init__.py                 0      0   100%\napp/models/item.py                     7      0   100%\napp/models/transaction.py             16      0   100%\napp/models/user.py                    10      0   100%\napp/routes/__init__.py                 0      0   100%\napp/routes/auth.py                    72     22    69%\napp/routes/transaction.py             55     26    53%\napp/schemas/__init__.py                0      0   100%\napp/schemas/response.py               24      0   100%\napp/schemas/transaction.py             4      0   100%\napp/schemas/user.py                   11      0   100%\napp/utils/__init__.py                  0      0   100%\napp/utils/info_utils.py               35      7    80%\napp/utils/redis_utils.py              34      6    82%\napp/utils/security_utils.py           42      5    88%\napp/utils/transaction_utils.py        15      4    73%\nlocustfile.py                         45     45     0%\ntests/__init__.py                      0      0   100%\ntests/conftest.py                     35      1    97%\ntests/routes/__init__.py               0      0   100%\ntests/routes/test_auth.py             72      0   100%\ntests/routes/test_transaction.py      81      0   100%\n------------------------------------------------------\nTOTAL                                620    131    79%\n\n=============================================== 17 passed, 30 warnings in 3.09s ================================================\n```\n\nРезультаты нагрузочного тестирования:\n\n```\nType     Name                                          # reqs      # fails |    Avg     Min     Max    Med |   req/s  failures/s\n--------|--------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------\nPOST     /api/auth                                       1272  404(31.76%) |  18046     234   60058  12000 |    1.19        0.38\nPOST     /api/buy/book                                   4416   427(9.67%) |   5104       2   60652    150 |    4.15        0.40\nPOST     /api/buy/cup                                    4295  453(10.55%) |   5110       2   61046    150 |    4.03        0.43\nPOST     /api/buy/pen                                    4280   414(9.67%) |   4658       2   61499    140 |    4.02        0.39\nPOST     /api/buy/powerbank                              4232   403(9.52%) |   4819       1   61163    150 |    3.97        0.38\nPOST     /api/buy/t-shirt                                4305  435(10.10%) |   4861       2   60109    160 |    4.04        0.41\nGET      /api/info                                      21727  2033(9.36%) |   4590       1   62061    140 |   20.40        1.91\nPOST     /api/register                                   1694  331(19.54%) |   7810     252   33670   6300 |    1.59        0.31\nPOST     /api/sendCoin                                  21534  2047(9.51%) |   4663       1   61720    130 |   20.21        1.92\n--------|--------------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------\n         Aggregated                                     67755 6947(10.25%) |   5049       1   62061    160 |   63.60        6.52\n\nResponse time percentiles (approximated)\nType     Name                                                  50%    66%    75%    80%    90%    95%    98%    99%  99.9% 99.99%   100% # reqs\n--------|------------------------------------------------|--------|------|------|------|------|------|------|------|------|------|------|------\nPOST     /api/auth                                           12000  17000  40000  43000  48000  60000  60000  60000  60000  60000  60000   1272\nPOST     /api/buy/book                                         150    290    420    510  17000  43000  53000  60000  60000  61000  61000   4416\nPOST     /api/buy/cup                                          150    310    440    520  17000  44000  53000  60000  60000  61000  61000   4295\nPOST     /api/buy/pen                                          140    280    400    480  16000  42000  52000  60000  60000  61000  61000   4280\nPOST     /api/buy/powerbank                                    150    300    420    490  16000  43000  55000  60000  60000  61000  61000   4232\nPOST     /api/buy/t-shirt                                      160    300    430    500  16000  42000  51000  60000  60000  60000  60000   4305\nGET      /api/info                                             140    280    390    480  16000  41000  50000  60000  60000  62000  62000  21727\nPOST     /api/register                                        6300  11000  12000  13000  16000  26000  31000  32000  34000  34000  34000   1694\nPOST     /api/sendCoin                                         130    260    370    470  16000  42000  50000  60000  60000  61000  62000  21534\n--------|------------------------------------------------|--------|------|------|------|------|------|------|------|------|------|------|------\n         Aggregated                                            160    290    430    520  16000  42000  51000  60000  60000  61000  62000  67755\n```\n\n## API Документация\n\nПосле запуска приложения, документация API будет доступна по адресам:\n\n- **Swagger UI**: `http://localhost:8000/docs`\n\n\n## Структура проекта\n\n```\n.\n├── Dockerfile\n├── README.md\n├── alembic.ini\n├── app\n│   ├── __init__.py\n│   ├── db.py\n│   ├── main.py\n│   ├── models\n│   │   ├── __init__.py\n│   │   ├── item.py\n│   │   ├── transaction.py\n│   │   └── user.py\n│   ├── routes\n│   │   ├── __init__.py\n│   │   ├── auth.py\n│   │   └── transaction.py\n│   ├── schemas\n│   │   ├── __init__.py\n│   │   ├── response.py\n│   │   ├── transaction.py\n│   │   └── user.py\n│   └── utils\n│       ├── __init__.py\n│       ├── info_utils.py\n│       ├── redis_utils.py\n│       ├── security_utils.py\n│       └── transaction_utils.py\n│\n├── docker-compose.yml\n├── locustfile.py\n├── migrations\n│   ├── README\n│   ├── env.py\n│   ├── script.py.mako\n│   └── versions\n│     \n├── poetry.lock\n├── pyproject.toml\n├── ruff.toml\n└── tests\n    ├── __init__.py\n    ├── conftest.py\n    └── routes\n        ├── __init__.py\n        ├── test_auth.py\n        └── test_transaction.py\n\n```\n\n## Лицензия\n\nЭтот проект распространяется под лицензией MIT. См. файл [LICENSE](LICENSE) для подробностей.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcdxy1%2Favito-test-task","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcdxy1%2Favito-test-task","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcdxy1%2Favito-test-task/lists"}