Серверная часть Ruby on Rails с интерфейсом React/Redux. Пользователи могут сохранять свои любимые шоу и добавлять эпизоды в свою линейку. Они могут просмотреть свой состав в формате календаря, чтобы узнать, когда и где выходят в эфир их телешоу. Пользователи также могут видеть трендовые и самые просматриваемые шоу, а также шоу, премьеры которых состоятся на этой неделе. Этот проект был создан независимо мной, Мэтью Торри, в качестве моего последнего приложения в Flatiron School для их программы погружения в программную инженерию.
Я создал серверную часть своего приложения, используя Ruby on Rails. Для получения телевизионных данных я использовал два разных API: API trakt.tv и API TVmaze, а запросы на выборку выполняются из серверной части. Модели: User
, Show
, Episode
, UserShow
, UserEpisode
. User
может иметь множество шоу и множество эпизодов шоу. Они также могут иметь множество user_shows
и user_episodes
(для рейтингов и т. д.). Для всех моделей требовался контроллер, поскольку действия CRUD доступны всем моделям.
Интерфейс был создан с использованием React и Redux. Он имеет более двух десятков компонентов с четырьмя редукторами (шоу, эпизоды, поиск, дополнения), которые представляют собой четыре основных контейнера приложения.
Отвечает за получение и отображение информации о шоу из API и серверной части. Состояние Show Redux включает в себя myShows
(сохраненные пользователем шоу), onTonight
(сегодняшние шоу из API), premieres
(премьера шоу на этой неделе из API) и isFetching
(логическое значение). Основными контейнерами для шоу являются ShowContainer
, PremieresContainer
и ShowCalendar
.
Дочерними элементами ShowContainer
являются ShowList
и ShowItem
(внук); другие дочерние элементы — это ShowPage
с братом-близнецом SuggestedList
.
PremieresContainer
и ShowCalendar
не имеют дочерних элементов, но являются контейнерами, поскольку отвечают за несколько задач, включая выборку шоу или эпизодов, а также добавление/удаление сохраненных пользователем элементов.
Отвечает за получение и отображение информации об эпизодах из API и серверной части. Состояние Episode Redux включает myLineup
(сохраненные пользователем эпизоды), showEpisodes
(эпизоды конкретного шоу, полученные из TVmaze API) и isFetching
(логическое значение). Есть один контейнер, EpisodeContainer
. Дочерними элементами EpisodeContainer
являются EpisodeList
и EpisodeItem
(внук).
Пользователи могут просматривать эпизоды и добавлять определенные эпизоды в свою линейку из EpisodeItem
.
Отвечает за получение и отображение информации о шоу из API TVmaze на основе пользовательского ввода. Состояние Search Redux включает results
(результаты поиска) и isFetching
(логическое значение). Контейнером является SearchContainer
, у которого есть дочерний элемент ( SearchResults
) и внук ( SearchItem
).
Пользователи могут сохранять шоу из SearchResults
с помощью кнопки на SearchItem
.
Отвечает за получение и отображение дополнительной информации из API trakt.tv. Состояние Extras Redux включает в себя trending
(эпизоды, популярность которых изменилась за последний день), watching
(шоу, у которых больше всего зрителей), ratings
(массив пользовательских user_shows, которые включают рейтинг) и isFetching
(логическое значение). В состав Extras входят три контейнера: DashboardContainer
, TrendingContainer
и MostWatchedContainer
.
DashboardContainer
управляет целевой страницей после входа в систему. У него есть два дочерних элемента, DashboardLineupList
и DashboardOnTonightList
, каждый из которых имеет дочерний элемент DashboardLineupItem
и DashboardOnTonightItem
. DashboardLineupList
отображает серии из списка пользователя, которые выходят в эфир в текущий день. DashboardOnTonightList
отображает эпизоды, которых нет в списке пользователей, но которые выходят в эфир сегодня и имеют высокий рейтинг.
TrendingContainer
вызывает API trakt.tv для получения последних трендовых шоу и является родительским элементом TrendingItem
, который отображает каждый результат запроса.
MostWatchedContainer
вызывает API trakt.tv для получения наиболее просматриваемых шоу и является родительским элементом MostWatchedItem
, который отображает каждый результат запроса. Пользователь также может фильтровать результаты по указанному времени (неделя, месяц, год, когда-либо).
Мои одноклассники в школе Flatiron всегда самые лучшие и отзывчивые, так что спасибо! Также спасибо моим инструкторам Йоханну Керру, Линдси Уэллсу и Эндрю Кону за то, что они всегда были замечательными вторыми глазами в моей работе.