скачиваем проект с ветки master
$ git clone https://github.com/galexpert/test-service-np.git <имя_папки>
создаем и подключаем БД на лкальном сервере
в файле локальном .env необходимо установить настройки
APP_KEY=<сгенерировать свой ключ приложения>
APP_URL=<локальный адрес>
QUEUE_CONNECTION=database
DB_DATABASE=<локальная база данных>
стартуем работу локального сервера...
далее в консоли выполняем такие действия
устанавливаем все зависимости
npm install
composer install
необходимо выполнить команды:
php artisan key:generate
php artisan storage:link
php artisan migrate //Запускаем консольную команду для импорта городов из api НП php artisan Cities:import //Запускаем очередь для импорта всех отделений для городов из api НП php artisan queue:work
npm run build или vite build
чтобы сайт корректно отображался, возможно придется настроить редирект с основного локального домена на папку /public local-domain --> /local-domain/public Это возможно сделать в настройках вашего сервера или в файле .htacces
рабочая тестовая страница должна открываться локальному домену вашего проекта (.env APP_URL=) напр http://localhost
Если все правильно выполненно, там будет форма рассчета стоимости доставки с выбором городов отделений...
Описание Задачи и способы реализации //===================================== Общее описание задачи: Цель: Я, как анонимный пользователь, зайдя на сайт, хочу иметь возможность произвести просчёт стоимости доставки службой Новая Почта. Замечания: Ввод и вывод информации должен осуществляться на русском и украинском языках с возможностью переключения текущего языка на странице. Вся информация на странице должна отображаться на выбранном языке. По умолчанию активирован украинский язык (суффикс локали не выводится). При переключении на русский к url добавляется суффикс локали /ru (происходит редирект) Все примеры и описание приведены на русском языке, перевод на украинский осуществляется самостоятельно. Желаемая последовательность действий на странице: • выбрать название населенного пункта, • выбрать отделение этого населенного пункта (если для указанного населенного пункта они есть) • ввести стоимости посылки. При нажатии на кнопку “Рассчитать стоимость” выводится текст : “Вы выбрали: населенный пункт пункта - {название_ населенного_пункта}, отделение - {название_отделения}. Стоимость доставки: {рассчитанная_стоимость}.”
Особенности реализации: Элементы на клиентской стороне для выбора населенного пункта для выбора отделения выбранного города (список должен соответствовать выбранному населенному пункту) для ввода стоимости посылки (целое число) для рассчёта стоимости Выбор языка реализовать любым удобным способом.
Стек реализации: PHP 8+, MySql 5.7, Laravel 9, JS - на усмотрение.
Ожидаемая реализация:
- Реализовать и выполнить консольную команду парсинга (получения списка через API) населенных пунктов и отделений Новой Почты с сохранением данных в БД. Сохранение данных должно учитывать мультиязычность.
- При парсинге добавить только первые 20 населенных пунктов, из которых исключить такие населенные пункты как: «Абрикосовка», «Агайманы», «Агрономичное», «Адамполь».
- Проверка данных пользователя на стороне сервера: a. Стоимость посылки - целое число b. Выбранные отделения и населенный пункт должны присутствовать в отправляемых данных
- Логика расчёта стоимости доставки: a. Если стоимость посылки до 1000 грн. - формула: 50 грн. + 50% от стоимости посылки b. Если стоимость от 1000 грн. до 3000 грн.- формула: 50 грн.+ 30% от стоимости посылки c. Если стоимость посылки 3000 грн. и выше - доставка 0 Уточнения: Регистрация на Новой почте не нужна, методы публичные, POST Ссылка на описание необходимых API Новой почты: В качестве ключа доступа передаем пустую строку "apiKey": "" Населенные пункты: https://developers.novaposhta.ua/view/model/a0cf0f5f-8512-11ec-8ced-005056b2dbe1/method/a1e6f0a7-8512-11ec-8ced-005056b2dbe1 Отделения и почтоматы: https://developers.novaposhta.ua/view/model/a0cf0f5f-8512-11ec-8ced-005056b2dbe1/method/a2322f38-8512-11ec-8ced-005056b2dbe1
В качестве SDK для Новой Почты можно использовать любые библиотеки или не использовать совсем. Один из вариантов https://github.com/lis-dev/nova-poshta-api-2 (в качестве значения API ключа можно использовать пустую строку) Для работы с данными использовать встроенные средства Laravel. Готовый код выложить в публичный репозиторий GitHub. Необходимо написать readme.md по которому проверяющий сможет выполнить консольную команду, локально запустить проект с тестовым заданием и выполнить расчет стоимости доставки.
Порядок проверки: Стягивание кода из GitHub. Выполнение инструкций из readme.md по запуску приложения до рабочего состояния. Запуск консольной команды для заполнения БД списком населенных пунктов и отделений. Вход на тестовую страницу с ожидаемым поведением из блока Общее описание задачи.