Простой музыкальный сервис (что забавно - без музыки), имеющий примитивную модель взаимодействия.
- Админ: может удалять и добавлять всех и вся, вводить цензуру, делать треки ограниченно доступными, удалять/добавлять юзеров, и давать им премиум статус (или лишать его), царь и бог нашего приложения
- Артист: может создавать и публиковать треки, вводить на них цензуру, ограничивать к ним доступ, и следить за количеством подписчиков
- Юзер: может регаться/входить в приложение, слушать треки при условии соответствия его свойств требуемым, подписываться на артистов и следить за ними, создавать/изменять/удалять плейлисты, следить за количеством слушателей этих плейлистов, и так далее
- Треки
- Юзеры (клиенты)
- Артисты
- Плейлисты
- Схема определена (добавлю чуть позже миграциями, сама бд пока только существует на локальной машине)
- Сущности связаны/объявлены корректно (на данный момент проблем не обнаружено, более детально проверка будет проведена при добавлении тестов)
- Определена общая логика приложения (кто/что/каким образом делает)
- Приложение разбито на слои по традиционной модели (можно было бы ещё DDD прикрутить но во первых приложение не такое большое а во вторых я его попросту не умею делать)
- Для прогона сущностей с фронта на бек и обратно использую DTO, которые мапятся MapStructом (удобная вещь)
- Есть метод частичного заполнения бд из файлика (а там даже Stream Api используется!)
- Тесты (DataJpaTest, TestContainers, Моки) [+]
- Миграции через
liquibaseflyway [+] - Общий рефакторинг (логически разбить контроллер/маппер, вывести пути в константы) [+]
- Обработка исключений [+-]
- Авторизация/аутентификация (Spring Security) [?]
- Транзакции [-]
- Описание API в свагере [?]
- Базовую систему рекомендаций (на основе прослушиваний) [!]
- Дженерики [!]
- Докер [+]
- Больше сущностей (например жанры или альбомы) [?]
- Возможно придётся немного переработать модель акторов приложения (ведь для Security предполагается чтобы у всех товарищей роли были, а так получается что это сущности из разных таблиц будут)
- Можно было бы добавить дженерики (но как и куда?)
- При работе с логикой чуть проще чем "просто сохрани сущность" появляется потребность в чужих репозиториях/сервисах, как пример - треку нужно обращаться к артистам и так далее. Однако брать к себе напрямую чужой репозиторий вроде как некрасиво (так как мы должны по хорошему делегировать этот процесс сервису), а используя напрямую один сервис в другом - можно и циклическую зависимость создать.
- А ещё я в магу поступил и переехал в другой город! Можете открыть за меня шампанское. Заранее прошу прощения за задержку рапорта по проекту