Best laravel framework open-source packages.

Rest api test task

Тестовое задание для M-Social (https://msocialproduction.ru/)
Updated 1 year ago

Тестовое задание на вакансию PHP Developer

Используемые технологии

  • PHP 8+
  • Laravel 9+
  • PostgreSQL

Задача

Необходимо на базе фреймворка Laravel сделать REST API приложение которое реализует следующий функционал:

1. Работа с пользователями:

1.1. Регистрация.

  • Обязательные поля:
    • email (проверка на валидность формата)
    • username (только символы латинского алфавита)
  • Необязательные поля:
    • Имя

1.2. Получение информации об авторизованном пользователе.

Здесь и далее пользователь является авторизованным, если в запросе присутствует заголовок User-Id со значением равным ID пользователя от которого должно выполняться действие. В ответе должны возвращаться следующие данные:

  • id
  • email
  • username
  • name

1.3. Редактирование данных авторизованного пользователя.

Пользователь должен иметь возможность редактировать свои username и имя.

1.4. Удаление пользователя.

В системе не может быть зарегистрировано два одинаковых email или username.

2. Работа с сервисом The Movie Database:

2.1. Раз в 3 часа собирать 5 страниц фильмов из Discover

Сохранять title и poster_path В базе не должно быть повторяющихся фильмов

3. Работа с сохраненными фильмами

3.1. Вывод всех сохраненных в базе фильмов с постраничной навигацией. По дефолту отдавать первые 15 фильмов

3.2. У пользователей должна быть возможность добавления фильмов в избранное.

3.3. У пользователя должна быть возможность удаления фильмов из избранного

3.4. Должен быть отдельный эндпоинт для вывода всех фильмов, которых у пользователя нет в избранном. В запросе должен передаваться query параметр loaderType. Должно быть реализовано 2 сервиса по поиску фильмов которых нет в избранном:

3.4.1. С использованием SQL запроса для выборки

(loaderType=sql)

3.4.2. В памяти приложения. Загрузить список всех фильмов и список избранных фильмов пользователя, и среди всех найти те, которых нет в избранном

(loaderType=inMemory)

Структуру базы, эндпоинты, успешные и неуспешные ответы сервиса продумать самостоятельно. В случае возникновения исключений во время запроса, должен возвращаться JSON ответ {“error”: “INTERNAL_ERROR”} и статус 500

Tags task https http