Skip to content

Бэкенд сайта фестиваля «Любимовка»

Notifications You must be signed in to change notification settings

Studio-Yandex-Practicum/Lubimovka_backend

Repository files navigation

Tests Prod build and deploy Stage build and deploy python safety

Бэкенд "Любимовка"

Это репозиторий серверной части проекта "Любимовка". Репозиторий frontend проекта можно найти по ссылке: Фронтенд проекта «Любимовка».

Что сделано и чем отличается от структуры по умолчанию

  • poetry как менеджер пакетов и управления зависимостями
  • изменена структура:
    • настройки и django приложения в папке /config
    • папка для приложений: /apps
  • отдельные настройки для тестов или локального / prod окружения
  • базовые линтеры (black, flake8)
  • pre-commit хуки
  • используется PostgreSQL
  • базовая модель TimeStampedModel (импортировать из core.models)
  • автодокументация swagger/redoc (http://base_url/api/v1/schema/swagger-ui/ или http://base_url/api/v1/schema/redoc/)

Общие требования к стилю кода - ссылка

Что нужно проверить, когда вы сделали PR - чек-лист для PR

Правила работы с git (как делать коммиты и pull request-ы)

  1. Две основные ветки: master и develop
  2. Ветка develop — “предрелизная”. Т.е. здесь должен быть рабочий и выверенный код
  3. Создавая новую ветку, наследуйтесь от ветки develop
  4. В master находится только production-ready код (CI/CD)
  5. Правила именования веток
    • весь новый функционал — feature/название-функционала
    • исправление ошибок — bugfix/название-багфикса
  6. PR в develop и master должны быть базово покрыты тестами:
    • на доступность эндпойнтов
    • проверка списка полей
    • проверен критичный функционал (пример: фильтр по слову “сосиска” возвращает только результаты с “сосиска“)

Важные практики

Создание миграций:

  • При создании миграций данных "вручную" обязательно передавайте параметр reverse_code. Это необходимо для возможности откатывать миграции. Если при откате миграции данные изменять не требуется, в качестве значения можно использовать RunPython.noop.
    Пример:
# Ваш код
...
operations = [
    migrations.RunPython(your_command, reverse_code=migrations.RunPython.noop),
]

Подготовка окружения для разработки

Предварительные требования:

  1. Poetry
    Зависимости и пакеты управляются через poetry. Убедитесь, что poetry установлен на вашем компьютере и ознакомьтесь с документацией.
  2. Docker
    В проекте используется PostgreSQL. Рекомендуем запускать БД через Docker, следуя дальнейшим инструкциям.
  3. Файлы requirements
    Файлы редактировать вручную не нужно. Обновляются через pre-commit хуки (если есть изменение в зависимостях, то список обновится при коммите).
  4. pre-commit хуки
    Документация
    При каждом коммите выполняются хуки (автоматизации) перечисленные в .pre-commit-config.yaml. Если не понятно какая ошибка мешает сделать коммит можно запустить хуки вручную и посмотреть ошибки:
    pre-commit run --all-files

Разворачиваем проект локально:

  1. Склонируйте проект, перейдите в папку /backend
    git clone git@github.com:Studio-Yandex-Practicum/Lubimovka_backend.git
    cd Lubimovka_backend
  2. Убедитесь что poetry установлен. Активируйте виртуальное окружение. Установите зависимости
    poetry shell
    poetry install
  3. Разверните и запустите базу данных, используя postgres-local.yaml и docker compose.
    docker compose -f postgres-local.yaml up -d
  4. Дополнительно: остановка и удаление и т.д. как с любым контейнером docker, например:
    docker compose -f postgres-local.yaml down  # остановить
    docker compose -f postgres-local.yaml down --volumes  # остановить и удалить базу
  5. Сделайте миграции
    python manage.py migrate
    
  6. Установите pre-commit хуки
    pre-commit install --all
  7. Убедитесь, что при запуске ваш IDE использует правильное виртуальное окружение. В противном случае - самостоятельно укажите путь к виртуальному окружению. Посмотреть путь можно следующей командой:
    poetry env info --path
  8. Файл .env должен находиться в корневой папке проекта. Если вы решите не создавать свой .env файл - в проекте предусмотрен файл .env_local, обеспечивающий переменные для базовой работы на локальном уровне.
  9. Для корректной работы сервиса по выгрузке заявок (на участие в фестивале) в Google-таблицу потребуются переменные окружения - добавьте файл .env в корень папки проекта. Для проверки работы сервиса необходимо в админ панели внести spreadsheetId таблицы, в которую будет происходить выгрузка и наименование нужного листа. Не забудьте разрешить пользователю с адресом "lubimovka@swift-area-340613.iam.gserviceaccount.com" вносить изменения в вашу таблицу (Настройки доступа).

Про тесты

Тестов нет, но есть настройки для ускорения тестов + настройки для запуска unittest через pytest (удобно в vscode)

Права пользователей админ-зоны

Доступна команда для установки прав пользователей согласно их группам:

python manage.py set_perms

Заполнение БД тестовыми данными

Доступна команда для наполнения БД данными:

python manage.py filldb

Команда заполняет базу такими тестовыми данными, как:

  • персоны
  • фестивали, пресс-релизы, волонтёры, команда фестиваля, попечители, партнёры, отборщики, площадки
  • программы, авторы, пьесы
  • спектакли, мастер-классы, читки, события
  • баннеры, заявки на участие
  • пользователи-админы, редакторы, журналисты и наблюдатели (для входа используем: admin_X (где Х - в диапазоне от 00 до 04), editor_X (где Х - в диапазоне от 05 до 09), journalist_X (X в диапазоне от 10 до 14), observer_X (где Х - в диапазоне от 15 до 16) и дефолтный пароль "pass"), пользователь суперадмин (superadmin/superadmin)

Для создания таких тестовых данных, как проекты, новости и блог доступна команда:

python manage.py filldb_articles

Ее следует применять ПОСЛЕ команды filldb (создает объекты, необходимые для создания сложных сущностей блога/проекта/новости).

Для очистки БД от данных (но не удаления таблиц) можно использовать команду:

python manage.py flush