# Desktop Install & Rollout Runbook

อัปเดต: 19 เมษายน 2026  
Scope: `WepAppOpusApiDesktop` (Electron + React + SQLite local-first)

## 1) เป้าหมาย

ให้ติดตั้งแอปบนเครื่อง Windows ใหม่ได้ทันที โดยไม่ต้องลง Node.js / Python / server เพิ่ม:
1. ใช้ไฟล์ installer หรือ portable executable
2. ข้อมูลเก็บ local ใน SQLite (`ads.db`)
3. token เก็บเข้ารหัสและผูกกับ OS keychain ของเครื่องนั้น

## 2) Artifact ที่ต้องปล่อย

จากโฟลเดอร์ `WepAppOpusApiDesktop/release`:
1. `WepAppOpusApiDesktop Setup <version>.exe` (NSIS installer)
2. `WepAppOpusApiDesktop <version>.exe` (Portable)
3. `release-manifest.json` (checksum + metadata)

ก่อนปล่อยทุกครั้งให้รัน:
1. `npm run release:manifest`
2. `npm run release:smoke`

## 3) ติดตั้งเครื่องใหม่ (ไม่มี runtime)

1. ส่งไฟล์ `Setup.exe` ให้ผู้ใช้
2. เปิดติดตั้งตาม wizard
3. เปิดแอปครั้งแรก รอ init local DB อัตโนมัติ
4. ไปหน้า `Settings` ตรวจ `dbPath` และทดสอบ token connection

หมายเหตุ:
1. `Setup.exe` เหมาะสำหรับผู้ใช้ทั่วไป (มี shortcut/start menu)
2. `Portable.exe` เหมาะกับการรันเร็วโดยไม่ผ่าน setup wizard

## 4) อัปเกรดเวอร์ชัน

1. ปิดแอปเดิมก่อนติดตั้ง
2. รัน `Setup.exe` เวอร์ชันใหม่ทับได้
3. เปิดแอปและตรวจว่าหน้า dashboard/load data ปกติ
4. รัน smoke manual:
   - เปิดหน้า `/live`
   - ทดลองโหลด account + dashboard 1 รอบ
   - ตรวจว่า cache meta แสดง source/ttl ถูกต้อง

## 5) ย้ายเครื่องผู้ใช้ (Machine A -> Machine B)

## 5.1 Data migration (SQLite)

1. บน Machine A ไปหน้า `Settings` จดค่า `dbPath`
2. ปิดแอปทั้งสองเครื่อง
3. copy ไฟล์ DB จากเครื่องเก่าไปเครื่องใหม่:
   - `ads.db`
   - `ads.db-wal` (ถ้ามี)
   - `ads.db-shm` (ถ้ามี)
4. วางไฟล์แทน DB เดิมที่ `dbPath` ของเครื่องใหม่
5. เปิดแอปและตรวจข้อมูลใน dashboard/import logs

## 5.2 Token/profile caveat

token ถูกเข้ารหัสด้วย master key ที่เก็บใน keychain ของแต่ละเครื่อง:
1. ย้าย `ads.db` อย่างเดียวไม่สามารถ reuse token เดิมได้ 100%
2. หลังย้ายเครื่องให้เปิดหน้า `Settings` แล้วอัปเดต token ใหม่ต่อ profile (re-encrypt บนเครื่องใหม่)
3. ห้ามส่ง plaintext token ผ่านช่องทางไม่ปลอดภัย

## 6) Rollback

1. เก็บ installer เวอร์ชันก่อนหน้าอย่างน้อย 1 รุ่น
2. หากมีปัญหา ให้ uninstall รุ่นใหม่แล้วติดตั้งรุ่นก่อนหน้า
3. คืนค่า DB backup ก่อน rollout หาก schema/data มีความเสี่ยง

## 7) Release checklist

- [ ] `npm run lint`
- [ ] `npm run test`
- [ ] `npm run build:win`
- [ ] `npm run release:manifest`
- [ ] `npm run release:smoke`
- [ ] ส่งมอบ `Setup.exe`, `Portable.exe`, `release-manifest.json`
- [ ] แนบหมายเหตุย้ายเครื่องเรื่อง token/keychain ให้ทีมใช้งาน
