From bb0a4b05316697395e9495544bdf5a868d717c44 Mon Sep 17 00:00:00 2001
From: yonathan suarez <47557263+yond1994@users.noreply.github.com>
Date: Fri, 7 Jun 2024 18:22:03 +0200
Subject: [PATCH] Add API Endpoint for Deleting Documents in system (#1623)

* fix: "remove document system api"

* fix: "update text system system "

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>
---
 server/endpoints/api/system/index.js | 63 ++++++++++++++++++++++
 server/swagger/openapi.json          | 78 ++++++++++++++++++++++++++++
 2 files changed, 141 insertions(+)

diff --git a/server/endpoints/api/system/index.js b/server/endpoints/api/system/index.js
index c8e5e06cc..da941bd8d 100644
--- a/server/endpoints/api/system/index.js
+++ b/server/endpoints/api/system/index.js
@@ -206,6 +206,69 @@ function apiSystemEndpoints(app) {
       }
     }
   );
+  app.delete(
+    "/v1/system/remove-documents",
+    [validApiKey],
+    async (request, response) => {
+      /*
+      #swagger.tags = ['System Settings']
+      #swagger.description = 'Permanently remove documents from the system.'
+      #swagger.requestBody = {
+        description: 'Array of document names to be removed permanently.',
+        required: true,
+        content: {
+          "application/json": {
+            schema: {
+              type: 'object',
+              properties: {
+                names: {
+                  type: 'array',
+                  items: {
+                    type: 'string'
+                  },
+                  example: [
+                    "custom-documents/file.txt-fc4beeeb-e436-454d-8bb4-e5b8979cb48f.json"
+                  ]
+                }
+              }
+            }
+          }
+        }
+      }
+      #swagger.responses[200] = {
+        description: 'Documents removed successfully.',
+        content: {
+          "application/json": {
+            schema: {
+              type: 'object',
+              example: {
+                success: true,
+                message: 'Documents removed successfully'
+              }
+            }
+          }
+        }
+      }
+      #swagger.responses[403] = {
+        description: 'Forbidden',
+        schema: {
+          "$ref": "#/definitions/InvalidAPIKey"
+        }
+      }
+      #swagger.responses[500] = {
+        description: 'Internal Server Error'
+      }
+      */
+      try {
+        const { names } = reqBody(request);
+        for await (const name of names) await purgeDocument(name);
+        response.status(200).json({ success: true, message: 'Documents removed successfully' }).end();
+      } catch (e) {
+        console.log(e.message, e);
+        response.sendStatus(500).end();
+      }
+    }
+  );
 }
 
 module.exports = { apiSystemEndpoints };
diff --git a/server/swagger/openapi.json b/server/swagger/openapi.json
index ed6f15337..adc843f38 100644
--- a/server/swagger/openapi.json
+++ b/server/swagger/openapi.json
@@ -2241,6 +2241,84 @@
           }
         }
       }
+    },
+    "/v1/system/remove-documents": {
+      "delete": {
+        "tags": [
+          "System Settings"
+        ],
+        "description": "Permanently remove documents from the system.",
+        "parameters": [],
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object",
+                  "example": {
+                    "success": true,
+                    "message": "Documents removed successfully"
+                  }
+                }
+              }
+            }
+          },
+          "403": {
+            "description": "Forbidden",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/InvalidAPIKey"
+                }
+              },
+              "application/xml": {
+                "schema": {
+                  "$ref": "#/components/schemas/InvalidAPIKey"
+                }
+              }
+            }
+          },
+          "500": {
+            "description": "Internal Server Error"
+          }
+        },
+        "requestBody": {
+          "description": "Array of document names to be removed permanently.",
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "type": "object",
+                "properties": {
+                  "names": {
+                    "type": "array",
+                    "items": {
+                      "type": "string"
+                    },
+                    "example": [
+                      "custom-documents/file.txt-fc4beeeb-e436-454d-8bb4-e5b8979cb48f.json"
+                    ]
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "components": {
+      "schemas": {
+        "InvalidAPIKey": {
+          "type": "object",
+          "properties": {
+            "error": {
+              "type": "string",
+              "example": "Invalid API Key"
+            }
+          }
+        }
+      }
     }
   },
   "components": {
-- 
GitLab