Необходимо реализовать бизнес-приложение с использованием Persistent Storage Unit из задания 1. Приложение имитирует телефонную книгу в бумажном варианте: дает возможность вносить записи контактов, вычеркивать их и получать их по начальной литере. Для приложения необходим HTTP API. Заказчиком принято решение проводить разработку приложения и выпуск его на рынок в два этапа:
- Phone Book v1.0:
- реализует операции записи в телефонную книгу, вычеркивания контакта из телефонной книги и получения списка контактов по литере.
- записи представляют из себя Имя, Фамилию и один телефон.
- литера в телефонной книге, по которой размещается запись - первая буква Фамилии.
- Phone Book v1.1, в дополнение к предыдущей версии:
- телефонов у контакта может быть более одного.
- у контакта появляется Никнейм, по первой букве которого также можно найти его в телефонной книге. Обе версии приложения работают с одним и тем же Persistent Storage Unit одновременно (хранилище не меняется после выпуска новой версии приложения), обновление до версии 1.1 происходит постепенно на нескольких серверах. Корректно поддерживаются случаи:
- приложение v1.1 корректно читает данные, записанные приложением v1.0 (обратная совместимость)
- приложение v1.0 корректно читает данные, записанные приложением v1.1 (прямая совместимость)
- приложение v1.1 может вычеркивать данные, записанные приложением v1.0 (обратная совместимость) Требуется реализовать обе версии приложения, тесты для каждой из версий отдельно и эволюционные тесты, показывающие что совместимость операций в случаях выше не нарушается. Для задачи поставляются:
- интерфейс
PhoneBookApi
, описывающий операции с телефонной книгой - интерфейс
Record
, описывающий запись в телефонной книге
- синхронизировать {your-awesome-team-fork-repo} c upstream для получения обновленных файлов https://help.github.com/articles/syncing-a-fork/, устранить конфликты в результате merge
- выбрать формат кодирования записей, описать схему если таковая необходима. Важно, что операция вычеркивания может быть реализована разными способами: удалением записи в хранилище или помечанием записи удаленной без явного стирания.
- реализовать модель, функциональность, HTTP API и контейнер для Phone Book v1.0
- реализовать клиент к HTTP API телефонной книги. Он нам пригодится в тестах.
- реализовать интеграционные тесты приложения с поднятием контейнеров Phone Book v1.0 и Persistent Storage Unit. В
случае недоступности хранилища приложение не падает, а отвечает внятной ошибкой. Не приводят к потере данных
перезапуски ни приложения, ни хранилища. Тесты должны охватывать случаи
- создания нового контакта,
- изменения существующего контакта,
- вычеркивания контакта,
- повторной записи контакта,
- получения списка контактов по литере,
- операций выше при недоступности хранилища
- реализовать модель, функциональность, HTTP API и контейнер для Phone Book v1.1
- реализовать интеграционные тесты приложения с участием контейнеров Phone Book v1.1 и Persistent Storage Unit. Требования к отказоустойчивости и полноте тестов аналогичны v1.0.
- реализовать тесты, проверяющие обратную и прямую совместимость операций чтения и обратную для операции вычеркивания
- описать в
INSTALL_TASK2.md
специфику сборки приложений и запуска интеграционных тестов - описать в
README_TASK2.md
что было реализовано, описание проблем, не решенных в коде и требующих дальнейшего рассмотрения, неявных моментов. Обязательно добавить название и список участников команды. - прислать PR {your-awesome-team-fork-repo}/csc-bdse-task2 => {your-awesome-team-fork-repo}/master (добавить alesavin, dormidon, semkagtn, 747mmHg в ревьюеры)
- добавить ссылку на PR в топик задания 2 курса на https://compscicenter.ru
- поддержка компрессии записей на уровне приложения: записи в телефонной книге могут сжиматься перед сохранением и разжиматься после чтения из Persistent Storage Unit. Предполагается, что компрессия вводится в Phone Book v1.1, поэтому возможность считывать несжатые записи должна сохраниться.