An open API service indexing awesome lists of open source software.

https://github.com/psigfry/fcmk


https://github.com/psigfry/fcmk

Last synced: 3 months ago
JSON representation

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 был в каждой статье.

## Примерный вид интерфейсов
### Главная страница
![Главная страница](https://i.ibb.co/Yykzsby/3.jpg)
### Каталог статей
![Каталог статей](https://i.ibb.co/f4WF9nb/4.jpg)
![Каталог статей](https://i.ibb.co/sFpCfrz/2.jpg)
### Статья
![Статья](https://i.ibb.co/5LYDhRT/1.jpg)