Skip to content

yuiauo/bs

Repository files navigation

ТЗ

Запуск локально

К сожалению не имеет смысла, ввиду необходимости наличия раббита и постгре Но если получится, можно дополнительно прогнать два теста :) Для этого нужно изменить переменные в .env файлах для каждого сервиса. После этого выполнить команду poetry install. Если у Вас винда, то в новом окружении выполнить pip install -r requirements.txt

Находясь в корневой директории можно выполнить тесты командой pytest -v Затем перейти в любой из сервисов и запустить их командой uvicorn main:app По умолчанию он запустится на порту 8000 поэтому при запуске следующего необходимо указать новый порт, например так uvicorn main:app --port 8001 Сервисы будут доступны по адресам http://localhost:8000 и http://localhost:8001 соответственно. В каждом из сервисов во вкладке /docs доступен swagger для тестирования апи. Также необходимо применить миграции находясь в сервисе bet_maker: alembic upgrade head

Запуск через docker compose

Требования: установленный docker

Выполнить команду docker compose up На всякий случай проверить не заняты ли порты 5432 и 5672, иначе придётся менять внешний порт в docker-compose.yml, а также порты указанные в .env файлах Сервисы будут доступны по адресам http://localhost:8080 и http://localhost:8081 В каждом из сервисов во вкладке /docs доступен swagger для тестирования апи.

Главный вопрос тестирования и всего такого

События можно создавать сразу с помощью сервиса line_provider, они отправляются через раббит и сохраняются в постгресе на стороне сервиса bet_maker. Прежде чем перейти к созданию ставок, необходимо создать пользователя, достаточно одного, в текущей реализации все ставки привязываются к пользователю с id=1. При изменении событий они также передаются в постгрес. Но важно иметь в виду, что при перезапуске сервиса line_provider, все созданные на стороне этого сервиса ивенты затрутся.

Совершенные ошибки

  1. Зря оставил миграцию синхронной, изначально казалось здравой идеей, но в итоге дополнительная зависимость (psycopg), дополнительная установка библиотек при сборке.
  2. Неправильно оценил время, а именно изначально начал думать как буду хранить и авторизовать пользователей, также хотел добавить аутентификацию.
  3. В итоге вместо того, чтобы добавить логи, обработать исключения и написать побольше тестов, а также прокинуть их в контейнер я обдумывал вышеописанное.