https://github.com/psigfry/fcmk
https://github.com/psigfry/fcmk
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/psigfry/fcmk
- Owner: Psigfry
- Created: 2023-04-04T07:24:04.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-04-04T09:23:35.000Z (over 3 years ago)
- Last Synced: 2025-03-23T14:34:40.515Z (over 1 year ago)
- Size: 12.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Тестовое задание для PHP разработчика
## Предисловие
Уважаемые соискатели, уважайте свое время и время программиста, проверяющего вашу работу. Если так получилось, что вы не можете (не успеваете\не хотите) выполнить задание до конца - сообщите пожалуйста об этом.
Подойдите пожалуйста к исполнению задания максимально усердно. Продумайте архитектуру проекта, используйте "плюшки" фреймворка, которые сделают ваш код качественным. Максимально хорошо организуйте код. Если можно что то вынести в сервисный слой - выносите, если можно где то использовать eloquent scopes - используйте (думаю, что вы поняли. Знаете как показать свои знания - показывайте). Напишите свой код так, чтобы не стыдно было показать другим.
Не забывайте, что мне необходимо по этому, крайне небольшому, заданию оценить ваши знания. Я хочу увидеть production ready сервис, который вы можете запустить в работу прямо сейчас.
А далее у нас такие проекты:
- разработка Всероссийской системы оперативных донесений о чрезвычайных ситуациях
- работа над сервисом Телемедицинских консультаций
- работа над сервисом Силы и средства
- и другие проекты
**Если вам не понятно задание - не бойтесь задавать вопросы**.
## Описание
Необходимо написать небольшой сайт - статейник. Макет не принципиален. Можно взять bootstrap или любой другой фреймворк. Так же можно использовать любые JS фреймворки. Главное, чтобы на страницах присутствовали все компоненты.
Время выполнения: 1 неделя.
Можно не реализовывать хранение изображений. Для заглушек можно юзать сервис [https://placeholder.com/](https://placeholder.com/) или подобный (чтобы не заморачиваться с нарезкой). Либо сделать 2 изображения (миниатюра и обычное) и переиспользовать их.
Всю логику реализуем встроенным функционалом Laravel.
Результат необходимо загрузить в публичный репозиторий GitHub.
## Стек
- PHP 7.2+
- Laravel 8+
## Разделы сайта
- [Главная страница](#главная-страница)
- [Каталог статей](#каталог-статей)
## Страницы сайта
- Главная страница
Url: /
- Каталог статей
Url: /articles
- Страница статьи
Url: /articles/{slug}
## Описание страниц
### Главная страница
Компоненты:
- [Навигационное меню](#навигационное-меню). Активный пункт "Главная страница".
- Последние добавленные статьи. 6 [миниатюр статей](#миниатюра-статьи) в сортировке LIFO
### Каталог статей
Компоненты:
- [Навигационное меню](#навигационное-меню). Активный пункт "Каталог статей".
- Листинг статей. Сортировка LIFO. 10 [миниатюр статей](#миниатюра-статьи) на страницу
- [Пейджинация](#пейджинация)
### Статья
Компоненты:
- [Навигационное меню](#навигационное-меню). Активный пункт "Каталог статей".
- Обложка статьи
- Текст статьи
- [Теги статьи](#тег-статьи)
- [Счетчик лайков статьи](#счетчик-лайков-статьи)
- [Счетчик просмотров статьи](#счетчик-просмотров-статьи)
- [Форма коментария](#форма-комментария)
## Компоненты
### Навигационное меню
Необходимо сделать так, чтобы в блоке меню был помечен пункт раздела, в котором находится в текущий момент пользователь. Правила формирования подсветки выбранного раздела описаны в блоке [**Описание страниц**](#описание-страниц)
### Пейджинация
Стандартная пейджинация Laravel ([https://laravel.com/docs/7.x/pagination#introduction](https://laravel.com/docs/7.x/pagination#introduction))
### Миниатюра статьи
Блок состоит из следующих элементов:
- миниатюра обложки статьи
- заголовок статьи
- краткое описание статьи - первые 100 симоволов от текста статьи
### Тег статьи
Ссылка. Состоит из url и label.
### Счетчик лайков статьи
Элемент является кнопкой, на которой в качестве label написано число.
При клике на кнопку отправляется AJAX запрос, инкрементирующий счетчик. В ответе на запрос
возвращается новое значение, которое необходимо отобразить в label.
### Счетчик просмотров статьи
Текстовый элемент, отображающие текущий счетчик просмотров. Через 5 секунд после открытия статьи отправляется запрос, инкрементирующий счетчик. В ответе на запрос возвращается новое значение, которое необходимо отобразить в элементе.
### Форма комментария
Форма, состоящая из 2х полей:
- Тема сообщения
- Текст сообщения
При нажатии на кнопку "Отправить" отправляется AJAX запрос. При успешной обработке форма заменяется на плашку "Ваше сообщение успешно отправлено".
### Инкрементирование счетчика лайка
Ответ: новое значение счетчика
### Инкрементирование счетчика просмотров
Ответ: новое значение счетчика
## Развертывание
Развертывание должно производиться через стандартные механизмы:
- git clone ...
- php artisan migrate
- php artisan db:seed
- php artisan serve
То есть никакие импорты SQL файлов \ загрузка zip архивов - не приемлемы.
## Тестирование
- ArticleSeed. Должен сгенерировать 20 статей с рандомной датой и рандомным текстом (длина текста от 200 символов). Используем Faker.
- ArticleTagSeed. Должен сгенерировать некоторое количество тегов, чтобы хотя бы 1 был в каждой статье.
## Примерный вид интерфейсов
### Главная страница

### Каталог статей


### Статья
