Skip to content

Imbirel/test-task-movie-catalog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Каталог фильмов - Тестовое задание

О проекте

Техническое задание

Реализовать приложение «Каталог фильмов», который состоит из:

  • отображения списка фильмов,
  • поиска по названию,
  • просмотра карточки фильма.

Для реализации можно использовать любой фреймворк и библиотеки. Дизайн на собственное усмотрение.

Требования:

  • Адаптивная верстка
  • Соблюдение семантики
  • Использование какой-либо методологии CSS будет плюсом
  • Загрузка данных о фильмах с сервера (можно использовать что-нибудь вроде json-server) с обработкой ошибок
  • Используйте средства оптимизации по максимуму
  • Анимации приветствуются

А так же ответы на вопросы:

Технологичекий стек

  • Vite
  • React
  • Axios
  • Tanstack query
  • React router
  • Tanstack virtual

Что реализовано

По ТЗ у нас HighLoad проект (только для него нужны максимальные оптимизации).

  • Поиск:

    • Фильмов могут быть сотни тысяч, поэтому реализован серверный поиск по title с возможностью поиска по подстроке и без учета регистра. (Если на реальном проекте нельзя это реализовать, то можно использовать Web Workers для вычислений в фоновом потоке.)
    • Вместо хранения строки поиска в глобальном state или в контексте, используются URL-параметры. Результатами поиска можно будет поделиться.
  • Отображение списка фильмов:

    • При нажатии на карточку появляется модальное окно для просмотра подробностей о фильме. Реализовано с помощью <dialog> (Baseline Widely available) и createPortal, встраивается в <div id="modal-root"> в <body>.
    • Виртуализация списка с Infinity Scroll и автоматическое перестраивание сетки с помощью ResizeObserver API. Как альтернатива - можно без виртуализации реализовать Infinite Scroll с помощью IntersectionObserver API, но это будет хуже для HighLoad проекта - будет забиваться память. Классическую пагинацию в UI я решила не использовать, чтобы не заставлять пользователя совершать лишние действия.
  • Обработка ошибок:

    • Добавлена страница Not Found для 404 ошибки.
    • Fallback для изображений.
    • Отмена старого запроса при появлении нового. И обработка сетевых ошибок.
    • Общие типы вынесены в @packages/shared для использования их и беком, и фронтом.
  • Оптимизации дополнительные:

    • middlewares.js для отправления только необходимых данных. Снижает потребление памяти (в моем случае - в 2 раза). Как альтернатива - можно заранее подготовить данные для каждого типа запроса.

Что не закончено

  • Скелетоны
  • Error Boundaries

Установка и запуск

  1. Клонирование репозитория
git clone https://github.com/Imbirel/test-task-movie-catalog.git
  1. Установка пакетов.
pmpm install
  1. Запуск сразу и сервера и приложения из корня.
pnpm dev

About

Test task

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors