/managing-products-to-photo

service for sending products in containers to photo studio

Primary LanguagePHP

Сервис для отправки товаров в фотостудию

Описание

Товары упаковываются в контейнеры. Каждый товар имеет тип (между товарами возможны различия по характеристикам, которые не важны для фото, например размер).

Сервис предоставляет API по созданию и получению контейнеров, а также для получения оптимального (минимального) количества контейнеров.

Алгоритм формирования оптимального количества контейнеров

  1. Выбирается контейнер с максимальным количеством уникальным типов товаров. Помечается стартовым и "отобранным"
  2. Вычисляется стоимость (количество добавляемых уникальных типов товаров) между всеми остальными неотобранными контейнерами.
  3. Выбирается контейнер с максимальной "добавочной стоимостью", помечается "отобранным"
  4. Шаги 2-3 повторяются либо пока добавочная стоимость всех контейнеров станет равна 0, либо не останется не отобранных контейнеров.

Таким образом, задача формирования оптимального количества контейнеров сводится к алгоритму поиска кратчайшего пути на графах с пересчетом стоимости пути.

Обработка алгоритма расположена в сервисе App\Services\ContainerInformationService

API документация

Доступна локально в файле apiDocs.yaml либо онлайн версия: https://app.swaggerhub.com/apis/yushkevichv/managing-product-to-photo/1.0.0

Установка

После клонирования проекта необходимо выполнить команды:

  • cp .env.example .env
  • указать корректные параметры конфигурации в .env файле
  • composer install
  • php artisan migrate
  • php artisan db:seed (для заполнения тестовыми данными)
  • php artisan key:generate