Skip to content

voodookiidoo/soundy

Repository files navigation

soundy

Наш ответ спотифаям!

Простой музыкальный сервис (что забавно - без музыки), имеющий примитивную модель взаимодействия.

Роли

  • Админ: может удалять и добавлять всех и вся, вводить цензуру, делать треки ограниченно доступными, удалять/добавлять юзеров, и давать им премиум статус (или лишать его), царь и бог нашего приложения
  • Артист: может создавать и публиковать треки, вводить на них цензуру, ограничивать к ним доступ, и следить за количеством подписчиков
  • Юзер: может регаться/входить в приложение, слушать треки при условии соответствия его свойств требуемым, подписываться на артистов и следить за ними, создавать/изменять/удалять плейлисты, следить за количеством слушателей этих плейлистов, и так далее

Сущнности

  • Треки
  • Юзеры (клиенты)
  • Артисты
  • Плейлисты

Что используется/реализовано

  • Схема определена (добавлю чуть позже миграциями, сама бд пока только существует на локальной машине)
  • Сущности связаны/объявлены корректно (на данный момент проблем не обнаружено, более детально проверка будет проведена при добавлении тестов)
  • Определена общая логика приложения (кто/что/каким образом делает)
  • Приложение разбито на слои по традиционной модели (можно было бы ещё DDD прикрутить но во первых приложение не такое большое а во вторых я его попросту не умею делать)
  • Для прогона сущностей с фронта на бек и обратно использую DTO, которые мапятся MapStructом (удобная вещь)
  • Есть метод частичного заполнения бд из файлика (а там даже Stream Api используется!)

Что хочу добавить/реализовать

  • Тесты (DataJpaTest, TestContainers, Моки) [+]
  • Миграции через liquibase flyway [+]
  • Общий рефакторинг (логически разбить контроллер/маппер, вывести пути в константы) [+]
  • Обработка исключений [+-]
  • Авторизация/аутентификация (Spring Security) [?]
  • Транзакции [-]
  • Описание API в свагере [?]

Что возможно добавлю

  • Базовую систему рекомендаций (на основе прослушиваний) [!]
  • Дженерики [!]
  • Докер [+]
  • Больше сущностей (например жанры или альбомы) [?]

Пожелания и размышления

  • Возможно придётся немного переработать модель акторов приложения (ведь для Security предполагается чтобы у всех товарищей роли были, а так получается что это сущности из разных таблиц будут)
  • Можно было бы добавить дженерики (но как и куда?)
  • При работе с логикой чуть проще чем "просто сохрани сущность" появляется потребность в чужих репозиториях/сервисах, как пример - треку нужно обращаться к артистам и так далее. Однако брать к себе напрямую чужой репозиторий вроде как некрасиво (так как мы должны по хорошему делегировать этот процесс сервису), а используя напрямую один сервис в другом - можно и циклическую зависимость создать.
  • А ещё я в магу поступил и переехал в другой город! Можете открыть за меня шампанское. Заранее прошу прощения за задержку рапорта по проекту

About

make some noize

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published