Необходимо с использованием фреймворка 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