Skip to content

avtocod/php-developer-test-task

Repository files navigation

avtocod

Тестовое задание для PHP-разработчика

Project language Build Status Do something awesome

Необходимо с использованием фреймворка Laravel реализовать сервис "Стена сообщений".

Несмотря на то, что приложение вам может показаться очень простым - реализовать его можно по-разному. Выявление уровня знания фреймворка и понимания "лучших практик" - цель этого задания.

Описание необходимого функционала

Главная страница

Содержит список всех сообщений. Сортировка - снизу-вверх (последнее добавленное сообщение - сверху). У каждого сообщения, помимо текста, указано имя (username) автора и опционально - аватар (используя API сервиса gravatar, например).

Если пользователь авторизован, ему становится доступна форма отправки сообщения.

Сообщение не может быть пустым (или состоять только из пробелов). При попытке отправки такого сообщения - пользователю выдается предупреждение "Сообщение не может быть пустым".

После успешной отправки, сообщение пользователя сразу появляется на "стене".

Авторизованный пользователь может также удалять свои сообщения.

Авторизация

В случае неуспешной авторизации, пользователю выводится сообщение "Вход в систему с указанными данными невозможен".

Регистрация

Требования к логину и паролю пользователя могут быть следующие:

  • Логин - только альфа-символы (a-z) (в любом регистре) + возможно цифры (0-9), минимальная длинна - 8 символов;
  • Пароль - обязательно символы в верхнем и нижнем регистрах + цифры, минимальная длинна - 6 символов.

В случае не успешной регистрации, каждое некорректно заполненное поле должно быть снабжено сообщением об ошибке.

Главное меню (сверху)

  • Пункт “Главная” - ведет на главную страницу, показывается всегда;
  • Пункты “Авторизация” и “Регистрация” показываются только не авторизованным пользователям.

Блок справа показывается только авторизованному пользователю. Содержит Имя пользователя и ссылку "Выход", нажав на которую, пользователь выходит из - под своей учетной записи.

Плюсом будет реализация возможности указания для определенных учётных записей прав "администратора" (is_admin), дающие возможность удалять чужие сообщения.

Вёрстка

HTML-верстка находится в директории ./storage/markup (bootstrap) - именно её необходимо использовать. Опционально можете сверстать свои представления.

Требования к используемым технологиям

Задание должно быть:

  • Выполнено с использованием PHP фреймворка Laravel версии не ниже 7.0;
  • БД - PostgreSQL, sqlite3;
  • Redis, Memcached - опционально, по желанию;

Требования к реализации

  • Разрешено использовать любые сторонние composer-пакеты;
  • Все реализуемые методы должны иметь корректный phpdoc-комментарий (описание на русском языке, @params, @return);
  • Для проверки передаваемых приложению по HTTP данных использовать валидацию входящих запросов (artisan make:request ...);
  • Не следует излишне усложнять решение реализацией DDD или абстракциями ради абстракций - об этих вещах мы подискутируем на собеседовании;
  • База данных должна создаваться с помощью миграций (никаких sql-файлов);
  • База данных должна наполняться фейковыми записями с помощью механизма сидов;
  • Для всего реализованного функционала должны быть написаны Unit-тесты (phpunit);
  • После завершения работы в данном readme-файле описать все действия, необходимые для запуска приложения (текущее содержание нужно удалить) с опциональными комментариями по решению задания.

Плюсами будут являться

  • Настройка CI (силами GitHub actions, TravisCI, etc) выполняющая запуск тестов и сборки на каждый коммит;
  • Интуитивно-понятное разбитие коммитов - одной конкретной задаче - один коммит (её правки - отдельный коммит);
  • Реализация сервисного слоя приложения, содержащего бизнес-логику;
  • Текст коммитов - на английском языке;
  • Форматирование исходного кода с помощью php-cs-fixer ($ composer php-cs-fixer).
  • Успешное прохождение проверок статического анализатора phpstan ($ composer phpstan).

Как начать выполнение тестового задания?

Для выполнения задания лучше всего использовать данный репозиторий как шаблон, для чего просто перейдите по этой ссылке.

Данный репозиторий уже содержит Dockerfile, docker-compose.yml и Makefile для быстрого запуска приложения силами docker (нет необходимости устанавливать php, postgres и пр. локально). Всё, что необходимо - это установленные локально docker и docker-compose. После клонирования репозитория просто выполните make install && make up - и можно приступать к написанию полезного кода. Команда make up "запускает приложение" на определенном TCP порту (ссылка на него будет выведена в терминале), HTTP запросы обслуживает RoadRunner. Для отладки можно пользоваться функциями \dev\dump() и \dev\dd().

Результат выполнения

Ссылку на репозиторий с вашей реализацией необходимо отправить нашему HR или TeamLead, от которого вы получили ссылку на данный репозиторий.

Приложение должно успешно запускаться после выполнения:

$ git clone ... && cd $_
$ make install
$ make migrate
$ make up

И проходить все тесты:

$ make test