TatyanaDolgova / filmopoisk

0 stars 0 forks source link

Review Борзов Александр #5

Open Sborzov456 opened 1 week ago

Sborzov456 commented 1 week ago

Review

Базовые требования: 15 баллов / 15 баллов

Критерий Макс. Моя оценка
Создан github-репозиторий, в нём есть README, gitignore, установлены все необходимые зависимости 5 баллов. 5 баллов
Проект запускается 5 баллов. 5 балла
Вёрстка соответствует дизайн-макетам (допускаются минимальные отхождения, адаптив не требуется) 5 баллов. 5 балла

Функциональные требования:

Шапка: 1 балл / 2 балла

Критерий Макс. Моя оценка
Позиционируется липко (стики) 2 балла. 1 балла

У иконки поиска такой же z-index, как и у шапки, из-за чего ее (иконку) видно над шапкой при скролле.

Авторизация: 15 баллов / 16 баллов

Критерий Макс. Моя оценка
Для реализации модального окна используется портал 3 балла. 3 балла
После успешной авторизации кнопка «Войти» меняется на заглушку иконки пользователя и кнопку «Выйти» 2 балла. 2 балла
Сохраняем авторизационный токен из ответа ручки бэка (например, в localStorage) 4 балла. 4 балла
В идеале, работать с токеном через thunk (где-то в мидлваре) 3 балла. 2 баллов
По клику на кнопку «Выйти» удаляем токен и снимает авторизацию 2 балла. 2 балла
При инициализации приложения проверяем авторизационный токен 2 балла. 2 балла

Токен помещается в localStorage действительно внутри asyncThunk, однако преимущества этой мидлвари никак не были использованы, посколько в слайсе не обрабатываются состояния данного asyncThunk при помощи extraReducers, выходит, что от такой мидлвари нет большой пользы.

Реализована страница списка фильмов: 14 баллов / 14 баллов

Поиск:

Критерий Макс. Моя оценка
Поиск происходит во время ввода пользователем символов. Дёргаем ручку /search 4 балла. 4 балла

Фильтры:

Критерий Макс. Моя оценка
Реализованы фильтры с dropdown 4 балла. 4 балла
Сохранять фильтры в query-params 3 балла. 3 баллов
Реализован список фильмов с пагинацией 3 балла. 3 балла

Страница фильма: 14 баллов / 17 баллов

Реализована работа с получением данных:

Критерий Макс. Моя оценка
Дёргаем ручку /movie 4 балла. 4 балла
Соответствующие данные отрисованы 3 балла. 3 балла

Возможность поставить оценку

Критерий Макс. Моя оценка
Есть запрос за получением оценки для фильма 3 балла. 3 балла
Если пользователь авторизован, даём возможность поставить оценку - запрос мутации 3 балла. 3 балла
После выставления оценки обновляем кеш запроса /movie 0 балла. 4 балла

shared/api/api.ts - 77 строка, в мутации для rateMovie отсутствует инвалидация кэша фильма.

Общий функционал: 7 баллов / 8 баллов

Критерий Макс. Моя оценка
Реализовать единообразную обработку ошибок для запросов 1 балла. 2 балла
Реализован лоадер 2 балла. 2 баллов
Используем debounce для поиска фильма и выставления оценки 4 балла. 4 балла

Ты обрабатываешь мутацию на rateMovie и логин через try catch, в гет запросах используешь error из хука, который предоставляет RTK Query, что не является единообразной обработкой ошибок.

Единообразной обработки ошибок можно было бы добиться, если сделать api client, который бы отправлял запросы вместо fetch и внутри него сделать обработку ошибок. Сам же api client использовать как для реализации кастомного fetchBaseQuery для RTK Query, так и для отправки запросов в asyncThunk, тогда ошибки обрабатывались бы одинаково в одной сущности.

Однако обработка ошибок есть, это уже хорошо!

Стор: 8 баллов / 8 баллов

Критерий Макс. Моя оценка
Используется rtk и rtk-query 4 балла. 4 балла
Данные корректно разбиты на модули (пример - авторизация, searchParams из фильтров) 2 балла. 2 балла
Селекторы написаны оптимально (нет кучи дублирования) 2 балла. 2 балла

Миграция на Next: 0 баллов / 20 баллов

Критерий Макс. Моя оценка
Реализована миграция с использованием SSR 14 баллов. 0 баллов
Для картинок используется Image некста. Скрины фильма, которые вне вьюпорта грузятся лениво 2 балла. 0 баллов
Страница фильма реализована с помощью Dynamic Routes 4 балла. 0 баллов

Ограничения:

Набранная сумма 74 балла

Фидбэк

Проделана большая работа, ты молодец!

Плюсы работы:

  1. Отличная работа с верткой, все выглядит ровно и красиво, в полном соотвествии с макетом
  2. Внимание к деталям - бордер у инпута поиска по наведению, а также возможность за раз открыть только один фильтр, этого, вроде не было в требованиях, но круто, что есть в проекте!
  3. Проделана грамотная работа по декомпозиции проекта: отсутствуют огромные компоненты и по минимуму дублирования

Минусы работы:

  1. Я так понимаю, при проектировании вдохновение было взято из FSD, однако по итогу, к сожалению, FSD проект абсолютно не соответствует. Это не очень хорошо, так как названия папок ты взяла оттуда, что сразу наталкивает на мысли об их содержимом, но содержимое не соответствует методологии, что может путать.
  2. Не очень понятная работа с иконками, ты для каждой из них сделала компонент, чтобы можно было удобно импортировать, но не стоило делать это вручную (для этого есть специальный плагин под vite) и тем более мешать их с обычными компонентами.
TatyanaDolgova commented 1 week ago

Спасибо за проверку, вот что значит и похвалить и точки роста подсветить!)