{"id":28638846,"url":"https://github.com/zabit923/gidratop-be","last_synced_at":"2026-04-14T19:32:02.820Z","repository":{"id":298747876,"uuid":"990222013","full_name":"zabit923/gidratop-be","owner":"zabit923","description":"🌐 e-commerce store 💻","archived":false,"fork":false,"pushed_at":"2025-07-14T20:46:24.000Z","size":1060,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-15T00:00:48.066Z","etag":null,"topics":["alembic","argon2","aws-s3","docker","docker-compose","fastapi","faststream","jwt","postgresql","pydantic-v2","python","rabbitmq","redis","sqlalchemy","uvicorn","yandex-cloud"],"latest_commit_sha":null,"homepage":"https://store-backend-8liq6v-cd0206-193-233-20-69.traefik.me/docs","language":null,"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/zabit923.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}},"created_at":"2025-05-25T18:39:06.000Z","updated_at":"2025-06-12T14:38:31.000Z","dependencies_parsed_at":"2025-06-12T17:30:32.906Z","dependency_job_id":"7aec38bf-11b6-44dc-bad1-6a945f0bd8f1","html_url":"https://github.com/zabit923/gidratop-be","commit_stats":null,"previous_names":["zabit923/gidratop-be"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zabit923/gidratop-be","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabit923%2Fgidratop-be","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabit923%2Fgidratop-be/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabit923%2Fgidratop-be/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabit923%2Fgidratop-be/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zabit923","download_url":"https://codeload.github.com/zabit923/gidratop-be/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabit923%2Fgidratop-be/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31812968,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"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","argon2","aws-s3","docker","docker-compose","fastapi","faststream","jwt","postgresql","pydantic-v2","python","rabbitmq","redis","sqlalchemy","uvicorn","yandex-cloud"],"created_at":"2025-06-12T19:08:11.017Z","updated_at":"2026-04-14T19:32:02.807Z","avatar_url":"https://github.com/zabit923.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gidrator\n\n## 🛠️ Технологический стек\n\n#### Управление зависимостями\n[![uv](https://img.shields.io/badge/uv-DE5FE9?style=for-the-badge\u0026logo=python\u0026logoColor=white)](https://docs.astral.sh/uv/)\n\n#### Backend\n[![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge\u0026logo=python\u0026logoColor=white)](https://docs.python.org/3/)\n[![FastAPI](https://img.shields.io/badge/FastAPI-009688?style=for-the-badge\u0026logo=fastapi\u0026logoColor=white)](https://fastapi.tiangolo.com/)\n[![Uvicorn](https://img.shields.io/badge/Uvicorn-499848?style=for-the-badge\u0026logo=gunicorn\u0026logoColor=white)](https://www.uvicorn.org/)\n\n#### База данных\n[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-316192?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white)](https://www.postgresql.org/docs/)\n[![Redis](https://img.shields.io/badge/Redis-DC382D?style=for-the-badge\u0026logo=redis\u0026logoColor=white)](https://redis.io/docs/)\n[![Alembic](https://img.shields.io/badge/Alembic-6BA81E?style=for-the-badge\u0026logo=sqlalchemy\u0026logoColor=white)](https://alembic.sqlalchemy.org/)\n\n#### Очереди и сообщения, стриминг\n[![RabbitMQ](https://img.shields.io/badge/RabbitMQ-FF6600?style=for-the-badge\u0026logo=rabbitmq\u0026logoColor=white)](https://www.rabbitmq.com/docs)\n[![FastStream](https://img.shields.io/badge/FastStream-FF6600?style=for-the-badge\u0026logo=rabbitmq\u0026logoColor=white)](https://faststream.airt.ai/)\n\n#### Инфраструктура\n[![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white)](https://docs.docker.com/)\n[![Docker Compose](https://img.shields.io/badge/Docker_Compose-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white)](https://docs.docker.com/compose/)\n\n#### Инструменты разработки\n[![pgAdmin](https://img.shields.io/badge/pgAdmin-336791?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white)](https://www.pgadmin.org/docs/)\n[![Redis Commander](https://img.shields.io/badge/Redis_Commander-DC382D?style=for-the-badge\u0026logo=redis\u0026logoColor=white)](https://github.com/joeferner/redis-commander)\n\n#### Облачные сервисы\n[![Yandex Cloud](https://img.shields.io/badge/Yandex_Cloud-5282FF?style=for-the-badge\u0026logo=yandex\u0026logoColor=white)](https://yandex.cloud/docs/)\n[![AWS S3](https://img.shields.io/badge/AWS_S3-569A31?style=for-the-badge\u0026logo=amazons3\u0026logoColor=white)](https://docs.aws.amazon.com/s3/)\n\n#### Безопасность и аутентификация\n[![Argon2](https://img.shields.io/badge/Argon2-000000?style=for-the-badge\u0026logo=security\u0026logoColor=white)](https://argon2-cffi.readthedocs.io/)\n[![JWT](https://img.shields.io/badge/JWT-000000?style=for-the-badge\u0026logo=jsonwebtokens\u0026logoColor=white)](https://pyjwt.readthedocs.io/)\n\n#### Качество кода\n[![Black](https://img.shields.io/badge/Black-000000?style=for-the-badge\u0026logo=python\u0026logoColor=white)](https://black.readthedocs.io/)\n[![MyPy](https://img.shields.io/badge/MyPy-3776AB?style=for-the-badge\u0026logo=python\u0026logoColor=white)](https://mypy.readthedocs.io/)\n[![Flake8](https://img.shields.io/badge/Flake8-3776AB?style=for-the-badge\u0026logo=python\u0026logoColor=white)](https://flake8.pycqa.org/)\n[![Pytest](https://img.shields.io/badge/Pytest-0A9EDC?style=for-the-badge\u0026logo=pytest\u0026logoColor=white)](https://docs.pytest.org/)\n\n## Установка\n\nКлонируйте репозиторий в директорию, в которой находитесь:\n```bash\ngit clone https://gitlab.com/store-be/gidrator-be.git .\n```\nИли:\n```bash\ngit clone https://gitlab.com/store-be/gidrator-be.git\n```\nПерейдите в директорию с проектом:\n```bash\ncd ./gidrator-be\n```\n\n\u003e [!NOTE]\n\u003e Перед тем, как запускать проект, проверьте наличие файла `.env`\n\n## Настройка окружения\n\nПеред запуском проекта необходимо настроить переменные окружения.\nВ проекте используется файл `.env.dev` для разработки.\n\nСкопируйте пример конфигурации из .env.example в новый файл .env.dev:\n```bash\ncp .env.example .env.dev\n```\n\nОтредактируйте файл .env.dev, заполнив следующие обязательные параметры:\n\n### Настройки JWT и безопасности\n- `TOKEN_SECRET_KEY` - секретный ключ для подписи JWT токенов (обязательно!)\n- `COOKIE_DOMAIN` - домен для cookies (localhost для разработки)\n\n### Настройки базы данных PostgreSQL\n- `POSTGRES_USER` - имя пользователя PostgreSQL\n- `POSTGRES_PASSWORD` - пароль пользователя PostgreSQL\n- `POSTGRES_HOST` - хост базы данных (обычно localhost для разработки)\n- `POSTGRES_PORT` - порт PostgreSQL (по умолчанию 5432)\n- `POSTGRES_DB` - имя базы данных\n\n### Настройки pgAdmin\n- `PGADMIN_DEFAULT_EMAIL` - email пользователя pgAdmin\n- `PGADMIN_DEFAULT_PASSWORD` - пароль пользователя pgAdmin\n\n### Настройки Redis\n- `REDIS_PASSWORD` - пароль для Redis\n- `REDIS_PORT` - порт Redis (по умолчанию 6379)\n\n### Настройки RabbitMQ\n- `RABBITMQ_USER` - имя пользователя RabbitMQ\n- `RABBITMQ_PASS` - пароль пользователя RabbitMQ\n- `RABBITMQ_HOST` - хост RabbitMQ\n- `RABBITMQ_PORT` - порт RabbitMQ (по умолчанию 5672)\n- `RABBITMQ_EXCHANGE` - имя exchange для сообщений\n\n### Настройки SMTP (для отправки email)\n- `SMTP_USERNAME` - имя пользователя SMTP\n- `SMTP_PASSWORD` - пароль SMTP\n- `SMTP_PORT` - порт SMTP (по умолчанию 587)\n\n### Настройки AWS S3\n- `AWS_SERVICE_NAME` - имя сервиса AWS (s3)\n- `AWS_REGION` - регион AWS (ru-central1)\n- `AWS_ENDPOINT` - endpoint AWS (https://storage.yandexcloud.net)\n- `AWS_BUCKET_NAME` - имя бакета AWS\n- `AWS_ACCESS_KEY_ID` - ключ доступа AWS\n- `AWS_SECRET_ACCESS_KEY` - секретный ключ доступа AWS\n\n### Настройки CORS\n- `ALLOW_ORIGINS` - список разрешенных источников (для разработки обычно [\"*\"])\n\n### Настройки логирования\n- `LOGGING__LOG_FORMAT` - формат логов (pretty/json)\n- `LOGGING__LOG_FILE` - путь к файлу логов\n- `LOGGING__LEVEL` - уровень логирования (DEBUG/INFO/WARNING/ERROR)\n\n\u003e [!NOTE]\n\u003e Порт 5432 может быть занят, поэтому его можно изменить на любой другой свободный порт (например, 5433).\n\u003e\n\u003e\n### Настройки CORS\n- `ALLOW_ORIGINS` - список разрешенных источников (для разработки обычно [\"http://localhost:3000\",\"http://localhost:5173\"])\n\n### Пример минимальной конфигурации для локальной разработки\n```\n# Настройки логирования\nLOGGING__LOG_FORMAT=pretty\nLOGGING__LOG_FILE=./logs/app.log\nLOGGING__LEVEL=DEBUG\n\n# Настройки JWT (ОБЯЗАТЕЛЬНО!)\nTOKEN_SECRET_KEY=your_very_secure_secret_key_here\nCOOKIE_DOMAIN=localhost\n\n# SMTP\nSMTP_PORT=587\nSMTP_USERNAME=admin\nSMTP_PASSWORD=admin\n\n# Настройки Redis\nREDIS_PORT=6379\nREDIS_PASSWORD=default\n\n# Настройки базы данных\nPOSTGRES_USER=postgres\nPOSTGRES_PASSWORD=postgres\nPOSTGRES_HOST=localhost\nPOSTGRES_PORT=5433\nPOSTGRES_DB=gidrator-db\n\n# Настройки pgAdmin\nPGADMIN_DEFAULT_EMAIL=admin@admin.com\nPGADMIN_DEFAULT_PASSWORD=admin\n\n# RabbitMQ\nRABBITMQ_USER=guest\nRABBITMQ_PASS=guest\nRABBITMQ_PORT=5672\nRABBITMQ_HOST=localhost\nRABBITMQ_EXCHANGE=gidrator\n\n# AWS S3\nAWS_SERVICE_NAME=s3\nAWS_REGION=ru-central1\nAWS_ENDPOINT=https://storage.yandexcloud.net\nAWS_BUCKET_NAME=your_bucket_name\nAWS_ACCESS_KEY_ID=your_access_key_id\nAWS_SECRET_ACCESS_KEY=your_secret_access_key\n\n# Настройки CORS\nALLOW_ORIGINS=[\"*\"]\nALLOW_CREDENTIALS=true\nALLOW_METHODS=[\"*\"]\nALLOW_HEADERS=[\"*\"]\n```\n\n\u003e [!IMPORTANT]\n\u003e - Никогда не коммитьте файлы .env.dev или другие файлы с реальными учетными данными в репозиторий!\n\u003e - Убедитесь, что они добавлены в .gitignore.\n\u003e - Обязательно замените `TOKEN_SECRET_KEY` на уникальный секретный ключ!\n\n## Первый запуск\n\u003e [!IMPORTANT]\n\u003e Перед использованием этих команд uv должен быть установлен\n```bash\nuv run activate\n```\n\n## Последующий запуск\n\nДля активации виртуального окружения без запуска режима разработки\n(например, нужно сделать миграции в соседнем терминале при запущенной инфраструктуре):\n\n```bash\nuv run setup\n```\n\nЗапуск в режиме разработки (с hot-reload) без инфраструктуры (базы данных и т.д.)\n```bash\nuv run dev\n```\n\nИли запуск в режиме разработки (с hot-reload) с инфраструктурой одной командой:\n\n```bash\nuv run activate\n```\n\n## Разработка\n\n### Процесс разработки такой:\n- Разработка идёт от `development`\n- В `development` мерджим фичи\n- Тестим на `development`\n- Когда всё ок - мерджим `development` в `main`\n\nЕсли вы хотите внести изменения или улучшения, пожалуйста, следуйте этим шагам:\n\n1. Переключаемся на `development` и подтягиваем последние изменения с удалённого репозитория:\n```bash\ngit checkout development\ngit pull origin development\n```\n\n2. От `development` создаем свою ветку разработки и сразу на неё переключаемся:\n```bash\ngit checkout -b feature/your-name-of-feature\n```\n\n3. Кодим и по итогу добавляем все изменения в индекс:\n```bash\ngit add .\n```\n\n4. Создаём коммит с описанием изменений\n```bash\ngit commit -m \"feat: your-changes\"\n```\n\n5. Перед пушем обновляем ветку от `development`, то есть\n 1) Переключаемся обратно на development\n 2) Подтягиваем новые изменения\n 3) Возвращаемся на свою ветку\n 4) Переносим свои изменения поверх последней версии `development`\n\n```bash\ngit checkout development\ngit pull origin development\ngit checkout feature/your-name-of-feature\ngit rebase development\n```\n\n6. Отправляем свою ветку в удалённый репозиторий:\n```bash\ngit push origin feature/your-name-of-feature --force-with-lease\n```\n\n7. Создаем Pull Request в dev ветку!\n\u003e 1) Жмём кнопку \"New Pull Request\"\n\u003e 2) В base выбираем `development` (КУДА льём)\n\u003e 3) В compare выбираем свою ветку feature/your-name-of-feature (ОТКУДА льём)\n\u003e 4) Пишешь нормальное описание что сделали\n\u003e 5) Добавляем ревьюеров\n\u003e 6) Создаёи PR\n\nЛибо просто делаем merge в development ветку из своей feature/your-name-of-feature ветки.\n```bash\ngit checkout development\ngit merge feature/your-name-of-feature\n```\n\n8. После тестирования на `development`, создаём PR из `development` в `main`.\n\u003e 1) Создаём новый PR\n\u003e 2) В base выбираем main (КУДА льём)\n\u003e 3) В compare выбираем development (ОТКУДА льём)\n\u003e 4) Описываем все изменения которые войдут в прод\n\u003e 6) Ждём подтверждения от тимлида\n\nЛибо просто делаем merge в main ветку из development ветки.\n```bash\ngit checkout main\ngit merge development\n```\n\n9. Удаляем свою ветку feature/your-name-of-feature\n\nЛокально:\n\n```bash\ngit branch -d feature/your-name-of-feature\n```\nУдалённо:\n```bash\ngit push origin --delete feature/your-name-of-feature\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzabit923%2Fgidratop-be","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzabit923%2Fgidratop-be","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzabit923%2Fgidratop-be/lists"}