Тестовое задание для фреймворка Yii2

Тестовое задание для фреймворка Yii2

Пример тестового задания для фреймворк Yii2 с шаблоном Advanced, которое нужно выполнить за 2 дня или раньше

Тестовое задание 1
При разработке использовать фреймворк Yii2 с шаблоном Advanced.
Готовый код разместить на GitHub
В коде максимально использовать встроенные классы Yii2 (хелперы, контроллеры, модели, экшены и т.д.)
Приветствуется качественное оформление кода: комментарии, соблюдение PSR, разделение на классы и т.д.

1. Создать таблицу и модель данных
Использовать драйвер SQLite (база данных в файле). Расположение и имя файла выбрать самостоятельно.
Использовать стандарный файл миграций Yii2. Предусмотреть в дальнейшем возможность перевода базы на другие типы (MySQL, MSSql и т.д.)
На продуктовой среде запретить откат данной миграции.
Структура БД ниже:
create table url_status
(
    hash_string varchar(32) not null,
    created_at datetime not null,
    updated_at datetime not null,
    url varchar(255) not null,
    status_code int null,
    query_count int null,
    constraint url_status_hash_string_uindex
        unique (hash_string)
);

alter table url_status
    add primary key (hash_string);
hash_string - md5-хеш от url
created_at - дата и время добавления записи
updated_at - дата и время обновления записи
url - адрес тестируемой страницы, например https://example.com/page/test
status_code - HTTP-код ответа страницы
query_count - количество запросов для данного адреса

2. Разработать REST-сервис
Эндпоинт сервиса /CheckStatus. Количество элементов в блоке url[] не ограничено.
Пример запроса: ```http request POST /CheckStatus Content-Type: application/json
{ “url”: [ “https://somesite_1.com”, “https://somesite_2.com”, “https://somesite_3.com”, “https://somesite_4.com” ] } ```
Для каждого url из входного запроса:
При наличии данных по данному URL в таблице (проверить по хешу):
если с момента последнего обновления прошло более 10 минут:
обновить status_code, (ожидание ответа - 5 секунд, при таймауте записывать код 0)
увеличить счетчик просмотров query_count
обновить время updated_at
если меньше 10 минут
получить status_code из таблицы
увеличить счетчик просмотров query_count
При отсутвии такого URL в таблице:
добавить новую запись:
hash_string вычислить как md5(url)
created_at, updated_at - текущее время
status_code - HTTP-код ответа страницы (ожидание ответа - 5 секунд, при таймауте записывать код 0)
url - обрабатываемый URL
query_count = 1
Сформировать ответ, в котором каджому URL сопоставлен полученный HTTP-код.
Пример ответа: json   {     "codes": [       {         "url": "https://somesite_1.com",         "code": 200       },       {         "url": "https://somesite_2.com",         "code": 404       },       {         "url": "https://somesite_3.com",         "code": 503       },       {         "url": "https://somesite_4.com",         "code": 200       }     ]   }

3. Разработать консольную команду
Вызов команды yii check-status/statistics должен выводить в STDOUT информацию по всем запросам за последние 24 часа (по полю updated_at), у которых статус ответа не равен 200. В выводе должны присутствовать поля url и status_code. Формат произвольный.

4. Дополнительные требования
Выполнение дополнительных требований не обязательно, но желательно. Если какое-то из них не получается выполнить, просьба объяснить причину. Например: большие трудозатраты, никогда не сталкивался с такой задачей и т.д.
Если требования не выполняются по причине больших трудозатрат, просьба как минимум обозначить ход решения задачи и оценку времени на выполнение.

4.1 Оформить код в виде composer-библиотеки
Весь код приложения должен быть в отдельном модуле и подключаться к Yii2-приложению командой composer require _module-name_
После подключения не должно производиться дополнительных манипуляций с кодом для работы с сервисом
Загружать модуль на packagist.com не обязательно

4.2 Вынести параметры модуля в конфигурацию
Самостоятельно определить настройки, которые можно вынести в конфигурацию
Вынести эти настройки в конфигурацию модуля/приложения

4.3 Оптимизировать скорость опроса хостов
Необходимо реализовать параллельный опрос статусов хостов в п.2 (REST сервис)

4.4 Реализовать SOAP-сервис с аналогичным функционалом
Добавить эндпоинт, на котором будет работать SOAP-сервис. Функционал повторяет п.3
Сервис должен рабоать по WSDL-схеме, которую необходимо разработать самостоятельно
По запросу GET /soap-endpoint?wsdl должна возвращаться WSDL-схема
По запросу POST /soap-endpoint должен работать сам сервис

Ещё статьи:

31.07.2024 Нюансы продления лицензии на 3 и 6 месяцев от 12 месяцев
На маркетплейсе есть такая кнопка "купить продление", при нажатии на неё есть выпадающий список продолжительность (3 мес. самый дешовый вариант и 6 мес.).
У розничного пользователя такой кнопки, она есть под партнёрским аккаунтом разработчика. ID: 494

31.07.2024 Ошибка в блоке "Вы смотрели" на базе catalog.section
При создании блока "Вы смотрели" на базе catalog.section на детальной странице товара столкнулся с ошибкой, когда блок работал не корректно, и данные о просмотренных товарах не обновлялись. ID: 493

26.06.2024 Мой отзыв о Seo-специалисте Александр Сергиенко
Делюсь моим опытом о Seo-специалисте Александр Сергиенко https://kwork.ru/user/21alex
Я думаю потенциальным клиентам этого мудака будет полезно узнать нутро этого "специалиста" ID: 471

© 2015-2024 Web админ
Связаться по WhatsApp