Skip to content

Repository files navigation

Qortex Music Catalog

Небольшое веб-приложение для каталогизации музыкальных альбомов. Проект сделан в стиле SDD: сначала зафиксированы сущности, ограничения и пользовательские сценарии, затем собран минимальный вертикальный путь от данных до интерфейса.

Что умеет приложение

  • искать альбомы по названию альбома, исполнителя или песни;
  • фильтровать каталог по исполнителю;
  • добавлять исполнителей и песни;
  • создавать и редактировать альбомы с треклистом;
  • удалять альбом вместе с его треками;
  • показывать один и тот же трек в разных альбомах под разными номерами;
  • запускаться локально или через docker compose up.

Модель данных

Artist 1 ─── * Album 1 ─── * Track * ─── 1 Song
  • Artist — имя исполнителя;
  • Album — название, исполнитель и год выпуска;
  • Song — название песни;
  • Track — связь песни с альбомом и её порядковый номер.

Номер трека уникален внутри альбома. Связь Track намеренно вынесена в отдельную модель: одна и та же песня может находиться в нескольких альбомах и иметь в них разные номера.

Локальный запуск

Нужен Python 3.12+.

python -m venv .venv

# Windows PowerShell
.venv\Scripts\Activate.ps1

pip install -r requirements.txt
python manage.py migrate
python manage.py seed_demo
python manage.py runserver

Открыть: http://127.0.0.1:8000/

Запуск через Docker

docker compose up --build

Открыть: http://127.0.0.1:8000/

Миграции и идемпотентное заполнение демо-данными выполняются при старте контейнера, поэтому после запуска каталог сразу готов к проверке. SQLite хранится в named volume sqlite_data. Исходники не монтируются внутрь контейнера: это делает запуск повторяемым и не требует autoreloader для демонстрационного сценария. Контейнер ограничен 256 МБ оперативной памяти.

Для локальной настройки доступны переменные окружения:

  • DJANGO_SECRET_KEY — ключ Django;
  • DJANGO_DEBUG1 или 0;
  • DJANGO_ALLOWED_HOSTS — список хостов через запятую.

Проверка

python manage.py test
python manage.py check

Тесты проверяют:

  • повторное использование одной песни в разных альбомах;
  • запрет одинакового номера трека в одном альбоме;
  • отображение и поиск данных;
  • создание альбома с треком;
  • каскадное удаление треков вместе с альбомом.

Архитектурные решения

Приложение намеренно не использует отдельный frontend-сборщик: для такого объёма требований серверный Django-rendering даёт меньше движущихся частей и простой запуск. Интерфейс разделён на переиспользуемый базовый шаблон, страницы каталога и формы. Модель Track отвечает за предметные ограничения треклиста, а транзакция используется при сохранении альбома и его треклиста. Docker-образ содержит только приложение и зависимости, миграции выполняются при запуске.

Следующий естественный шаг для production-версии — добавить аутентификацию, API для внешнего клиента, обложки альбомов и PostgreSQL.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages