Проблема:
В нашей компании есть много различных микросервисов. Многие из них так или иначе хотят взаимодействовать с балансом пользователя. На архитектурном комитете приняли решение централизовать работу с балансом пользователя в отдельный сервис.
Задача:
Необходимо реализовать микросервис для работы с балансом пользователей (зачисление средств, списание средств, перевод средств от пользователя к пользователю, а также метод получения баланса пользователя). Сервис должен предоставлять HTTP API и принимать/отдавать запросы/ответы в формате JSON.
Сценарии использования:
Далее описаны несколько упрощенных кейсов приближенных к реальности. 1. Сервис биллинга с помощью внешних мерчантов (аля через visa/mastercard) обработал зачисление денег на наш счет. Теперь биллингу нужно добавить эти деньги на баланс пользователя. 2. Пользователь хочет купить у нас какую-то услугу. Для этого у нас есть специальный сервис управления услугами, который перед применением услуги резервирует деньги на отдельном счете и потом списывает в доход компании. 3. Бухгалтерия раз в месяц хочет получить сводный отчет по всем пользователям в разрезе каждой услуги.
Требования к сервису:
Будет плюсом:
Основное задание (минимум):
Метод начисления средств на баланс. Принимает id пользователя и сколько средств зачислить. Метод резервирования средств с основного баланса на отдельном счете. Принимает id пользователя, ИД услуги, ИД заказа, стоимость. Метод признания выручки – списывает из резерва деньги, добавляет данные в отчет для бухгалтерии. Принимает id пользователя, ИД услуги, ИД заказа, сумму. Метод получения баланса пользователя. Принимает id пользователя.
Детали по заданию:
Дополнительные задания
Далее перечислены дополнительные задания. Они не являются обязательными, но их выполнение даст существенный плюс перед другими кандидатами.
Доп. задание 1:
Бухгалтерия раз в месяц просит предоставить сводный отчет по всем пользователем, с указанием сумм выручки по каждой из предоставленной услуги для расчета и уплаты налогов.
Задача: реализовать метод для получения месячного отчета. На вход: год-месяц. На выходе ссылка на CSV файл.
Пример отчета:
название услуги 1;общая сумма выручки за отчетный период
название услуги 2;общая сумма выручки за отчетный период
Доп. задание 2:
Пользователи жалуются, что не понимают за что были списаны (или зачислены) средства.
Задача: необходимо предоставить метод получения списка транзакций с комментариями откуда и зачем были начислены/списаны средства с баланса. Необходимо предусмотреть пагинацию и сортировку по сумме и дате.
Разбор задания:
Пример решения тестового задания можно найти в папке solution_example
Что в этом решении хорошего:
- Выполнены все дополнительные задания (тестирование не полностью)
- Хорошая структура проекта
- Понятный нейминг объектов
- Конфигурация вынесена в отдельное место (config/)
- Учтена транзакционная история работы с балансом
$ claude mcp add internship_backend_2022 \
-- python -m otcore.mcp_server <graph>