Реализовать микро-сервисную архитектуру для работы с банковскими счетами пользователя. Только backend. Первый REST сервис - работа с клиентами. Второй REST сервис - для работы со счетами. Третий REST сервис - общий. Описание каждого сервиса ниже.
Должны быть доступны следующие операции:
- добавление клиента (на вход json с данными клиента)
- удаление клиента (на вход идентификатор клиента)
- изменение клиента (на вход json с данными клиента)
- получить клиента по id (на выходе json с данными клиента)
- получить список всех клиентов (на выходе json с дынными по всем клиентам)
- создать счёт (на вход id клиента. На выходе номер счёта. Номер счёта должен сгенерироваться и записаться в бд)
- удалить счет (на вход id счёта)
- получить счет по id (на вход id счёта)
- пополнить счет (на вход id или номер счета и количество денег)
- списать средства со счета (на вход id или номер счета и количество денег)
- по идентификатору клиента вывести полную информацию о клиенте (включая его счета) (на вход id клиента. На выходе JSON с информацией о клиенте + информация по его счетам)
- перевести деньги с одного счета на другой для одного клиента и между клиентами (на вход json c информацией о переводе)
Каждый из сервисов должен представлять собой отдельное приложение, запускаться отдельно, независимо, и, иметь свою базу данных. В качестве СУБД должна использоваться postgres. Для написания самих приложения использовать spring-boot последней версии. В качестве инструмента сборки должны использоваться как maven, так и gradle (например для двух сервисов maven, для третьего gradle). Сервисы должны взаимодействовать между собой только через http протокол.
Для тестирования будет использоваться postman. Сценарии использования:
- С помощью customer-service добавить несколько клиентов
- С помощью account-service для разных клиентов создать счета
- С помощью account-service для разных клиентов пополнить счета для нескольких клиентов
- С помощью common-service получить информацию о клиенте и его счетах
- С помощью common-service перевести деньги между счетами одного клиента, между счетами разных клиентов
- С помощью common-service ещё раз вывести полную информацию о клиентах, убедиться, что у одних деньги списались, у других пополнились
Будет считаться плюсом, но не обязательно:
- запуск всех системы с помощью docker (docker-compose)
- unit-тесты
- валидация входных данных
Результаты выложить на github или другую git-платформу.