ekaterina-umetskaya/flower-suite

Laravel package for a flower shop: models, migrations, CRUD controllers, API, facades, middleware and tests.

Maintainers

Package info

github.com/EkaterinaUmetskaya/Laba_3_3

pkg:composer/ekaterina-umetskaya/flower-suite

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-05-25 17:28 UTC

This package is auto-updated.

Last update: 2026-05-25 17:32:59 UTC


README

Учебный Laravel-пакет для лабораторной работы №3. В пакете реализован цветочный интернет-магазин: модели, миграции, фабрики, сидер с демо-данными, web CRUD, API CRUD, FormRequest-валидация, API Resources/Collections, middleware проверки версии API, фасад курса валют, фасад расчета доставки и тесты.

Состав пакета

  • src/Models - модели магазина: товар, категория, поставщик, клиент, склад, заказ, позиция заказа.
  • database/migrations - миграции таблиц магазина.
  • database/factories - фабрики моделей.
  • database/seeders/FlowerSuiteSeeder.php - фиксированное русскоязычное демо-наполнение цветочного магазина.
  • src/Http/Controllers/Crud - web CRUD-контроллеры.
  • src/Http/Controllers/Api - API CRUD-контроллеры.
  • src/Http/Requests - классы валидации входных параметров.
  • src/Http/Resources - API Resources и Collections.
  • src/Http/Middleware/CheckApiVersion.php - middleware заголовка X-API-VERSION.
  • src/Facades и src/Services - фасады курса валют и расчета доставки.
  • resources/views - публикуемые Blade-шаблоны CRUD-интерфейса.
  • config/flower-suite.php - публикуемая конфигурация пакета.
  • tests - unit/feature-тесты пакета.

Быстрый запуск в новом Laravel-проекте

Требования: PHP 8.2+, Composer, SQLite или MySQL.

  1. Создать Laravel-проект:
composer create-project laravel/laravel lab3-demo "^11.0"
cd lab3-demo
  1. Подключить локальный пакет. Если папка пакета лежит рядом с Laravel-проектом:
composer config repositories.flower-suite path ../02_package/flower-suite
composer config minimum-stability dev
composer config prefer-stable true
composer require ekaterina-umetskaya/flower-suite:"*"
  1. Настроить SQLite для простой проверки:
cp .env.example .env
php artisan key:generate

В .env указать:

DB_CONNECTION=sqlite

Создать файл базы:

touch database/database.sqlite

На Windows можно создать файл вручную в папке database с именем database.sqlite.

  1. Опубликовать ресурсы пакета:
php artisan vendor:publish --provider="EkaterinaUmetskaya\FlowerSuite\FlowerSuiteServiceProvider" --force
  1. Подключить демо-сидер в database/seeders/DatabaseSeeder.php:
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use EkaterinaUmetskaya\FlowerSuite\Database\Seeders\FlowerSuiteSeeder;

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        $this->call(FlowerSuiteSeeder::class);
    }
}
  1. Создать таблицы и заполнить демо-данными:
php artisan migrate:fresh --seed
  1. Запустить приложение:
php artisan serve

После запуска открыть:

http://localhost:8000/shop-panel

Что проверять в web-интерфейсе

В панели shop-panel доступны разделы:

  • Товары
  • Категории
  • Поставщики
  • Клиенты
  • Склады
  • Заказы

В каждом разделе есть CRUD-функции:

  • просмотр списка;
  • создание записи;
  • просмотр карточки записи;
  • редактирование;
  • удаление.

После сидера должны быть созданы:

  • 6 категорий;
  • 3 поставщика;
  • 3 склада;
  • 5 клиентов;
  • 12 товаров цветочного магазина;
  • 3 заказа.

Проверка API

API находится по префиксу:

/shop-api

Для основных API-маршрутов нужен заголовок:

X-API-VERSION: 1

Примеры:

curl -H "X-API-VERSION: 1" http://localhost:8000/shop-api/products
curl -H "X-API-VERSION: 1" http://localhost:8000/shop-api/categories
curl -H "X-API-VERSION: 1" http://localhost:8000/shop-api/customers
curl -H "X-API-VERSION: 1" http://localhost:8000/shop-api/orders

Если открыть API без заголовка, должен вернуться ответ об ошибке. Это проверка middleware:

{
  "message": "Header X-API-VERSION is required.",
  "expected_version": 1
}

Если передать нечисловое значение:

curl -H "X-API-VERSION: abc" http://localhost:8000/shop-api/products

Должен вернуться ответ:

{
  "message": "Header X-API-VERSION must contain only numeric value."
}

Проверка фасада доставки

Маршрут расчета доставки использует версию API 2:

curl -X POST http://localhost:8000/shop-api/delivery/calculate \
  -H "X-API-VERSION: 2" \
  -H "Content-Type: application/json" \
  -d '{"from":{"lat":55.7558,"lng":37.6173},"to":{"lat":59.9343,"lng":30.3351},"weight":1.5}'

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

'delivery' => [
    'driver' => env('ECOMMERCE_DELIVERY_DRIVER', 'math'),
]

Доступные варианты:

  • math;
  • google;
  • yandex.

Проверка фасада курса валют

Маршрут:

curl -H "X-API-VERSION: 1" http://localhost:8000/shop-api/currency/rate?from=USD&to=RUB

Фасад можно использовать из кода Laravel:

use EkaterinaUmetskaya\FlowerSuite\Facades\CurrencyRate;

$rate = CurrencyRate::rate('USD', 'RUB');

Конфигурация

После публикации появляется файл:

config/flower-suite.php

В нем настраиваются:

  • префикс web-маршрутов;
  • префикс API-маршрутов;
  • префикс таблиц;
  • количество записей на странице;
  • версия API по умолчанию;
  • драйвер расчета доставки.

Пример изменения префиксов:

'web_prefix' => 'shop-panel',
'api_prefix' => 'shop-api',

Публикуемые ресурсы

Команда:

php artisan vendor:publish --provider="EkaterinaUmetskaya\FlowerSuite\FlowerSuiteServiceProvider" --force

Публикует:

  • конфигурацию в config/flower-suite.php;
  • Blade-шаблоны в resources/views/vendor/flower-suite;
  • тесты пакета в tests/FlowerSuite.

Тесты

После установки пакета и публикации ресурсов можно запустить:

php artisan test

В пакете есть проверки:

  • математического расчета доставки;
  • middleware X-API-VERSION;
  • CRUD-операций для товаров.

Что закрывает задание

  • Модели, миграции, фабрики и сидер для сущностей интернет-магазина.
  • Web CRUD-контроллеры и маршруты, подключаемые из пакета.
  • Настраиваемые внутренние префиксы маршрутов через конфиг.
  • Публикуемые Blade-шаблоны CRUD-интерфейса.
  • Фасад курса валют.
  • Фасад расчета доставки: Google, Yandex и математический метод.
  • Выбор сервиса доставки через конфигурацию.
  • Middleware проверки заголовка X-API-VERSION.
  • API CRUD-контроллеры.
  • FormRequest-валидация, Resources и Collections.
  • Unit/feature-тесты, публикуемые после установки пакета.