{"id":21457834,"url":"https://github.com/alexsander-pavlov/bigstorefastapi","last_synced_at":"2026-04-11T17:01:12.633Z","repository":{"id":263967007,"uuid":"887717902","full_name":"Alexsander-Pavlov/BigStoreFastAPI","owner":"Alexsander-Pavlov","description":"Big store (in development)","archived":false,"fork":false,"pushed_at":"2024-11-21T08:38:15.000Z","size":84,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-24T04:59:46.467Z","etag":null,"topics":["alembic","async","docker","docker-compose","fastapi","jwt-authentication","poetry","postgresql","pydantic","pytest","rest-api","sqlalchemy","stripe-payments"],"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/Alexsander-Pavlov.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}},"created_at":"2024-11-13T06:52:33.000Z","updated_at":"2024-11-21T08:38:18.000Z","dependencies_parsed_at":"2024-11-21T10:15:46.766Z","dependency_job_id":null,"html_url":"https://github.com/Alexsander-Pavlov/BigStoreFastAPI","commit_stats":null,"previous_names":["alexsander-pavlov/bigstorefastapi"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Alexsander-Pavlov/BigStoreFastAPI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexsander-Pavlov%2FBigStoreFastAPI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexsander-Pavlov%2FBigStoreFastAPI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexsander-Pavlov%2FBigStoreFastAPI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexsander-Pavlov%2FBigStoreFastAPI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Alexsander-Pavlov","download_url":"https://codeload.github.com/Alexsander-Pavlov/BigStoreFastAPI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexsander-Pavlov%2FBigStoreFastAPI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31687881,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T13:07:20.380Z","status":"ssl_error","status_checked_at":"2026-04-11T13:06:47.903Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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","async","docker","docker-compose","fastapi","jwt-authentication","poetry","postgresql","pydantic","pytest","rest-api","sqlalchemy","stripe-payments"],"created_at":"2024-11-23T06:07:18.920Z","updated_at":"2026-04-11T17:01:12.584Z","avatar_url":"https://github.com/Alexsander-Pavlov.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Title\nДанный проект является большим онлайн магазином. (Стадия разработки)\n\n# TO DO\n## Stripe\nПроект реализует интеграцию с внешним API платежной системы Stripe.\nРеализованны Классы для интеграции:\n- Stripe # Абстрактный класс определяющий каркасс\n- CreateStripeItem # Создание Stripe объекта\n- UpdateStripeItem # Обновление Stripe объекта\n- ActivateStipeItem # Активация Stripe объекта\n- DeactivateStripeItem # Деактивация Stripe объекта\n- StripeItems # Список Stripe объектов\n- CreateDiscountCoupon # Создание скидочного купона\n- UpdateDiscountCoupon # Обновление скидочного купона\n- DeleteDiscountCoupon # Удаление скидочного купона\n- StripeSession # Создание Stripe Сессии для оплаты\n- ExpireSession # Отмена Stripe Cессии\n\nСоздание Stripe объекта\n```python\nvalues = dict(\n    id=1,\n    name='Stripe',\n    price=50000,\n)\nstripe = CreateStripeItem(values)\nawait stripe.action()\n```\n\nОбновление Stripe объекта\n```python\nvalues = dict(\n    id=1,\n    name='Updated_Stripe',\n)\nstripe = UpdateStripeItem(values)\nawait stripe.action()\n```\n\nДеактивация Stripe объекта\n```python\nvalues = dict(\n    id=1,\n)\nstripe = DeactivateStripeItem(values)\nawait stripe.action()\n```\n\nАктивация Stripe объекта\n```python\nvalues = dict(\n    id=1,\n)\nstripe = ActivateStipeItem(values)\nawait stripe.action()\n```\n\nСписок Stripe объектов\n```python\nlist_items = [\n    \u003cProduct1\u003e,\n    \u003cProduct2\u003e,\n    \u003cProduct3\u003e,\n    ]\nstripe = StripeItems(\n    products=list_items,\n    add_key=True,\n)\n# add_key необходим в случае ручного использования,\n# для того что бы система автоматически добавила API_KEY\n# к запросу Stripe\n```\n\nСоздание скидочного купона\n```python\nvalues = dict(\n    id=1,\n    number='COUPON',\n    discount=22.0,\n    end_at=8043214523, # UNIX-time required\n)\nstripe = CreateDiscountCoupon(values)\nawait stripe.action()\n```\n\nОбновление скидочного купона\n```python\nvalues = dict(\n    id=1,\n    number='NEWCOUPON',\n)\nstripe = UpdateDiscountCoupon(values)\nawait stripe.action()\n```\n\nУдаление скидочного купона\n```python\nvalues = dict(\n    id=1,\n)\nstripe = DeleteDiscountCoupon(values)\nawait stripe.action()\n```\n\nСоздание Сессии для платежа\n```python\nuser = \u003cUser1\u003e\nlist_items = [\n    \u003cProduct1\u003e,\n    \u003cProduct2\u003e,\n    \u003cProduct3\u003e,\n    ]\nunique_code = int_to_base36(getrandbits(41))\npromo = 1\nsession = StripeSession(\n    user=user,\n    products=list_items,\n    unique_code=unique_code,\n    promo=promo,\n)\nsession.get_session_payments()\n# unique_code неоходим для защиты сессии от злоумышленного\n# использования. Этот код идентифицирует текущую корзину.\n# При совершении покупки и создании заказа этот код удаляется из текущей корзины,\n# по этому создать дополнительные заказы просто посредством перехода на ту же ссылку\n# не возможно.\n```\n\nОтмена Stripe Сессии\n```python\nbasket = \u003cBasket1\u003e\nExpireSession(\n    session_id=basket.session_id,\n).expire_session()\n```\n\n## RabbitMQ, Celery\nИспользуется Брокер сообщений RabbitMQ и Worker Celery\n### Docker RabbitMQ\n```yaml\nrabbitmq:\n    hostname: rabbitmq\n    image: rabbitmq:4.0.3-management\n    env_file:\n      - .env\n    ports:\n      - 5672:5672\n      - 15672:15672\n    volumes:\n      - rabbitmq-data:/var/lib/rabbitmq\n\nvolumes:\n  rabbitmq-data:\n```\n\n### Настройка RabbitMQ\n```python\n# .env\nRABBITMQ_DEFAULT_USER=guest # Логин RabbitMQ\nRABBITMQ_DEFAULT_PASS=guest # Пароль RabbitMQ\n```\n\n### Docker Celery Worker\n```yaml\ncelery_worker:\n    build: \n      context: .\n      dockerfile: ./docker/fastapi/Dockerfile\n    command: /start-celeryworker\n    volumes:\n      - .:/app\n    env_file:\n      - .env\n```\n\n### Настройка Celery\n```python\n# congin/rabbitmq/connection.py\nfrom config.config import settings\n\n\napp = Celery(__name__)\napp.conf.broker_url = settings.rabbit.broker_url\napp.autodiscover_tasks(packages=['project.packages'])\n```\n\n### Класс Celery\nЕсть реализация Асихронного класса Celery\nдля выполнения задач в асинхронном режиме.\n\n### Использование\nПосле настройки RabbitMQ и Celery\nВам необходимо запустить проект (инструкции ниже)\nа затем перейти по адрессу:\nhttp://localhost:15672/\nЭто будет страница RabbitMQ для просмотра всех каналов, очередей,\nобмеников, пользователей, и.т.д.\nВам нужно будет ввести логин и пароль для аутентификации который вы указали в .env\n\n## Flower\nFlower это мощное приложение для отслеживания всех\nзадач на стороне Worker.\n### Docker Flower\n```yaml\ndashboard:\n    build: \n      context: .\n      dockerfile: ./docker/fastapi/Dockerfile\n    command: /start-flower\n    volumes:\n      - .:/app\n    ports:\n      - 5555:5555\n    env_file:\n      - .env\n```\n\n### Настройка\nПредварительная настройка не требуется, все настройки подтягиваются\nавтоматически из RabbitMQ.\n\n### Использование\nДля использования Flower вам нужно перейти по адрессу:\nhttp://localhost:5555/\nУ вас откроется страница Flower с полной информацией о Worker и Tasks.\n\n# Dependencies\nВ проекте используются зависимости:\n- fastapi\n- pydantic\n- pydantic-settings\n- sqlalchemy\n- asyncpg\n- psycopg2-binary\n- alembic\n- pyjwt\n- bcrypt\n- python-multipart\n- stripe\n- pytz\n- uvicorn\n- python-dotenv\n- celery\n- flower\n\n## SQLAlchemy\nSQLAlchemy используется асинхронный.\nРеализованн специальный класс для поддежки подключения и \nделегированнием сессий.\n- DataBaseHelper\n\n```python\n# Инициализация соединения с Базой Данных на текущий HTTP запрос\nasync with db_helper.engine.begin() as conn:\n    await conn.run_sync(Base.metadata.create_all)\n    yield # Событие HTTP запроса\nawait db_helper.dispose()\n\n# \"Протаскивание\" текущей сессии для запросов к Базе данных на этот HTTP запрос\nasync def get_session(session: AsyncSession = Depends(db_helper.session_geter)):\n    current_session = session\n    return session\n```\n\n# Install\n## ENV\nДля запуска проекта вам нужно установить переменные окружения\n```python\n# .env\nPOSTGRES_PASSWORD=password # Пароль базы данных (настройка)\nDB_PASSWORD=password # Пароль базы даных (использование)\nRABBITMQ_DEFAULT_USER=user # Логин для RabbitMQ\nRABBITMQ_DEFAULT_PASS=password # Пароль для RabbitMQ\nSTRIPE_API=some_stripe:api # API_KEY stripe платежная система\n```\nДля получения API_KEY Stripe вам нужно перейти на официальную страницу Stripe [link](https://stripe.com)\nи зарегистрироваться, в последствии вы получите ключи для API.\n\n## Certifications\n- Перейдите в папку сертификатов\n```bash\ncd certs\n```\n\n- Создание приватного ключа\n```bash\nopenssl genrsa -out jwt-private.pem 2048\n```\n\n- Создание публичного ключа на основе приватного\n```bash\nopenssl rsa -in jwt-private.pem -outform PEM -pubout -out jwt-public.pem\n```\n\n## Docker\nПроект находится под системой контеризации Docker\nЕсли у вас нет Docker, прейдите на официальную страницу Docker [link](https://www.docker.com)\nи скачайте от туда Docker (в случае если у вас система MAC, Windows, в ином установка посредством терминала).\n\nНеоходимо совершить билд образов и контейнеров\n```bash\ndocker compose build\n```\nЗатем запустить образы\n```bash\ndocker compose up\n```\n\n# OpenAI\nFastAPI поддерживает автоматическую генерацию документации и взаимодействие с API.\nДля более легкого просмотра возможностей проекта (пока нет клиента) вы можете прейти по ссылке:\nhttp://localhost:8080/docs/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexsander-pavlov%2Fbigstorefastapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexsander-pavlov%2Fbigstorefastapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexsander-pavlov%2Fbigstorefastapi/lists"}