Тестовые задания с вакансий php-программист

Тестовые задания с вакансий php-программист

Тестовое задания от House

Нужно спроектировать каталог товаров, корзину и заказы для интернет-магазина. Затем реализовать для него JSON API. Для реализации использовать фреймворк Laravel.

Требования к структуре каталога.

Каталог состоит из дерева категорий (максимальная вложенность – 3) и товаров, которые принадлежат к одной из категорий второго/третьего уровня. Товары должны иметь следующие поля:

  • Название
  • Описание
  • Автогенерируемый slug
  • Категория второго/третьего уровня
  • Цена
  • Несколько дополнительных характеристики (например длина, ширина, вес).

Требования к корзине и заказам.

Взаимодействовать с корзиной и оформлять заказы могут как авторизованные, так и неавторизованные пользователи. Заказы должны содержать контактную информацию покупателя (например email и телефон), а также список купленных товаров. Для авторизированных пользователей контактная информация должна подтягиваться из профиля автоматически.

Требования к API.

API должно поддерживать авторизацию (рекомендуется использовать пакет Sanctum).

Рекомендуемый состав методов API.

  • Методы для регистрации/авторизации пользователей.
  • Метод для получения дерева категорий.
  • Метод для получения товаров. Должен поддерживать фильтрацию по категории/категориям любого уровня, а также по цене и дополнительным характеристикам. Значения фильтров должны валидироваться.
  • Метод для получения товара по slug.
  • Методы для работы с корзиной (добавление товара, редактирование количества товара/товаров, удаление товара).
  • Метод для оформления заказа.
  • Метод для получения списка заказов авторизированного пользователя.

Дополнения к заданию.

Будет плюсом, если дополнительные характеристики товаров будут вынесены в отдельную таблицу, а также будет реализовано API (не требующее авторизации) для добавления/удаления данных характеристик. При этом должны работать динамические фильтры для этих характеристик в методе получения товаров.

Будет плюсом, если будут написаны сидеры для каталога товаров.

Также будет плюсом, если разработанное приложение будет разворачиваться с помощью Docker.

Желательно приложить небольшую документацию к API (рекомендуется использовать Postman).

Тестовое задание от Hiqs

0. Компоненты:

  • Laravel
  • PostgreSQL

1. Вводное:

Дано:

  1. Модель User без кастомных полей
  2. Модель Article с полем text
  3. Относятся как многие ко многим  
4. Написать свойство articles в первой модели, которое вернёт все статьи пользователя
  4. Написать метод users во второй, которое вернёт всех авторов статьи

2. Работа с формами и запросами

  1. Расширить модель User, чтобы она имела поля, соответствющие форме index.html
  2. Дораработать приложение, чтобы данные с этой формы создавали объект User в базе данных на сервере
  3. После сохранения данных на сервере происходит редирект на точно такую-же страницу, где данные уже введены и их нельзя изменить

3. Мягкое удаление и миграции:

  1. Добавить возможность удалять статьи в мягком режиме
  2. При этом сделать возможность обновить систему со старой версии (из первого задания) на новую без полного сброса бд

4. Методы и строгая типизация:

Теперь надо создать функцию в классе статей, которая:

  1. Принимает пользователя и только пользователя - выдаёт mismatch в противном случае
  2. Возвращает
    • истину если указанный человек автор статьи
    • ложь - если это не так  
- null если статья удалена
  3. Если функция пытается вернуть что - то иное - mismatch

5. ORM:

Добавим новое поле пользователю user - experience 
Нужно создать функцию, в которой:

  1. Будет извлекаться пользователь и сохраняться в переменную $user = User::find(1)
  2. Дальше функция выводит experience
  3. Параллельно с работой функции
    1. Асинхронный метод меняет опыт на случайное число каждые несколько секунд
    2. В первой функции ещё раз выводится спустя промежуток времени опыт пользователя. 
Каким будет этот вывод ?

6. Загрузить на гитхаб в публичный репозиторий и отправить ссылку.

Желаем Вам удачи!

Тестовое задание от YLab

Необходимо реализовать сервис управления задачами используя возможности любого
фреймворка (yii, laravel, symfony).
Приложение должно состоять из 2-х частей:
1. Административная панель
2. Frontend API
Административная панель
Должна быть защищена авторизацией и иметь интерфейс со следующими разделами:
1. Список задач
2. Просмотр/редактирование/добавление задачи
3. Удаление задачи
4. Список статусов
5. Просмотр/редактирование/добавление статусов
6. Удаление статусов
7. Список пользователей
8. Просмотре/редактирование/удаление пользователей
Список полей сущности «Задача»:
1. Название - 255 символов
2. Описание - 4000 символов
3. Дата создания - дата/время
4. Дата редактирования - дата/время
5. Срок выполнения - дата/время
6. Статус - привязка к статусу
Список полей сущности «Статус»
1. Название - 255 символов
2. Сортировка - целое число
Реализация сущности «Пользователей» на усмотрение исполнителя.
Поле статус у задачи должно быть в виде выпадающего списка который заполняется
из статусов созданных в разделе «Список статусов».
Frontend API
Должно реализовывать следующие публичные(доступны без авторизации) методы:
1. Просмотр списка задач с возможностью фильтрации по всем полям кроме
описания
2. Просмотр одной задачи по идентификатору
3. Смена статуса задачи
Расположение и наименование методов, формат ответа на усмотрение исполнителя.

Тестовое задание от Profilance Group

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

  1. Сервис должен состоять из 1 страницы с формой ввода: поле для ввода ссылки и кнопка для отправки формы.
  2. Реализовать валидацию формы в виде проверки обязательного ввода ссылки.
  3. Реализовать отправку формы на сервер асинхронным запросом через JavaScript. Любой ответ сервера корректно обрабатывать и отображать.
  4. Реализовать сокращение ссылки на сервере и возврат сокращенной ссылки на клиент. При переходе по ссылке должно быть перенаправление на исходный адрес.
  5. Предоставить результат в виде ссылки на git репозиторий.

перейти к содержанию задачника