implement phase 4
This commit is contained in:
parent
25c2ce53cd
commit
f4b1c3e14b
27 changed files with 6929 additions and 48 deletions
60
addin/src/services/versioningService.ts
Normal file
60
addin/src/services/versioningService.ts
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
import { config } from "../config";
|
||||
import { UploadVersionResult, VersionRecord } from "../models/versionRecord";
|
||||
import { apiFetch, apiGetJson, apiSendExpectJson, ApiError, readErrorMessage } from "./apiClient";
|
||||
import { generateGuid } from "./metadataService";
|
||||
|
||||
/**
|
||||
* เรียก version API ของ backend (FR-5/6/7 ฝั่ง client)
|
||||
* `fields` = map จาก `readContentControlFields()` ตาม FR-11
|
||||
*/
|
||||
|
||||
/** FR-5 — อัปโหลดไฟล์ปัจจุบันเป็น version ใหม่ (แนบ fields map ถ้ามี) */
|
||||
export async function uploadVersion(
|
||||
documentId: string,
|
||||
file: Blob,
|
||||
clientVersionId: string,
|
||||
fields?: Record<string, string>,
|
||||
fileName?: string
|
||||
): Promise<UploadVersionResult> {
|
||||
const form = new FormData();
|
||||
form.append("file", file, fileName || `${documentId}.docx`);
|
||||
form.append("clientVersionId", clientVersionId);
|
||||
if (fields && Object.keys(fields).length > 0) {
|
||||
form.append("fields", JSON.stringify(fields));
|
||||
}
|
||||
return apiSendExpectJson<UploadVersionResult>(
|
||||
`/api/documents/${documentId}/versions`,
|
||||
{ method: "POST", body: form },
|
||||
"อัปโหลด version ไม่สำเร็จ"
|
||||
);
|
||||
}
|
||||
|
||||
/** FR-6 — version history เรียงใหม่ → เก่า */
|
||||
export async function getVersions(documentId: string): Promise<VersionRecord[]> {
|
||||
return apiGetJson<VersionRecord[]>(
|
||||
`/api/documents/${documentId}/versions`,
|
||||
"โหลด version history ไม่สำเร็จ"
|
||||
);
|
||||
}
|
||||
|
||||
/** FR-7 — URL ของ download endpoint (ผ่าน backend proxy เท่านั้น — MinIO ไม่ถูก expose) */
|
||||
export function buildDownloadUrl(documentId: string, versionId: string): string {
|
||||
return `${config.apiBaseUrl}/api/documents/${documentId}/versions/${versionId}/download`;
|
||||
}
|
||||
|
||||
/** FR-7 — ดาวน์โหลดไฟล์ของ version หนึ่งเป็น Blob (ต้องแนบ Bearer จึงต้อง fetch แทน link ตรง) */
|
||||
export async function downloadVersion(documentId: string, versionId: string): Promise<Blob> {
|
||||
const response = await apiFetch(buildDownloadUrl(documentId, versionId));
|
||||
if (!response.ok) {
|
||||
throw new ApiError(
|
||||
response.status,
|
||||
await readErrorMessage(response, `ดาวน์โหลด version ไม่สำเร็จ (${response.status})`)
|
||||
);
|
||||
}
|
||||
return response.blob();
|
||||
}
|
||||
|
||||
/** สร้าง clientVersionId ใหม่สำหรับ upload ครั้งถัดไป */
|
||||
export function newClientVersionId(): string {
|
||||
return generateGuid();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue