Skip to main content
v0.1.0 MIT · PHP 8.2+ · CodeIgniter 4.7 · HTMX 2
WinCart.ioSingle-TLD CodeIgniter 4 Cart

MariaDB 10.6+ & MySQL 8.0+ InnoDB Blueprint

14 Lean Commerce Tables + 13 First-Party Auth/Queue Tables

Because WinCart targets single-TLD deployments exclusively, no store_id or domain_id column pollutes primary keys, foreign keys, or composite indexes. Every checkout mutation runs inside $db->transException(true)->transStart().

WinCart InnoDB stock reservation and idempotent checkout state machine
Checkout-scoped row-level locks (SELECT ... FOR UPDATE) prevent overselling during the 15-minute payment window without allowing Add-to-Cart bots to exhaust catalog stock.
WinCart v0.1 Core InnoDB Commerce Tables
TableModuleKey Columns & TypesIntegrity InvariantIndex Strategy
products & product_variantsModules\Catalogslug, sku, price_minor BIGINT, stock_qty INTEvery product has ≥1 default SKU variant; zero float pricesUnique (slug), Unique (sku)
categories & product_categoriesModules\Catalogparent_id, slug, sort_orderCascading FK links between catalog items and hierarchical categoriesUnique (product_id, category_id)
carts & cart_itemsModules\Cartcart_token CHAR(36), user_id INT NULL, variant_idHttpOnly UUID cookie merges cleanly on Shield customer loginUnique (cart_token), Unique (cart_id, variant_id)
coupons & shipping_methodsModules\Checkoutcode, type, value_minor, min_subtotal_minorFixed minor-unit or basis-point % discounts + flat/weight shippingUnique (code), Active window index
stock_reservationsModules\Checkoutvariant_id, cart_id, qty, expires_at DATETIMEShort-lived 15-min checkout hold acquired under FOR UPDATE lockComposite (variant_id, expires_at)
orders & order_itemsModules\Ordersorder_number, unit_price_minor, billing_address_jsonImmutable point-in-time ledger snapshot immune to future catalog editsUnique (order_number), FK (order_id)
payment_transactionsModules\Ordersgateway, gateway_reference_id, amount_minorGuarantees idempotent webhook settlement across retriesUnique (gateway, gateway_reference_id)