Skip to content

Тестовое задание на позицию fullstack PHP-разработчика для компании CUBA

Notifications You must be signed in to change notification settings

a-nikolaefff/cuba-test-app

Repository files navigation

CUBA Test App

Задание

Нужно написать микро-приложение, делающее выборку (копирование статей) из wikipedia во внутреннюю БД, с возможностью дальнейшей навигации и поиска по скопированным статьям:

Интерфейс системы состоит из двух вкладок (импорт статей и поиск). Вкладки должны переключаться между собой без перезагрузки страницы.

  1. После ввода ключевого слова и нажатии кнопки «Скопировать» должен производиться запрос к сайту wikipedia.org c поиском статьи по соответствующему слову/словосочетанию (для простоты примем, что оно полностью совпадает с названием статьи в Wikipedia). Запрос и копирование контента может производится любыми спобосами в т.ч. используя MediaWiki API.

  2. Если целевая статья найдена, то нужно скопировать голый текст статьи (plain text) без тегов в собственную БД с последующим разбором на слова-атомы (любое сочетание символов без пробелов и знаков препинания). Эти данные потребуются для осуществления поиска по ключевому слову (см. ниже).

  3. После завершения обработки нужно вывести итоговую информацию и добавить строчку в результирующую таблицу, которая содержит все статьи, скопированные из wikipedia. Данная таблица показывается при первом заходе в систему и должна обновляться без перезагрузки страницы.

  4. Поиск должен работать по внутренней БД на основе слов-атомов содержащихся в статье (учитывается точное совпадение, морфология не нужна). Слова-атомы должны храниться в отдельной таблице, связь со статьями осуществляется через специальную связующую таблицу (ID слова, ID статьи, Кол-во вхождений). Результаты поиска выдаются в порядке убывания кол-ва вхождений ключевого слова в статье.

  5. Под словом атомом подразумевается любая последовательность символов [a-Zа-Я0-9]. Для примера, во фразе: «Юрий Гагарин полетел в космос в 1961 году» будут следующие атомы: юрий, гагарин, полетел, в, космос, 1961, году.

  6. При клике на заголовок статьи, ее содержимое должно открывается в блоке справа (без перезагрузки страницы и без использования iframe).

Обязательно использование следующих библиотек и приемов:

соблюдение принципа MVC MySQL: таблицы innodb c внешними ключами скрипты должны нормально работать на PHP 8.1+ (без вывода каких-либо ошибок при error_reporting = E_ALL)

Данное требования не обязательное, но плюсом будет реализация системы на любом php-фреймворке (если есть опыт, то можно взять полноценный фреймворк типа Laravel, если опыта не достаточно, то совет - использовать микро-фреймворк или нативный подход без фреймфорка). Также одними из оценочных параметров будут:

Внешний вид интерфейса, никакой графики рисовать не нужно, но хорошая блочная верстка с соблюдением правил типографики и аккуратным внешним видом будет большим преимуществом. Возможно использование css-фреймворков (как вариант, bootstrap или tailwindcss).

Аккуратный код (форматирование кода, поддержка стандарта кодирования PSR, комментарии к коду phpdoc). Это один из наиболее важных критериев, просьба обратить на него внимание.

Готовое приложение должно быть выложено на любой из хостингов и доступно для публичного просмотра.

Реализация

Стек: PHP 8.2, Laravel 10, Vue.js, Tailwind

About

Тестовое задание на позицию fullstack PHP-разработчика для компании CUBA

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages