Phonebook - записная книжка
- Добавить персону.
- Удалить персону.
- Найти персону по любому из атрибутов (атрибуты персоны: ФИО, дата рождения; полнотекстовый поиск).
- Создать контакт у персоны необходимого типа: e-mail, телефон, адрес, skype.
- Поиск персоны по контактным данным.
- Поиск дублей персон/контактов. Возможность объединения контактов двух персон в одну.
- Выгрузка записной книжки в текстовый файл csv. Для каждого типа контактов предопределен набор действий (позвонить, отправить sms, позвонить по skype, отправить письмо по e-mail)
Желательно иметь интерфейсы разного типа: командная строка, web.
Данные записной книги должны храниться в СУБД (например, postgresql).
Требуется подумать над архитектурой проекта, а именно подумать, какие варианты использования могут быть у этого приложения, какие действия и в какой последовательности будут выполняться в каждом из вариантов использования, как эти действия могут быть отражены в объектной модели нашего приложения.
Обязательно требуется реализовать сервис на основе eventsourcing и cqrs.
Для лучшего понимания проектирования рекомендую ознакомиться с кратким обзором паттернов проектирования и книгой для более детального изучения.
Кроме того, необходимо ознакомиться с этими двумя статьями: статья 1 и статья 2, а также с интерактивной обучалкой по git.
Задание должно быть оформлено в виде проекта Gradle или Maven