From bd8290b6b19f27c6c889c99c5f6823c3ec8763c1 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Fri, 24 Nov 2023 11:32:04 +0700 Subject: [PATCH] fix: delete does not remove data from database --- .../src/controllers/cabinetController.ts | 29 ++++++++++++++--- .../src/controllers/drawerController.ts | 29 ++++++++++++++--- .../src/controllers/folderController.ts | 31 ++++++++++++++++--- .../src/controllers/subFolderController.ts | 31 ++++++++++++++++--- 4 files changed, 102 insertions(+), 18 deletions(-) diff --git a/Services/server/src/controllers/cabinetController.ts b/Services/server/src/controllers/cabinetController.ts index 655ce60..2aeab4d 100644 --- a/Services/server/src/controllers/cabinetController.ts +++ b/Services/server/src/controllers/cabinetController.ts @@ -121,7 +121,7 @@ export class CabinetController extends Controller { @Security("bearerAuth") @SuccessResponse(HttpStatusCode.NO_CONTENT) public async deleteCabinet(@Path() cabinetName: string) { - return new Promise((resolve, reject) => { + await new Promise((resolve, reject) => { const objects: string[] = []; const stream = minioClient.listObjectsV2("ehr", `${cabinetName}/`, true); @@ -131,10 +131,31 @@ export class CabinetController extends Controller { objects.push(v.name); }); - stream.on("close", () => minioClient.removeObjects("ehr", objects)); + stream.on("close", async () => { + minioClient.removeObjects("ehr", objects); + resolve(); + }); stream.on("error", () => reject(new Error("Object storage error occured."))); - - resolve(this.setStatus(HttpStatusCode.NO_CONTENT)); }); + + const searchResult = await esClient.search({ + index: process.env.ELASTICSEARCH_INDEX ?? "ehr-index", + query: { + prefix: { pathname: `${cabinetName}/` }, + }, + }); + + await Promise.all( + searchResult.hits.hits.map(async (v) => { + return esClient + .delete({ + index: process.env.ELASTICSEARCH_INDEX ?? "ehr-index", + id: v._id, + }) + .catch((e) => console.error(`ElasticSearch Error: ${e}`)); + }), + ); + + return this.setStatus(HttpStatusCode.NO_CONTENT); } } diff --git a/Services/server/src/controllers/drawerController.ts b/Services/server/src/controllers/drawerController.ts index 08b512e..e9fcf83 100644 --- a/Services/server/src/controllers/drawerController.ts +++ b/Services/server/src/controllers/drawerController.ts @@ -132,7 +132,7 @@ export class DrawerController extends Controller { @Security("bearerAuth") @SuccessResponse(HttpStatusCode.NO_CONTENT) public async deleteDrawer(@Path() cabinetName: string, @Path() drawerName: string) { - return new Promise((resolve, reject) => { + await new Promise((resolve, reject) => { const objects: string[] = []; const stream = minioClient.listObjectsV2("ehr", `${cabinetName}/${drawerName}/`, true); @@ -142,10 +142,31 @@ export class DrawerController extends Controller { objects.push(v.name); }); - stream.on("close", () => minioClient.removeObjects("ehr", objects)); + stream.on("close", async () => { + minioClient.removeObjects("ehr", objects); + resolve(); + }); stream.on("error", () => reject(new Error("Object storage error occured."))); - - resolve(true); }); + + const searchResult = await esClient.search({ + index: process.env.ELASTICSEARCH_INDEX ?? "ehr-index", + query: { + prefix: { pathname: `${cabinetName}/${drawerName}/` }, + }, + }); + + await Promise.all( + searchResult.hits.hits.map(async (v) => { + return esClient + .delete({ + index: process.env.ELASTICSEARCH_INDEX ?? "ehr-index", + id: v._id, + }) + .catch((e) => console.error(`ElasticSearch Error: ${e}`)); + }), + ); + + return this.setStatus(HttpStatusCode.NO_CONTENT); } } diff --git a/Services/server/src/controllers/folderController.ts b/Services/server/src/controllers/folderController.ts index a0bb938..fe554cb 100644 --- a/Services/server/src/controllers/folderController.ts +++ b/Services/server/src/controllers/folderController.ts @@ -147,11 +147,11 @@ export class FolderController extends Controller { @Path() drawerName: string, @Path() folderName: string, ) { - return new Promise((resolve, reject) => { + await new Promise((resolve, reject) => { const objects: string[] = []; const stream = minioClient.listObjectsV2( "ehr", - `${cabinetName}/${drawerName}/${folderName}`, + `${cabinetName}/${drawerName}/${folderName}/`, true, ); @@ -161,10 +161,31 @@ export class FolderController extends Controller { objects.push(v.name); }); - stream.on("close", () => minioClient.removeObjects("ehr", objects)); + stream.on("close", async () => { + minioClient.removeObjects("ehr", objects); + resolve(); + }); stream.on("error", () => reject(new Error("Object storage error occured."))); - - resolve(this.setStatus(HttpStatusCode.NO_CONTENT)); }); + + const searchResult = await esClient.search({ + index: process.env.ELASTICSEARCH_INDEX ?? "ehr-index", + query: { + prefix: { pathname: `${cabinetName}/${drawerName}/${folderName}/` }, + }, + }); + + await Promise.all( + searchResult.hits.hits.map(async (v) => { + return esClient + .delete({ + index: process.env.ELASTICSEARCH_INDEX ?? "ehr-index", + id: v._id, + }) + .catch((e) => console.error(`ElasticSearch Error: ${e}`)); + }), + ); + + return this.setStatus(HttpStatusCode.NO_CONTENT); } } diff --git a/Services/server/src/controllers/subFolderController.ts b/Services/server/src/controllers/subFolderController.ts index 2ab4356..f54a79c 100644 --- a/Services/server/src/controllers/subFolderController.ts +++ b/Services/server/src/controllers/subFolderController.ts @@ -154,11 +154,11 @@ export class SubFolderController extends Controller { @Path() folderName: string, @Path() subFolderName: string, ) { - return new Promise((resolve, reject) => { + await new Promise((resolve, reject) => { const objects: string[] = []; const stream = minioClient.listObjectsV2( "ehr", - `${cabinetName}/${drawerName}/${folderName}/${subFolderName}`, + `${cabinetName}/${drawerName}/${folderName}/${subFolderName}/`, true, ); @@ -168,10 +168,31 @@ export class SubFolderController extends Controller { objects.push(v.name); }); - stream.on("close", () => minioClient.removeObjects("ehr", objects)); + stream.on("close", async () => { + minioClient.removeObjects("ehr", objects); + resolve(); + }); stream.on("error", () => reject(new Error("Object storage error occured."))); - - resolve(this.setStatus(HttpStatusCode.NO_CONTENT)); }); + + const searchResult = await esClient.search({ + index: process.env.ELASTICSEARCH_INDEX ?? "ehr-index", + query: { + prefix: { pathname: `${cabinetName}/${drawerName}/${folderName}/${subFolderName}` }, + }, + }); + + await Promise.all( + searchResult.hits.hits.map(async (v) => { + return esClient + .delete({ + index: process.env.ELASTICSEARCH_INDEX ?? "ehr-index", + id: v._id, + }) + .catch((e) => console.error(`ElasticSearch Error: ${e}`)); + }), + ); + + return this.setStatus(HttpStatusCode.NO_CONTENT); } }