- Для избежания ошибок с дробными числами деньги хранятся в копейках.
- Так как по заданию ничего не известно про названия услуг, решил создавать csv с id услуг.
- Непонятно, что делать с отчётами для бухгалтеров за месяц, который ещё не кончился. Обычно разрешено получать отчёт только за прошедший период. Отчёт для бухгалтеров за текущий месяц всё же реализован. Для того чтобы поддерживать отчёты за текущий месяц, написал кеш, являющийся обёрткой для мапы с мьютексом.
- Unit-тесты для слоя
repository
писать не стал, т.к. не считаю их полезными для кода, работающего с БД. В проекте написаны интеграционные тесты, которые тестируют, в том числе и взаимодействие с БД. - Для работы с транзакциями используется специфичная схема, в которой транзакция помещается в
context.Context
. Это решение почти полностью убивает явность кода, но позволяет легко использовать один и тот же код, работающий с БД, как в транзакциях, так и в не них. - При считывании конфигурации используется антипаттерн синглтон, т.к. мне не хочется передавать конфигурацию в каждый метод.