| @@ -19,7 +19,17 @@ | ||
| 19 | 19 | `code` VARCHAR(100) NOT NULL , |
| 20 | 20 | `amount` double NOT NULL, |
| 21 | 21 | `created_at` DATETIME NULL , |
| 22 | 22 | `updated_at` DATETIME NULL, |
| 23 | - INDEX `{$indexPrefix}_code_idx` (`code`)"; | |
| 23 | + INDEX `{$indexPrefix}_code_idx` (`code`), | |
| 24 | + INDEX `{$indexPrefix}_coupon_order_idx` (`coupon_id`, `order_id`)"; | |
| 25 | + } | |
| 26 | + | |
| 27 | + public static function migrated() | |
| 28 | + { | |
| 29 | + // Per-customer usage counting filters by coupon_id and joins orders | |
| 30 | + // through order_id (CanValidateCoupon::hasMaxPerUserLimit, | |
| 31 | + // DiscountService::isCouponValid) — without this, every validation | |
| 32 | + // scans the table as usage history grows. | |
| 33 | + static::addIndexIfNotExists('fct_acoup__coupon_order_idx', ['coupon_id', 'order_id']); | |
| 24 | 34 | } |
| 25 | 35 | } |