diff --git a/Services/server/src/controllers/storageController.ts b/Services/server/src/controllers/storageController.ts index d19ff6c..7abf1d0 100644 --- a/Services/server/src/controllers/storageController.ts +++ b/Services/server/src/controllers/storageController.ts @@ -114,7 +114,25 @@ interface DownloadFileBody { file: string; } -async function listFolder(path: string[], hidden: boolean = false) { +async function folderSize(path: string[]) { + const size = await new Promise((resolve, reject) => { + const stream = minioClient.listObjectsV2( + DEFAULT_BUCKET, + path.length === 0 ? "" : path.join("/") + "/", + true, + ); + let total: number = 0; + + stream.on("data", (v) => { + if (v && v.size) total += v.size; + }); + stream.on("end", () => resolve(total)); + stream.on("error", () => reject(new Error("เกิดข้อผิดพลาดกับระบบจัดการไฟล์"))); + }); + return size; +} + +async function listFolder(path: string[]) { const list = await new Promise<{ pathname: string; name: string }[]>((resolve, reject) => { const item: { pathname: string; name: string }[] = []; @@ -379,6 +397,13 @@ export class StorageController extends Controller { return this.setStatus(HttpStatusCode.NO_CONTENT); } + @Post("folder/size") + @Tags("Storage Folder") + @Security("bearerAuth", ["management-role", "admin"]) + public async folderSize(@Body() body: FolderBody) { + return { size: await folderSize([...body.path, body.name]) }; + } + /** * ลบ Folder ออกจากระบบ */ diff --git a/Services/server/src/routes.ts b/Services/server/src/routes.ts index 7471773..03fad76 100644 --- a/Services/server/src/routes.ts +++ b/Services/server/src/routes.ts @@ -824,6 +824,32 @@ export function RegisterRoutes(app: Router) { } }); // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/storage/folder/size', + authenticateMiddleware([{"bearerAuth":["management-role","admin"]}]), + ...(fetchMiddlewares(StorageController)), + ...(fetchMiddlewares(StorageController.prototype.folderSize)), + + function StorageController_folderSize(request: any, response: any, next: any) { + const args = { + body: {"in":"body","name":"body","required":true,"ref":"FolderBody"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = getValidatedArgs(args, request, response); + + const controller = new StorageController(); + + + const promise = controller.folderSize.apply(controller, validatedArgs as any); + promiseHandler(controller, promise, response, undefined, next); + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa app.delete('/storage/folder', authenticateMiddleware([{"bearerAuth":["management-role","admin"]}]), ...(fetchMiddlewares(StorageController)), diff --git a/Services/server/src/swagger.json b/Services/server/src/swagger.json index e077aef..d6ab43e 100644 --- a/Services/server/src/swagger.json +++ b/Services/server/src/swagger.json @@ -2197,6 +2197,54 @@ } } }, + "/storage/folder/size": { + "post": { + "operationId": "FolderSize", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "properties": { + "size": { + "type": "number", + "format": "double" + } + }, + "required": [ + "size" + ], + "type": "object" + } + } + } + } + }, + "tags": [ + "Storage Folder" + ], + "security": [ + { + "bearerAuth": [ + "management-role", + "admin" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FolderBody" + } + } + } + } + } + }, "/storage/file": { "post": { "operationId": "PostFile",