From 62f31eee77020b0ca9e85a47aec2806c3ce10f98 Mon Sep 17 00:00:00 2001
From: JoinTyang <41655440+JoinTyang@users.noreply.github.com>
Date: Sat, 19 Apr 2025 14:34:02 +0800
Subject: [PATCH] fix update records bug (#7747)

---
 frontend/src/metadata/store/server-operator.js | 6 +++++-
 seahub/repo_metadata/apis.py                   | 6 +++++-
 seahub/repo_metadata/constants.py              | 2 ++
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/frontend/src/metadata/store/server-operator.js b/frontend/src/metadata/store/server-operator.js
index ba99e7bce9..548ca48e68 100644
--- a/frontend/src/metadata/store/server-operator.js
+++ b/frontend/src/metadata/store/server-operator.js
@@ -44,7 +44,11 @@ class ServerOperator {
           window.sfMetadataContext.modifyRecords(repo_id, recordsData, is_copy_paste).then(res => {
             callback({ operation });
           }).catch(error => {
-            callback({ error: gettext('Failed to modify records') });
+            if (error.response && error.response.status === 413) {
+              callback({ error: gettext('Number of records exceeds the limit of 1000') });
+            } else {
+              callback({ error: gettext('Failed to modify records') });
+            }
           });
         }
         break;
diff --git a/seahub/repo_metadata/apis.py b/seahub/repo_metadata/apis.py
index 7199e5157b..b14fdcb40a 100644
--- a/seahub/repo_metadata/apis.py
+++ b/seahub/repo_metadata/apis.py
@@ -21,7 +21,7 @@ from seahub.repo_metadata.utils import add_init_metadata_task, recognize_faces,
 from seahub.repo_metadata.metadata_server_api import MetadataServerAPI, list_metadata_view_records
 from seahub.utils.repo import is_repo_admin
 from seaserv import seafile_api
-from seahub.repo_metadata.constants import FACE_RECOGNITION_VIEW_ID
+from seahub.repo_metadata.constants import FACE_RECOGNITION_VIEW_ID, METADATA_RECORD_UPDATE_LIMIT
 
 
 logger = logging.getLogger(__name__)
@@ -375,6 +375,10 @@ class MetadataRecords(APIView):
             error_msg = 'records_data invalid.'
             return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
 
+        if len(records_data) > METADATA_RECORD_UPDATE_LIMIT:
+            error_msg = 'Number of records exceeds the limit of 1000.'
+            return api_error(status.HTTP_413_REQUEST_ENTITY_TOO_LARGE, error_msg)
+
         metadata = RepoMetadata.objects.filter(repo_id=repo_id).first()
         if not metadata or not metadata.enabled:
             error_msg = f'The metadata module is disabled for repo {repo_id}.'
diff --git a/seahub/repo_metadata/constants.py b/seahub/repo_metadata/constants.py
index 5dfb4ec520..3d71979962 100644
--- a/seahub/repo_metadata/constants.py
+++ b/seahub/repo_metadata/constants.py
@@ -1 +1,3 @@
 FACE_RECOGNITION_VIEW_ID = '_face_recognition'
+
+METADATA_RECORD_UPDATE_LIMIT = 1000