- Получение данных библиотеки с фильтрацией по всем полям, сортировкой и пагинацией.
- Получение текста песни с пагинацией по куплетам.
- Удаление песен.
- Изменение данных песни.
- Добавление новой песни.
- Склонируйте репозиторий.
git clone https://github.com/spanwalla/song-library
cd song-library
- Создайте файл
.envв корневом каталоге проекта (можно скопировать.env.example). - Задайте URL внешнего сервиса, который будет возвращать информацию о песнях (параметр окружения
SONG_API_URL). - Выполните команду
docker-compose up --build -d
ИЛИ
make compose-up
- Для остановки используйте команду
docker-compose down --remove-orphans
Сервис будет доступен на порту 8080.
Документация доступна по адресу 127.0.0.1:8080/swagger/index.html.
Была идея завести отдельную сущность groups. Ниже постараюсь пояснить, почему обошлись без неё:
- У группы нет никакой дополнительной информации (только её название), поэтому хранение названия в
songsне нарушает 3НФ (были бы вопросы, если бы у группы появилась дата создания, количество участников и т.п.). - В данном конкретном случае затраты на дополнительные запросы, JOIN и контроль целостности показались мне большей проблемой, чем возможное нарушение нормальной формы и расход памяти.
- Пару (название песни, название группы) можно рассматривать как композитный ключ.
Решил оставить мок-объекты как задел под написание модульных тестов.