Skip to content

sergey0002/slotlogistic

Repository files navigation

Slot Booking API — Логистический сервис бронирования

Минимальный API для управления бронированием слотов (складские окна, доставка, прием клиентов) с защитой от оверсела и использованием «горячего» кеша.

🚀 Основные возможности

  • Бронирование слотов: создание временных холдов и их подтверждение.
  • Защита от оверсела: строгий контроль остатка мест (remaining) через транзакции и пессимистические блокировки.
  • Горячий кеш: список доступных слотов кешируется с защитой от "cache stampede" (одновременного пересчета).
  • Идемпотентность: поддержка заголовка Idempotency-Key (UUID) для предотвращения дубликатов при повторных запросах.
  • Слои архитектуры: четкое разделение на контроллеры, сервисы (SlotService), модели и кастомные исключения.

🛠 Технологический стек

  • Backend: Laravel 12, PHP 8.2+
  • База данных: MySQL 8.0+
  • Очереди и Кеш: по умолчанию используется драйвер database (для простоты запуска), легко переключается на Redis/RabbitMQ через .env.

📌 Основные термины из ТЗ

  • Слот (Slot) — окно времени или ресурс с ограниченной вместимостью (capacity).
  • Холд (Hold) — временная бронь места. Имеет TTL (время жизни) 5 минут.
  • Оверсел (Oversell) — ситуация, когда забронировано больше мест, чем доступно. Система блокирует такие действия (HTTP 409).
  • Идемпотентность — гарантия того, что повторный запрос с тем же ключом не создаст дубликат записи.

🛣 API Эндпоинты

Метод Эндпоинт Описание
GET /api/slots/availability Список доступных слотов (кеш 5-15 сек)
POST /api/slots/{id}/hold Создание временного холда (TTL 5 мин)
POST /api/holds/{id}/confirm Подтверждение холда (уменьшает remaining)
DELETE /api/holds/{id} Отмена холда (возвращает место, если подтвержден)

⚙️ Установка и запуск (Docker)

Проект настроен для запуска в Docker контейнерах.

  1. Клонируйте репозиторий:

    git clone https://github.com/sergey0002/slotlogistic.git
    cd slotlogistic
  2. Запустите сборку и контейнеры:

    docker-compose up -d --build
  3. Установите зависимости и выполните миграции:

    docker-compose exec php composer install
    docker-compose exec php php artisan migrate --seed

🧪 Тестирование

Запуск тестов внутри контейнера:

docker-compose exec php php artisan test

About

Slot logistic laravel service

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages