From 990fa7c1175f8a146f4f7016a3b36e0217d4122d Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:42:07 +0700 Subject: [PATCH] feat: update file to copy file and replace original file --- src/controllers/FileController.ts | 57 ++++++++++++++------ src/controllers/StorageEmployeeController.ts | 57 ++++++++++++++------ 2 files changed, 80 insertions(+), 34 deletions(-) diff --git a/src/controllers/FileController.ts b/src/controllers/FileController.ts index 7fe848e..73fe7c5 100644 --- a/src/controllers/FileController.ts +++ b/src/controllers/FileController.ts @@ -498,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 }) => [