# WinSCP Source-Only Sync

คู่มือนี้ใช้สำหรับอัปไฟล์จากเครื่อง Dev ขึ้น Production ผ่าน WinSCP โดยไม่ทับ runtime files ของเครื่องจริง

ใช้คู่กับ:

- [Deployment Copy Excludes](./deployment-copy-excludes.md)
- [Production Deployment Checklist](./production-deployment-checklist.md)

## แนวทางที่แนะนำ

ใช้ WinSCP แบบ:

- `Local -> Remote`
- `Preview changes` ก่อนทุกครั้ง
- `exclude mask` ตามที่กำหนด
- หลีกเลี่ยงการลบไฟล์ฝั่ง Production ถ้าไม่จำเป็น

## Exclude Mask ที่ควรใช้

ใส่ mask นี้ใน WinSCP:

```text
.env; storage/sessions/; storage/settings/login_throttle.json; storage/settings/runtime_schema_bootstrap.json; storage/uploads/payment_slips/; storage/database_backups/; storage/maintenance_exports/
```

## วิธีทำแบบปลอดภัย

1. เปิด WinSCP แล้ว connect เข้า Production
2. ฝั่งซ้ายเปิดโฟลเดอร์ source จากเครื่อง Dev
3. ฝั่งขวาเปิดโฟลเดอร์ Production ของระบบ `CCW`
4. เลือก `Commands -> Synchronize...`
5. ตั้งค่า:
   - Direction: `Local -> Remote`
   - Mode: `Files`
   - Comparison criteria: `Time` หรือ `Size and Time`
   - เปิด `Preview changes`
6. ใส่ `Exclude mask` ตามชุดข้างบน
7. ตรวจ preview ว่า:
   - ไม่มี `.env`
   - ไม่มี `storage/uploads/payment_slips`
   - ไม่มี `storage/sessions`
   - ไม่มี `storage/settings/login_throttle.json`
   - ไม่มี `storage/settings/runtime_schema_bootstrap.json`
   - ไม่มี `storage/database_backups`
   - ไม่มี `storage/maintenance_exports`
8. ถ้าต้องการ sync แบบลบไฟล์ที่ไม่มีในฝั่ง Dev ด้วย ให้ระวังมากเป็นพิเศษ
9. เริ่ม sync เมื่อแน่ใจแล้วว่า preview ถูกต้อง

## ถ้าต้องการอัปเฉพาะส่วนที่แนะนำ

โฟลเดอร์/ไฟล์ที่อัปได้ตรง ๆ:

- `assets/`
- `config/`
- `includes/`
- `pages/`
- `process/`
- `scripts/`
- `docs/`
- `manifest.webmanifest`
- `service-worker.js`
- `offline.html`
- `storage/.htaccess`
- `storage/web.config`

## อย่าทำแบบนี้

- อย่าลากทั้งโฟลเดอร์ `CCW` ไปทับโดยไม่ตั้ง exclude
- อย่าอัป `.env` จากเครื่อง Dev ขึ้นไป
- อย่า sync โฟลเดอร์ `storage/` ทั้งก้อน
- อย่าเปิด option ลบไฟล์ ถ้ายังไม่ได้อ่าน preview จบจริง

## หลัง Sync เสร็จ

1. เช็กว่า `.env` ของ Production ยังถูกต้อง
2. เช็กว่า payment slips เดิมยังอยู่
3. เปิดเว็บด้วย admin 1 ครั้ง
4. เช็กว่า `storage/settings/runtime_schema_bootstrap.json` ถูกสร้าง/อัปเดตจาก Production เอง
5. รัน:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\post_deploy_spot_check.ps1
```

## ถ้าต้องการแบบ command line แทน WinSCP

ใช้ [deploy_source_only_robocopy.ps1](/C:/xampp82/htdocs/CCW/scripts/deploy_source_only_robocopy.ps1:1) ได้

ตัวอย่าง preview:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\deploy_source_only_robocopy.ps1 `
  -TargetPath "\\server\path\CCW"
```

ตัวอย่าง apply จริง:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\deploy_source_only_robocopy.ps1 `
  -TargetPath "\\server\path\CCW" `
  -Apply
```
