migrate_water_device_usage.php 1.3 KB

1234567891011121314151617181920212223242526272829
  1. <?php
  2. /** Add daily usage history; preserve existing device, stock and entitlement values. */
  3. require dirname(__DIR__) . '/vendor/autoload.php';
  4. \Dotenv\Dotenv::createUnsafeMutable(dirname(__DIR__))->load();
  5. \support\App::loadAllConfig(['route']);
  6. use plugin\saiadmin\app\model\water\WaterDevice;
  7. if (!in_array('--apply', $argv, true)) {
  8. echo "Plan: create device/day usage table and copy existing dated usage snapshots.\n";
  9. exit;
  10. }
  11. $db = (new WaterDevice())->getConnection();
  12. $db->statement('CREATE TABLE IF NOT EXISTS sa_water_device_usage (
  13. id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  14. device_id BIGINT UNSIGNED NOT NULL,
  15. day DATE NOT NULL,
  16. liters DECIMAL(10,2) UNSIGNED NOT NULL,
  17. reported_at DATETIME NULL,
  18. UNIQUE KEY device_day (device_id, day),
  19. KEY usage_day (day)
  20. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4');
  21. // Only copy the known snapshot date. Re-running never replaces an existing daily record.
  22. $copied = $db->affectingStatement('INSERT IGNORE INTO sa_water_device_usage (device_id, day, liters, reported_at)
  23. SELECT id, telemetry_date, today_liters, NULL FROM sa_water_device
  24. WHERE telemetry_date IS NOT NULL AND today_liters IS NOT NULL AND today_liters >= 0');
  25. echo "Applied device usage migration; copied $copied known snapshots. Existing device data preserved.\n";