Перечисленные ниже требования рекомендуется выполнять параллельно с изучением основного материала по Flask и NGINX. Например, вы изучили, как создавать модели - примените эти знания к проекту, создав необходимые модели, после чего создайте миграции к моделям и примените их. По ходу изучения вы будете сталкиваться с тем, что полученных знаний недостаточно, чтобы применить их к проекту, но не волнуйтесь, очень скоро (по ходу изучения следующих пунктов) это изменится.
- Поиск фильмов должен давать результаты по частичному совпадению.
- Для вывода результатов поиска необходимо использовать пагинацию (по-умолчанию - 10 результатов на одну страницу).
- Операции с фильмами:
- добавлять может только авторизованный пользователь
- удалять может только авторизованный пользователь, который его добавил или администратор
- редактировать может только авторизованный пользователь, который его добавил или администратор
- запрашивать может кто угодно
- Фильмы можно фильтровать по:
- жанрам
- диапазону годов выхода
- режиссёру
- Фильмы можно сортировать по:
- рейтингу
- дате выхода
- Атрибуты фильма:
- название
- жанры
- дата выхода
- режиссёр
- описание (необязательное для заполнения поле)
- рейтинг (0-10)
- постер
- пользователь, добавивший фильм
- При удалении режиссёра фильм НЕ должен быть удален, вместо этого нужно установить director = ‘unknown’.
- Загрузка данных в БД должна сопровождаться валидациями по здравому смыслу (например, год выхода - должен быть числом, а не строкой).
- При ошибках нужно выдавать адекватные сообщения и коды ошибок, чтобы пользователь API мог понять, что является причиной ошибки.
- Должна присутствовать авторизация (рекомендуется использовать Flask-Login).
- Основа приложения - Flask Framework.
- Основной функционал должен быть покрыт тестами.
- Обязательным пунктом является применение Docker Compose.
- В качестве базы данных должен быть использован PostgreSQL.
- База данных должна быть нормализована и находиться минимум в 3-й нормальной форме.
- При написании кода должен соблюдаться code-style.
- Использование type hint активно приветствуется.
- В качестве виртуального окружения предпочтительней использовать один из этих инструментов: pipenv / poetry / pyenv.
- Запросы на ваш backend должны проксироваться через Nginx.
- При разработке использовать любой статический анализатор кода на выбор: pylint / prospector / black и т.д.
- В ходе разработки обязательно используется Git Flow, проект делится на Pull Request-ы, заранее прикидывается план задач, которые будете делать и оформлять в виде PR.
- Проект должен сопровождаться логгированием.
- Проект должен быть документирован при помощи swagger.