-- migration_leak_debounce.sql -- 누수 감지/복구 디바운스: 기존 배포의 leak_sensor_status 에 확정 상태 컬럼 2개 추가. -- leak_confirmed : 디바운스로 "확정"된 누수 상태(SMS/사고추적 기준). is_leak 은 raw 최신. -- leak_pending_since : raw 가 확정과 어긋나기 시작한 시각(NULL=안정). 확인창 경과로 확정. -- -- 신규 설치는 schema_sht30.sql 에 이미 포함되어 있으므로 실행 불필요. 이 파일은 "기존 -- 운영 DB" 업그레이드 전용이다. -- 실행: SOURCE /path/to/sql/migration_leak_debounce.sql; -- -- 멱등성: MySQL 8 은 ADD COLUMN IF NOT EXISTS 를 지원하지 않으므로, 이미 적용된 DB 에서 -- 재실행하면 "Duplicate column name" 오류가 난다(무해 — 이미 컬럼이 있다는 뜻이니 무시). -- MariaDB 라면 아래 문에 `IF NOT EXISTS` 를 넣어 안전하게 재실행할 수 있다. -- -- 참고: 이 컬럼이 없어도 서버는 레거시(즉시 발송) 경로로 계속 동작한다(graceful degrade). -- 디바운스를 켜려면 이 마이그레이션을 적용하면 된다. SET NAMES utf8mb4; ALTER TABLE `leak_sensor_status` ADD COLUMN `leak_confirmed` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '디바운스 확정 누수 상태(SMS/사고추적 기준; is_leak 은 raw 최신)', ADD COLUMN `leak_pending_since` DATETIME NULL DEFAULT NULL COMMENT '미확정 전이 시작 시각(NULL=안정, raw==confirmed)'; -- 적용 후: 이미 누수(is_leak=1) 중인 센서는 leak_confirmed=0 으로 시작하므로, 다음 보고에서 -- 감지 확인창(LEAK_ALERT_CONFIRM_SEC) 경과 후 [누수감지] 를 1회 재확정한다(사실상 재확인).