แก้ตามผลใช้งานจริง 2 ประเด็น: 1. เปิดใน Word ทันที — generate-draft เปลี่ยนจากคืนไฟล์ตรงๆ เป็นเก็บ ชั่วคราวใต้ drafts/ (lifecycle ลบรายวัน, config Minio__DraftRetentionDays) + คืน presigned URL ให้เว็บเปิดผ่าน ms-word:ofe พร้อมลิงก์สำรอง (useVersionOpen.openDocxUrl แยกแกนเปิด docx URL ใช้ร่วมกับ flow v0) 2. ตัดคำไทย — T14 แตก placeholder เป็น [ / ข้อความ / ] โดย run ข้อความ ถือ w:hint="cs" + w:cs เท่านั้น; เดิมเขียนค่าลง run ปีกกาทำให้ Word จัดหน้าไทยผิด — แก้เป็นเขียนที่ run ข้อความยาวสุด + SDT เปล่าสืบทอด rPr จาก sdtPr (ใช้ร่วมทั้ง generate และ generate-draft) - ถอดของที่เลิกใช้: CORS expose Content-Disposition, downloadFile init, useApi.spec · Spec v9 + ADR 0002 Amendment + acceptance-review AC-19 - Tests: backend 84 / web 56 + build; QA reviewer PASS (2 rounds, 10 findings แก้ครบ — รวม bug จริงที่ test ใหม่จับได้: lifecycle Rules null ทำ startup ตั้ง rule ล้มแบบเงียบ) · ค้าง manual บน Word จริง Co-Authored-By: Claude Code <noreply@anthropic.com>
28 lines
1.5 KiB
C#
28 lines
1.5 KiB
C#
namespace WordVersioning.Api.Services;
|
|
|
|
/// <summary>Config การเชื่อม MinIO — bind จาก section "MinIO" ใน appsettings/env
|
|
/// (rule: ห้าม hardcode — deploy ได้โดยไม่แก้โค้ด เช่น MinIO__Endpoint)</summary>
|
|
public class MinioOptions
|
|
{
|
|
public const string SectionName = "MinIO";
|
|
|
|
/// <summary>host:port ไม่รวม scheme (เช่น localhost:39000 หรือ minio:9000)</summary>
|
|
public string Endpoint { get; set; } = "localhost:39000";
|
|
|
|
public string AccessKey { get; set; } = string.Empty;
|
|
|
|
public string SecretKey { get; set; } = string.Empty;
|
|
|
|
public bool UseSSL { get; set; }
|
|
|
|
public string VersionsBucket { get; set; } = "docx-versions";
|
|
|
|
public string TemplatesBucket { get; set; } = "docx-templates";
|
|
|
|
/// <summary>อายุของ presigned download URL ที่ออกให้เบราว์เซอร์ (วินาที) — สั้นๆ ตาม spec</summary>
|
|
public int PresignedExpirySeconds { get; set; } = 120;
|
|
|
|
/// <summary>FR-16 — จำนวนวันที่ไฟล์ร่าง (object ใต้ prefix `drafts/` ของ VersionsBucket) ถูกลบโดย
|
|
/// lifecycle rule (ผู้ใช้เปิดผ่าน presigned URL ในไม่กี่นาทีแรก หลังจากนั้นเป็นขยะ)</summary>
|
|
public int DraftRetentionDays { get; set; } = 1;
|
|
}
|