Stock Reservation
Проверяет наличие варианта и цену до оплаты, резервирует остатки до подтверждения и закрывает пробелы чекаута в официальном плагине Payload ecommerce.
Установка
pnpm add payload-stock-reservation Описание
Плагин работает поверх `@payloadcms/plugin-ecommerce` и решает две проблемы его чекаута. Официальный плагин проверяет наличие при вызове `initiatePayment` и списывает остаток в `confirmOrder`, но между этими шагами ничего не записывает. Из-за этого два покупателя проходят валидацию на один и тот же последний товар. Официальный плагин также полностью пропускает проверку остатков и цен для вариантов, потому что ветка с вариантами находится внутри условия, требующего отсутствия варианта у товара. Обе проблемы приводят к уходу остатков в минус после оплаты. `stockReservationPlugin` оборачивает эндпоинты `post /payments/:adapter/initiate` и `post /payments/:adapter/confirm-order`, а не заменяет их. Перед инициацией плагин перечитывает корзину, проверяет каждую позицию на доступность и записывает резерв вне транзакции запроса, чтобы конкурентные запросы видели его сразу. Резервы на один товар или вариант ранжируются от старых к новым, при равенстве timestamp разрешает по идентификатору. Резерв сохраняет за собой товар, только если суммарное количество всех резервов до него включительно не превышает остаток на складе. При подтверждении заказа сначала выполняется оригинальный обработчик, затем резервы корзины освобождаются. Добавляется одна коллекция `stock-holds` с проиндексированными полями `cart`, `stockCollection`, `stockDocument` и `expiresAt`. Ничего не добавляется в продукты, варианты, корзины или заказы. Коллекция закрыта от API и скрыта в админке. Эндпоинт `/stock-reservation/release-expired` удаляет просроченные резервы, доступ авторизованному пользователю или по секрету `Bearer`. Опция `sweepOnCheckout` удаляет просроченные резервы текущей корзины в начале каждого чекаута, планировщик для этого не нужен. В настройках доступны `ttlSeconds` (по умолчанию 900), `defaultCurrency`, `refuseNegativeInventory`, `holdScanLimit` и переопределение slug коллекций корзин, продуктов, вариантов и резервов. Плагин нужно подключать после `ecommercePlugin`. При запуске он логирует ошибку, если не находит эндпоинтов чекаута для обертки. Нет runtime-зависимостей и админ-компонентов, что сохраняет стабильность между минорными релизами Payload. Проверено на Payload 3.88.0, требуется Payload версии 3.88 или новее.
О пакете
- Имя пакета
payload-stock-reservation- Последняя версия
1.0.0- Размер
- 40 кБ
- Лицензия
- MIT
- Загрузок в неделю
- 1
- Последняя публикация
- 21 авг. 2026 г.
Ещё от Poseidonas
Профиль автораBarcodes
Добавляет штрихкоды Code 128, EAN-13 и QR в коллекции товаров Payload с печатью этикеток и опциональными кнопками в админке.
AI Manager
Плагин Payload для автогенерации товарных описаний, заголовков, атрибутов и переводов через Claude, ChatGPT, Gemini или Kimi с пропуском уже сгенерированного контента.
EU VAT
Рассчитывает НДС ЕС для магазинов на Payload и записывает разбивку по каждому заказу: ставки, реверсивный заряд, проверку VIES и отчёт OSS.
Stock Alerts
Отправляет письмо при падении остатков товара или варианта ниже порога, с поддержкой бэкордера и публичным полем статуса.
Shipping Rates
Добавляет зоны доставки, расчет стоимости и endpoint для quoted в магазинах на @payloadcms/plugin-ecommerce.
Shipping Classes
Добавляет поля веса, размеров и класса доставки в коллекции товаров и вариантов Payload с каноническим хранением в граммах и миллиметрах.
Похожие плагины
Ещё в категории «Коммерция»Product Reviews
Плагин добавляет в Payload v3 коллекцию reviews с оценкой от 1 до 5, модерацией статусов и данными aggregateRating для Google.
Stripe
Связывает коллекции Payload с ресурсами Stripe, обрабатывает webhook-события и проксирует вызовы API.
Tpay E-commerce Payment Adapter
Платёжный адаптер Tpay для @payloadcms/plugin-ecommerce: BLIK, банковские переводы и карты с проверкой вебхуков и учётом склада.
Google Merchant Center Ecommerce Integration
Синхронизируйте продукты из Payload CMS с Google Merchant Center.