StepanTokt / Kinopoisk

0 stars 0 forks source link

Review #1

Open sheinid opened 3 months ago

sheinid commented 3 months ago

Review

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

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

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

Шапка (max 2 балла)

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

Авторизация (max 16 баллов)

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

Недостатки:

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

Поиск:

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

Фильтры:

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

Страница фильма (max 17 баллов)

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

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

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

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

Недостатки:

Общий функционал (max 8 баллов)

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

Стор (max 8 баллов)

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

Миграция на Next (max 20 баллов)

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

Недостатки:

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

Набранная сумма 90 балллов

StepanTokt commented 3 months ago

Review

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

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

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

Шапка (max 2 балла)

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

Авторизация (max 16 баллов)

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

  • Портал использован неправильно, в итоге модалка рендерилась всегда, даже когда она закрыта.
  • Работа с токеном не в миддлвари.
  • Не снижал баллы, но можно было сделать отдельный хук для получения данных об авторизации, а не везде обращаться к localStorage. Так бы все было гораздо лаконичнее.

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

Поиск:

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

Фильтры:

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

Страница фильма (max 17 баллов)

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

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

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

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

  • Кэш сбрасывается не после запроса

Общий функционал (max 8 баллов)

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

Стор (max 8 баллов)

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

Миграция на Next (max 20 баллов)

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

  • Использован Next 12, без серверных компонентов.
  • Делаются отдельные запросы на каждый фильм при загрузке списка.
  • В 12 нексте в динамичных роутах можно (и нужно) использовать getStaticProps/getServerSideProps для того, чтобы страница билдилась на сервере из запрашиваемых данных.

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

  • [ ] Новая функциональность, добавленная после дедлайна, не учитывается. Допустимы минорные доработки в уже существующую логику.
  • [ ] Функциональность, реализованная с помощью запрещённых библиотек (готовый ui-kit), не учитывается.

Набранная сумма 90 балллов

1)С замечанием по поводу thunk согласен 2)"Портал использован неправильно, в итоге модалка рендерилась всегда, даже когда она закрыта." - возможно не прав, но CreatePortal нужен был в данном дз, чтобы модалку правильно отобразить поверх всех страниц с помощью добавления ее в конец DOM, а не с точки зрения уменьшения количества ее рендеров. Тогда можно было бы и useCallback, useMemo использовать. Ну по крайней мере я проверял людей именно с этойточки зрения 3)"Использован Next 12, без серверных компонентов." - Если нет директивы use client, то они по умолчанию ssr 4) Согласен с "В 12 нексте в динамичных роутах можно (и нужно) использовать getStaticProps/getServerSideProps для того, чтобы страница билдилась на сервере из запрашиваемых данных.", однако в тз задания было необходимо заменить фильтрацию с query-params на роуты, к сожалению уточнений по поводу того каким образом это должно быть реализовано описано не было.

В принципе балл отличный, если вдруг пересмотришь свое мнение по какому-то пункту из тех, что отписал, дай знать)