

-- Gift-code broadcast queue (100 messages per cron run)
CREATE TABLE IF NOT EXISTS `gift_broadcast_jobs` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `gift_code_id` INT NOT NULL,
  `admin_id` BIGINT NOT NULL,
  `total_users` INT NOT NULL DEFAULT 0,
  `sent_users` INT NOT NULL DEFAULT 0,
  `failed_users` INT NOT NULL DEFAULT 0,
  `status` VARCHAR(20) NOT NULL DEFAULT 'queued',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `one_job_per_code` (`gift_code_id`),
  KEY `status_id` (`status`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `gift_broadcast_queue` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `job_id` INT NOT NULL,
  `user_id` BIGINT NOT NULL,
  `status` TINYINT NOT NULL DEFAULT 0,
  `sent_at` DATETIME NULL,
  `error_text` TEXT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `job_user_once` (`job_id`,`user_id`),
  KEY `status_id` (`status`,`id`),
  KEY `job_status` (`job_id`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
