diff --git a/src/controllers/FileController.ts b/src/controllers/FileController.ts index e02d0d4..73fe7c5 100644 --- a/src/controllers/FileController.ts +++ b/src/controllers/FileController.ts @@ -186,28 +186,51 @@ export class FileController extends Controller { throw new Error("เกิดข้อผิดพลาดกับระบบจัดการไฟล์ เข้าถึงรายการไฟล์ได้"); } - let used: string[] = []; - let fileList = !body.replace - ? body.fileList.map(({ fileName, ...props }) => { - const dotIndex = fileName.lastIndexOf("."); - const originalName = - dotIndex !== -1 && !fileName.startsWith(".") ? fileName.slice(0, dotIndex) : fileName; - const extension = - dotIndex !== -1 && !fileName.startsWith(".") ? fileName.slice(dotIndex) : ""; + ? await Promise.all( + body.fileList.map(async ({ fileName, ...props }) => { + const dotIndex = fileName.lastIndexOf("."); + const originalName = + dotIndex !== -1 && !fileName.startsWith(".") ? fileName.slice(0, dotIndex) : fileName; + const extension = + dotIndex !== -1 && !fileName.startsWith(".") ? fileName.slice(dotIndex) : ""; - let i = 1; - while (list.findIndex((v) => v.fileName === fileName) !== -1 || used.includes(fileName)) { - fileName = `${originalName} (${i++})`; - if (dotIndex !== -1) fileName += extension; - } + let copyFileName = fileName; - props.author = "ไม่พบข้อมูล"; + while (list.findIndex((v) => v.fileName === fileName) !== -1) { + let copy = 0; - used.push(fileName); + while ( + list.findIndex( + (v) => + v.fileName === + `${originalName} (${copy + 1})` + (dotIndex !== -1 ? extension : ""), + ) !== -1 + ) { + copy++; + } - return { fileName: fileName, ...props }; - }) + copyFileName = `${originalName} (${copy + 1})` + extension; + + const result = await updateFile( + path, + fileName, + { ...props, title: copyFileName }, + path, + copyFileName, + ); + + if (!result) { + throw new Error("เกิดข้อผิดพลาดกับระบบจัดการไฟล์ ไม่สามารถแก้ไขไฟล์ได้"); + } + break; + } + + props.author = "ไม่พบข้อมูล"; + + return { fileName: fileName, ...props }; + }), + ) : body.fileList; const map = fileList.map(async ({ fileName, ...props }) => [ @@ -475,28 +498,51 @@ export class SubFileController extends Controller { throw new Error("เกิดข้อผิดพลาดกับระบบจัดการไฟล์ เข้าถึงรายการไฟล์ได้"); } - let used: string[] = []; - let fileList = !body.replace - ? body.fileList.map(({ fileName, ...props }) => { - const dotIndex = fileName.lastIndexOf("."); - const originalName = - dotIndex !== -1 && !fileName.startsWith(".") ? fileName.slice(0, dotIndex) : fileName; - const extension = - dotIndex !== -1 && !fileName.startsWith(".") ? fileName.slice(dotIndex) : ""; + ? await Promise.all( + body.fileList.map(async ({ fileName, ...props }) => { + const dotIndex = fileName.lastIndexOf("."); + const originalName = + dotIndex !== -1 && !fileName.startsWith(".") ? fileName.slice(0, dotIndex) : fileName; + const extension = + dotIndex !== -1 && !fileName.startsWith(".") ? fileName.slice(dotIndex) : ""; - let i = 1; - while (list.findIndex((v) => v.fileName === fileName) !== -1 || used.includes(fileName)) { - fileName = `${originalName} (${i++})`; - if (dotIndex !== -1) fileName += extension; - } + let copyFileName = fileName; - props.author = "ไม่พบข้อมูล"; + while (list.findIndex((v) => v.fileName === fileName) !== -1) { + let copy = 0; - used.push(fileName); + while ( + list.findIndex( + (v) => + v.fileName === + `${originalName} (${copy + 1})` + (dotIndex !== -1 ? extension : ""), + ) !== -1 + ) { + copy++; + } - return { fileName: fileName, ...props }; - }) + copyFileName = `${originalName} (${copy + 1})` + extension; + + const result = await updateFile( + path, + fileName, + { ...props, title: copyFileName }, + path, + copyFileName, + ); + + if (!result) { + throw new Error("เกิดข้อผิดพลาดกับระบบจัดการไฟล์ ไม่สามารถแก้ไขไฟล์ได้"); + } + break; + } + + props.author = "ไม่พบข้อมูล"; + + return { fileName: fileName, ...props }; + }), + ) : body.fileList; const map = fileList.map(async ({ fileName, ...props }) => [ diff --git a/src/controllers/StorageEmployeeController.ts b/src/controllers/StorageEmployeeController.ts index ec08bca..acb6d2e 100644 --- a/src/controllers/StorageEmployeeController.ts +++ b/src/controllers/StorageEmployeeController.ts @@ -179,28 +179,51 @@ export class DocumentEmployeeController extends Controller { throw new Error("เกิดข้อผิดพลาดกับระบบจัดการไฟล์ เข้าถึงรายการไฟล์ได้"); } - let used: string[] = []; - let fileList = !body.replace - ? body.fileList.map(({ fileName, ...props }) => { - const dotIndex = fileName.lastIndexOf("."); - const originalName = - dotIndex !== -1 && !fileName.startsWith(".") ? fileName.slice(0, dotIndex) : fileName; - const extension = - dotIndex !== -1 && !fileName.startsWith(".") ? fileName.slice(dotIndex) : ""; + ? await Promise.all( + body.fileList.map(async ({ fileName, ...props }) => { + const dotIndex = fileName.lastIndexOf("."); + const originalName = + dotIndex !== -1 && !fileName.startsWith(".") ? fileName.slice(0, dotIndex) : fileName; + const extension = + dotIndex !== -1 && !fileName.startsWith(".") ? fileName.slice(dotIndex) : ""; - let i = 1; - while (list.findIndex((v) => v.fileName === fileName) !== -1 || used.includes(fileName)) { - fileName = `${originalName} (${i++})`; - if (dotIndex !== -1) fileName += extension; - } + let copyFileName = fileName; - props.author = "ไม่พบข้อมูล"; + while (list.findIndex((v) => v.fileName === fileName) !== -1) { + let copy = 0; - used.push(fileName); + while ( + list.findIndex( + (v) => + v.fileName === + `${originalName} (${copy + 1})` + (dotIndex !== -1 ? extension : ""), + ) !== -1 + ) { + copy++; + } - return { fileName: fileName, ...props }; - }) + copyFileName = `${originalName} (${copy + 1})` + extension; + + const result = await updateFile( + path, + fileName, + { ...props, title: copyFileName }, + path, + copyFileName, + ); + + if (!result) { + throw new Error("เกิดข้อผิดพลาดกับระบบจัดการไฟล์ ไม่สามารถแก้ไขไฟล์ได้"); + } + break; + } + + props.author = "ไม่พบข้อมูล"; + + return { fileName: fileName, ...props }; + }), + ) : body.fileList; const map = fileList.map(async ({ fileName, ...props }) => [ diff --git a/src/services/edm.ts b/src/services/edm.ts index 3415af2..a064b9e 100644 --- a/src/services/edm.ts +++ b/src/services/edm.ts @@ -143,7 +143,13 @@ export async function listFile(path: string[]) { return (await list("file", path)) as StorageFile[] | boolean; } -export async function updateFile(path: string[], file: string, metadata: FileProps) { +export async function updateFile( + path: string[], + file: string, + metadata: FileProps, + destPath?: string[], + destFile?: string, +) { const res = await fetch(`${STORAGE_URL}/storage/file`, { method: "PUT", headers: { @@ -152,6 +158,7 @@ export async function updateFile(path: string[], file: string, metadata: FilePro }, body: JSON.stringify({ from: { path, file }, + to: destPath && destFile ? { path: destPath, file: destFile } : undefined, ...metadata, upload: false, }),