Răsfoiți Sursa

feat: add name filter to ListFiles for efficient filename-based lookup

Fszontagh 3 luni în urmă
părinte
comite
45c7a8e3be

+ 2 - 1
client/include/smartbotic/database/client.hpp

@@ -362,7 +362,8 @@ public:
     [[nodiscard]] FileListResult listFiles(const std::string& file_type = "",
                                             const std::string& related_id = "",
                                             uint32_t limit = 100, uint32_t offset = 0,
-                                            const std::string& checksum = "");
+                                            const std::string& checksum = "",
+                                            const std::string& name = "");
 
 private:
     class Impl;

+ 6 - 3
client/src/client.cpp

@@ -1007,13 +1007,15 @@ public:
     Client::FileListResult listFiles(const std::string& file_type,
                                       const std::string& related_id,
                                       uint32_t limit, uint32_t offset,
-                                      const std::string& checksum) {
+                                      const std::string& checksum,
+                                      const std::string& name) {
         smartbotic::databasepb::ListFilesRequest request;
         if (!file_type.empty()) request.set_file_type(file_type);
         if (!related_id.empty()) request.set_related_id(related_id);
         request.set_limit(limit);
         request.set_offset(offset);
         if (!checksum.empty()) request.set_checksum(checksum);
+        if (!name.empty()) request.set_name(name);
 
         smartbotic::databasepb::ListFilesResponse response;
         grpc::ClientContext context;
@@ -1230,8 +1232,9 @@ bool Client::deleteFile(const std::string& id) {
 Client::FileListResult Client::listFiles(const std::string& file_type,
                                           const std::string& related_id,
                                           uint32_t limit, uint32_t offset,
-                                          const std::string& checksum) {
-    return impl_->listFiles(file_type, related_id, limit, offset, checksum);
+                                          const std::string& checksum,
+                                          const std::string& name) {
+    return impl_->listFiles(file_type, related_id, limit, offset, checksum, name);
 }
 
 } // namespace smartbotic::database

+ 1 - 0
proto/database.proto

@@ -508,6 +508,7 @@ message ListFilesRequest {
     uint32 limit = 3;
     uint32 offset = 4;
     string checksum = 5;             // Filter by checksum (for dedup queries)
+    string name = 6;                 // Filter by exact filename (optional)
 }
 
 message ListFilesResponse {

+ 1 - 1
service/src/database_grpc_impl.cpp

@@ -753,7 +753,7 @@ grpc::Status DatabaseGrpcImpl::ListFiles(
     auto result = files_.listFiles(
         request->file_type(), request->related_id(),
         request->limit(), request->offset(),
-        request->checksum()
+        request->checksum(), request->name()
     );
 
     response->set_total_count(result.totalCount);

+ 3 - 1
service/src/files/file_manager.cpp

@@ -183,7 +183,8 @@ uint32_t FileManager::getRefCount(const std::string& checksum) const {
 
 FileManager::ListResult FileManager::listFiles(
     const std::string& fileType, const std::string& relatedId,
-    uint32_t limit, uint32_t offset, const std::string& checksum
+    uint32_t limit, uint32_t offset, const std::string& checksum,
+    const std::string& name
 ) const {
     ListResult result;
     std::vector<FileInfo> allFiles;
@@ -204,6 +205,7 @@ FileManager::ListResult FileManager::listFiles(
         if (!fileType.empty() && info->fileType != fileType) continue;
         if (!relatedId.empty() && info->relatedId != relatedId) continue;
         if (!checksum.empty() && info->checksum != checksum) continue;
+        if (!name.empty() && info->name != name) continue;
 
         allFiles.push_back(*info);
     }

+ 2 - 1
service/src/files/file_manager.hpp

@@ -67,7 +67,8 @@ public:
         const std::string& relatedId = "",
         uint32_t limit = 100,
         uint32_t offset = 0,
-        const std::string& checksum = ""
+        const std::string& checksum = "",
+        const std::string& name = ""
     ) const;
 
 private: