# Skill: Backup & Restore **Áp dụng các Rule:** R3.8, R8.1, R8.2 ## Backup tự động - Trước mỗi sync: copy `data/attendance.db` → `data/backups/attendance_YYYYMMDD_HHMM.db` - Giữ 7 bản gần nhất (R3.8) / 14 bản hằng ngày (R8.1). - Khi đủ số → xoá bản cũ nhất theo thời gian. ## Backup thủ công (trước thao tác nguy hiểm) ```powershell Copy-Item data/attendance.db data/backups/attendance_manual_$(Get-Date -Format yyyyMMdd_HHmm).db ``` ## Restore ```powershell # 1. Dừng API server (nếu đang chạy) # 2. Dừng Flet app (nếu đang chạy) # 3. Backup file hiện tại (đề phòng) Copy-Item data/attendance.db data/attendance.db.before_restore # 4. Restore Copy-Item data/backups/attendance_.db data/attendance.db # 5. Verify python -c "import sqlite3; c=sqlite3.connect('data/attendance.db'); print(c.execute('SELECT COUNT(*) FROM attendance').fetchone())" ``` ## Thao tác PHẢI backup trước - Re-sync khoảng > 7 ngày - Chạy script ETL/migration - Sửa schema (ALTER TABLE) - Cleanup orphan records ## KHÔNG được làm - `DROP TABLE` (phá R3.2, R8.3) - `DELETE FROM attendance WHERE ...` để "dọn dẹp" — luôn xuất ra rồi vô hiệu bằng flag, không xoá. - Xoá `data/backups/` thủ công khi chưa verify DB hiện tại.