«What to watch» — это проект на Laravel, который представляет собой REST-API для веб-приложения онлайн-кинотеатра. В рамках этого проекта большой акцент делался на автоматизированном тестировании (помимо работы с API) и подходе TDD. Всего было написано 63 автотеста.
Чтобы развернуть проект локально или на хостинге, выполните последовательно несколько действий:
- Клонируйте репозиторий:
git clone [email protected]:kiipod/1622797-what-to-watch-2.git wtw
- Перейдите в директорию проекта:
cd wtw
- Установите зависимости, выполнив команду:
composer install
- Затем создайте файл .env:
cp .env.example .env
И пропишите в нем настройки, соответствующие вашему окружению.
- После этого сгенерируйте ключ приложения:
php artisan key:generate
- Запустите миграции:
php artisan migrate
- Заполните БД сидированными данными (по желанию):
php artisan db:seed
- Для запуска тестов используйте команду:
php artisan test
Для корректного выполнения тестов необходимо предварительно настроить подключение к тестовой базе данных в файле phpunit.xml
. Пример конфигурации:
<env name="DB_HOST" value="localhost"/>
<env name="DB_PORT" value="3306"/>
<env name="DB_DATABASE" value="testdatabase"/>
<env name="DB_USERNAME" value="root"/>
<env name="DB_PASSWORD" value="password"/>
Пользователь заполняет форму регистрации указав Имя, email, пароль и подтверждение пароля.
Дополнительно может быть загружен аватар.
Последовательность действий:
- Отправка post запроса с данными пользователя на endpoint регистрации.
- Валидация полученных полей. Проверка наличия обязательных полей и соответствия заданным правилам.
- Проверка, что указанный email не занят.
- Сохранение данных в БД, или возвращение списка ошибок при их наличии.
- Сохранение аватара в публичное хранилище и указание ссылки на файл в таблице пользователей.
- Возвращение токена для аутентификации пользователя под зарегистрированной учетной записью.
Правила валидации:
Поле | Тип | Обязательное | Правила | Пример |
---|---|---|---|---|
true | уникальное | mailto:[email protected] | ||
password | string | true | min: 8 | 12345678 |
name | string | true | max: 255 | John Doe |
file | file | false | image, max: 10M |
Правила валидации:
Пользователь заполняет форму авторизации, указав email и пароль.
- Отправка post запроса с данными пользователя на endpoint авторизации.
- Валидация полученных полей. Проверка наличия обязательных полей и соответствия заданным правилам.
- Возвращение токена для аутентификации пользователя.
Правила валидации:
Поле | Тип | Обязательное | Пример |
---|---|---|---|
true | mailto:[email protected] | ||
password | string | true | 12345678 |
Метод возвращает токен аутентификации.
Метод возвращает информацию о пользователе: имя, email, аватар и роль пользователя.
Метод доступен только аутентифицированному пользователю.
С помощью данного метод пользователь может изменить свое имя, email, пароль или загрузить аватар.
Правила валидации:
Поле | Тип | Обязательное | Правила | Пример |
---|---|---|---|---|
true | уникальное | mailto:[email protected] | ||
password | string | false | min: 8 | 12345678 |
name | string | true | max: 255 | John Doe |
file | file | false | image, max: 10M |
Метод доступен только аутентифицированному пользователю.
Отправка post запроса на endpoint выхода пользователя.
Уничтожение токена пользовательской аутентификации.
Страница представляет собой список по 8 фильмов с пагинацией.
Информация о фильме содержит название, превью обложки (изображение для отображения в списке), превью видео (ссылка на превью) и другую дополнительную информацию для построения пагинации.
Есть возможность отсортировать список по дате выхода и рейтингу фильма.
По умолчанию фильмы сортируются по дате выхода, от новых к старым (desc).
Этот же endpoint может использоваться для получения списка фильмов по жанру.
- Отправка get запроса на endpoint получения списка фильмов
- Возвращение первых 8 фильмов, если не передано другое условие (параметр page)
- Вместе со списком сериалов возвращаются параметры пагинации: количество элементов всего ссылка на первую страницу, на последнюю, на предыдущую и следующую
Дополнительно вместе с запросом могут быть переданы следующие параметры:
- page — номер страницы, для пагинации
- genre — фильтрация по жанру
- status — фильтрация по статусу, по умолчанию значение
ready
, пользователь с ролью модератор может изменить значение на (pending
,moderate
) - order_by — правило сортировки. Возможные значения: released, rating
- order_to — направление сортировки. Возможные значения: asc, desc
При получении информации о фильме с идентификатором id
пользователь видит следующую информацию:
- Большой постер
- Превью (маленькое изображение)
- Обложка фильма
- Цвет фона для карточки фильма
- Название фильма
- Жанры
- Год выхода на экраны
- Описание
- Режиссёр
- Список актёров
- Продолжительность фильма
- Ссылка на видео
- Ссылка на превью видео
- Рейтинг фильма, в виде числа, к-во голосов
Если запрос выполняет авторизованный пользователь — в дополнение к другим данным, возвращается статус наличия фильма в избранном.
В случае попытки обращения к несуществующему фильму, ожидается возврат 404 ошибки.
Технический endpoint. Для формирования списка жанров в форме поиска или каталоге.
Метод доступен только аутентифицированному пользователю с ролью модератор.
Метод возвращает список фильмов, добавленных пользователем в избранное (список «К просмотру»).
Формат и информация возвращаемая в этом списке аналогична методу для получения списка фильмов.
Фильмы возвращаются в порядке добавления пользователем в список, от новых к старым.
Метод доступен только аутентифицированному пользователю.
Метод принимает на вход id
добавляемого фильма.
В случае попытки добавления несуществующего фильма, ожидается возврат 404 ошибки.
В случае попытки добавления в избранное фильма который уже присутствует в списке пользователя — ошибка 422, с соответствующим сообщением (message
).
Метод доступен только аутентифицированному пользователю.
Метод принимает на вход id
удаляемого фильма.
В случае попытки удаления несуществующего фильма, ожидается возврат 404 ошибки.
В случае попытки удаления фильма, который отсутствует в списке пользователя, — ошибка 422, с соответствующим сообщением (message
).
Метод доступен только аутентифицированному пользователю.
Отправляя на роут получения похожих фильмов с указанием id
фильма для которого запрашиваются похожие, метод возвращает список из 4 подходящих фильмов.
Похожесть определяется принадлежностью к тем же жанрам, что и исходный фильм (любым из имеющихся).
Формат и информация возвращаемая в этом списке аналогична методу для получения списка фильмов.
Метод принимает на вход id
фильма, в случае отсутствия такового — возвращается 404 ошибка.
Возвращает список отзывов. Каждый отзыв содержит: текст отзыва, имя автора, дату написания отзыва. Также может содержать оценку.
Отзывы, загруженные из внешнего источника, возвращаются в общем списке с именем автора «Гость» Отзывы отсортированы от наиболее новых к старым (desc).
В качестве параметра в адресе указывается id
фильма к которому добавляется комментарий.
Комментарий может быть добавлен отдельно, так и в ответ на другой, в этом случае в теле запроса указывается и comment_id
.
Добавление отзыва сопровождается выставлением оценки.
Метод доступен только аутентифицированному пользователю.
Правила валидации:
Поле | Тип | Обязательное | Правила | Пример |
---|---|---|---|---|
text | string | true | min: 50, max: 400 | Discerning travellers and Wes Anderson fans will luxuriate in the glorious Mittel-European kitsch of one of the director’s funniest and most exquisitely designed movies in years. |
rating | int | true | min: 1, max: 10 | 8 |
comment_id | int | false | exists | 1 |
Метод доступен только аутентифицированному пользователю.
Пользователь может отредактировать свой комментарий.
Модератор может отредактировать любой комментарий.
Правила валидации:
Поле | Тип | Обязательное | Правила | Пример |
---|---|---|---|---|
text | string | true | min: 50, max: 400 | Discerning travellers and Wes Anderson fans will luxuriate... |
rating | int | false | min: 1, max: 10 | 3 |
Метод доступен только аутентифицированному пользователю.
Пользователь может удалить свой комментарий, при условии, что комментарий не содержит ответов.
Модератор может удалить любой комментарий.
При удалении комментария, имеющего ответы, удаляются все его потомки.
Метод, возвращающий фильм, являющийся продвигаемым на данный момент (promo).
Формат и информация возвращаемая в этом списке аналогична методу для получения информации о фильме.
Метод доступен только аутентифицированному пользователю с ролью модератор.
При отсутствии запрошенного в роуте фильма в базе, на запрос возвращается 404 ошибка.
Модератор указывает в форме идентификатор фильма с сайта imdb вида tt0111161.
Создается фоновая задача, которая запрашивает данные о фильме из внешнего источника, и обновляет информацию о фильме в базе.
В момент создания заявки, фильм сохраняется только с imdb_id и статусом «в ожидании» (pending).
После загрузки данных, статус меняется на «на модерации» (moderate). Модератор может получить список фильмов с этим статусом, отредактировать его, заполнить недостающие поля, указать ссылки на видео и прочее, после чего поставить статус «готов» (ready) — после чего фильм будет доступен пользователям.
Для получения информации о фильме можно использовать сервис http://www.omdbapi.com (или api htmlacademy)
Метод доступен только аутентифицированному пользователю с ролью модератор.
Правила валидации:
Поле | Тип | Обязательное | Правила | Пример |
---|---|---|---|---|
imdb_id | string | true | уникальное, проверка формата ttXXX | tt0944947 |
При заполнении поля imdb_id и наличии фильма с таким id в базе — возвращается ошибка валидации 422.
При сохранении проверяем наличие связанных жанров и создаем при отсутствии.
Модератор может изменить информацию о фильме или заполнить недостающие данные после добавления фильма.
Метод доступен только аутентифицированному пользователю с ролью модератор.
Правила валидации:
Поле | Тип | Обязательное | Правила | Пример |
---|---|---|---|---|
name | string | true | max: 255 | The Grand Budapest Hotel |
poster_image | string | false | max: 255 | img/the-grand-budapest-hotel-poster.jpg |
preview_image | string | false | max: 255 | img/the-grand-budapest-hotel.jpg |
background_image | string | false | max: 255 | img/the-grand-budapest-hotel-bg.jpg |
background_color | string | false | max: 9 | #ffffff |
video_link | string | false | max: 255 | https://some-link/ |
preview_video_link | string | false | max: 255 | https://some-link/ |
description | string | false | max: 1000 | In the 1930s, the Grand Budapest Hotel is a popular European ski resort, presided over by concierge Gustave H. (Ralph Fiennes). Zero, a junior lobby boy, becomes Gustave’s friend and protege. |
director | string | false | max: 255 | Wes Anderson |
starring | array | false | [«Bill Murray», «Edward Norton», «Jude Law», «Willem Dafoe», «Saoirse Ronan»] | |
genre | array | false | [«Comedy»] | |
run_time | int | false | 99 | |
released | int | false | 2014 | |
imdb_id | string | true | уникальное, проверка формата ttXXX | tt0944947 |
status | string | true | статус из списка: pending, on moderation, ready | ready |
При отсутствии запрошенного в роуте фильма в базе, возвращается 404 ошибка.