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