Skip to content

kbannyi/gophermart

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Краткое описание решения

  • Таблицы БД: orders, users, withdrawals, schema_migrations
  • Пароли пользователей хэшируем sha256
  • Сжимаем только запросы, возвращающие списки
  • Авторизация через заголовок и cookie, jwt token
  • Баллы храним в decimal формате (github.com/shopspring/decimal), чтобы без погрешностей (в БД varchar)
  • Баланс не храним, вычисляем по надобности
  • Опрашиваем accrual одним воркером в цикле

Работа с сервисом accrual

Использовать параллельные воркеры я не стал из-за нескольких причин:

  • неизвестные характеристики сервиса accrual (заявлена ошибка HTTP 429)
  • необходимость синхронизации работы воркеров, что будет необоснованным усложнением

Чтобы убрать бесконечные запросы к БД в случае отсутствия новых заказов, реализовал следующее: OrderFetcher "засыпает" на минуту, если не находит ни одного заказа (запрос раз в минуту может пригодиться, если, например, техподдержка добавила/отредактировала заказы в БД). При добавлении нового заказа через API OrderFetcher получает сигнал к пробуждению.

Причины использовать decimal

  • Не указана точность подсчета баллов accrual
  • Хотим избежать погрешностей в работе с чем-то хотя бы как-то связанным с деньгами

Альтернативно рассматривал возможность приводить числа к integer с фиксированной точностью, но решил, что уже протестированная библиотека с документацией – лучше для такой общеизвестной проблемы.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages