| ФИО | Группа |
|---|---|
| Королев Павел | М8О-105СВ-25 |
| Крючков Артемий | М8О-105СВ-25 |
| Павлов Иван | М8О-106СВ-25 |
| Руднев Виктор | М8О-105СВ-25 |
В процессе выполнения курсового проекта была разрабортана микросервисная архитектура платежной системы и были реализованы сервисы авторизации (python-jose, jwt-tokens, API-key), SMTP-уведомлений (smtplib) и платежей (yookassa SDK). Для управления жизненным циклом подписок была реализована связь с postgres, также был реализован механизм scheduled tasks для автоматического списания с помощью apscheduler.
Сервисы:
- Авторизация - для продавцов. Роуты на создание юзера, получение JWT Access и Refresh Token, валидация токена и login. Взаимодействует с Базой Данных, использует библиотеки python jose и secrets;
- Сервис уведомлений - отправка писем на электронную почту покупателей. Запрос на отправку создает Task в rabbitmq, который обрабатывается асинхронно и отправляет письма. Используется smtplib и креды mail.ru;
- Сервис платежей. Используется yookassa SDK и postgres для управление подпискамми, тарифами, покупателями, акциями и промокодами, связи их с объектами yookassa;
- Прокси-сервис для связи сервисов в единое приложение и использование как точка входа.
Что было использовано из курса лекций:
- Императивный маппинг sqlalcemy в БД (примеры в payments/source/pykassa_payments/services/postgres/tables_provider и auth/source/pykassa_auth/services/postgres/sellers_tables_provider.py)
- IoC-контейнеры и Dependency Injection (Примеры регистрации в main.py и резолвиинг в роутах в payments, notifications и auth сервисов)
- Domain Driven Design (Примммеры во всех сервисах кроме proxy)
- Хеширование паролей и хранение хешей в БД
Также был реализован сборщик питоно-пакетов на основе uv и toolkit приложений, который можно использовать во всех сервисах сразу. В пакет входят: конфигуратор проекта, http-клиент на основе aiohttp, ioc-резолвер на основе fastapi и pyioc3, клиенты для postgres, redis и tasks_manager. Сервисы также собраны в виде готовых питоно-пакетов.
- install uv
irm https://astral.sh/uv/install.ps1 | iex
uv venv --python 3.10
.venv/Scripts/activatecurl -LsSf https://astral.sh/uv/install.sh | sh
uv venv --python 3.10
source .venv/bin/activate- install packages
python3 ./bootstrap/build_packages.py
uv pip install -r ./bootstrap/requirements.txt
uv pip install --no-deps --force-reinstall $(ls ./bootstrap/whl/*.whl)- create and activate venv
python3 -m venv venv
source venv/bin/activate- install base packages
pip install setuptools==59.6.0
pip install wheel==0.45.1
python3 bootstrap/build_packages_legacy.py
pip install --find-links=whl bootstrap/whl/* --force-reinstall- copy and edit .env file
cp .env.example .env- build base docker images
docker-compose build python-build- run docker
docker-compose up --build