Подойдите пожалуйста к исполнению задания максимально усердно. Продумайте архитектуру проекта, используйте "плюшки" фреймворка, которые сделают ваш код качественным. Максимально хорошо организуйте код. Если можно что то вынести в сервисный слой - выносите, если можно где то использовать eloquent scopes - используйте (думаю, что вы поняли. Знаете как показать свои знания - показывайте). Напишите свой код так, чтобы не стыдно было показать другим.
Проверьте пожалуйста работоспособность вашего проекта (чек-лист проверки).
Не забывайте, что мне необходимо по этому, крайне небольшому, заданию оценить ваши знания. Я хочу увидеть production ready сервис, который вы можете запустить в работу прямо сейчас.
Если у вас PHPStorm, то сделайте так, чтобы он не ругался на код. Подключите ide-helper (https://github.com/barryvdh/laravel-ide-helper), сгенерируйте файлы _ide_helper.php и _ide_helper_models.php. После этого прогуляйтесь по своему коду и поправьте в соответствии с рекомендациями.
Если вам не понятно задание - не бойтесь задавать вопросы.
Необходимо написать небольшой сайт - статейник. Макет на основе laravel/jetstream, необходимо использовать [https://tallstack.dev/] TALL stack. Главное, чтобы на страницах присутствовали все компоненты.
Можно не реализовывать хранение изображений. Для заглушек можно юзать сервис https://placeholder.com/ или подобный (чтобы не заморачиваться с нарезкой). Либо сделать 2 изображения (миниатюра и обычное) и переиспользовать их.
Всю логику реализуем встроенным функционалом Laravel.
Результат необходимо загрузить в публичный репозиторий GitHub.
[https://tallstack.dev/] TALL stack
- PHP 8.0+
- Laravel 8.53+
- Livewire 2.5.5+
- Alpine.js 3.2.3+
- Tailwind CSS 2.2.7+
- Главная страница Url: /
- Каталог статей Url: /articles
- Страница статьи Url: /articles/{slug}
Компоненты:
- Навигационное меню. Активный пункт "Главная страница".
- Последние добавленные статьи. 6 миниатюр статей в сортировке LIFO
Компоненты:
- Навигационное меню. Активный пункт "Каталог статей".
- Листинг статей. Сортировка LIFO. 10 миниатюр статей на страницу
- Постраничная навигация
Компоненты:
- Навигационное меню. Активный пункт "Каталог статей".
- Обложка статьи
- Текст статьи
- Теги статьи
- Счетчик лайков статьи
- Счетчик просмотров статьи
- Форма коментария
Необходимо сделать так, чтобы в блоке меню был помечен пункт раздела, в котором находится в текущий момент пользователь. Правила формирования подсветки выбранного раздела описаны в блоке Описание страниц
Стандартная постраничная навигация Laravel (https://laravel.com/docs/8.x/pagination#introduction)
Блок состоит из следующих элементов:
- миниатюра обложки статьи
- заголовок статьи
- краткое описание статьи - первые 100 симоволов от текста статьи
Ссылка. Состоит из url и label.
Элемент является кнопкой, на которой в качестве label написано число. При клике на кнопку отправляется AJAX запрос, инкрементирующий счетчик. В ответе на запрос возвращается новое значение, которое необходимо отобразить в label.
Текстовый элемент, отображающие текущий счетчик просмотров. Через 5 секунд после открытия статьи отправляется запрос, инкрементирующий счетчик. В ответе на запрос возвращается новое значение, которое необходимо отобразить в элементе.
Форма, состоящая из 2х полей:
- Тема сообщения
- Текст сообщения
При нажатии на кнопку "Отправить" отправляется AJAX запрос (реализация с помощью Livewire). При успешной обработке форма заменяется на плашку "Ваше сообщение успешно отправлено". Можно использовать встроенные компоннты Laravel/Jetstream.
(реализация с помощью Livewire/Alpine.js) Ваша реализация должна позволять избежать блокировок БД в случае огромного количества входящих запросов (допустим 1 млн входящих запрос на инкрементацию счетчика просмотров). Это требования необходимо вам для организации правильного хранения лайков и просмотров.
Ответ: новое значение счетчика
Ответ: новое значение счетчика
(Реализация с помощью Livewire).
Необходимо реализовать следующую логику:
- API метод получает запрос
- метод возращает ответ клиенту
- метод исполняет логику в фоновом режиме
Передаваемые поля:
- subject. Varchar(255).
- body. LongText
Ответы:
- ValidationException. Если не заполнено одно из полей.
- Success. Любой, главное чтобы с 200 кодом.
Вывод комментария под статьёй без перезагрузки страницы.
Развертывание должно производиться через стандартные механизмы:
- git clone ...
- php artisan migrate
- php artisan db:seed
- php artisan serve
То есть никакие импорты SQL файлов \ загрузка zip архивов - не приемлемы.
- ArticleSeed. Должен сгенерировать 20 статей с рандомной датой и рандомным текстом (длина текста от 200 символов). Используем Faker.
- ArticleTagSeed. Должен сгенерировать некоторое количество тегов, чтобы хотя бы 1 был в каждой статье.
- удаляем директорию vendor и node_modules (если требуется)
- удаляем все таблицы с тестовой БД (или пересоздаем БД)
- удаляем файл .env из корня проекта
- создаем файл .env на базе .env.example
- запускаем composer install
- запускаем npm install (если требуется)
- создаем ключ (php artisan key:generate)
- запускаем миграции (php artisan migrate)
- запускаем сиды (php artisan db:seed)
- запускаем локальный сервер (php artisan serve)
- проверяем весь написанный функционал. Все страницы должны содержать все элементы, описанные в блоке Описание страниц