]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
baculum: Add to filesets endpoint parameter to list unique filesets without versions
authorMarcin Haba <marcin.haba@bacula.pl>
Mon, 26 Feb 2024 09:30:10 +0000 (10:30 +0100)
committerMarcin Haba <marcin.haba@bacula.pl>
Mon, 26 Feb 2024 09:30:10 +0000 (10:30 +0100)
gui/baculum/protected/API/Modules/FileSetManager.php
gui/baculum/protected/API/Pages/API/FileSets.php
gui/baculum/protected/API/openapi_baculum.json

index 9c3c24b7c9d2efe88db9bac44233b46d8174a552..98884ec02d68169b1e438c89076b1db2c8367074 100644 (file)
@@ -33,7 +33,7 @@ use PDO;
  */
 class FileSetManager extends APIModule {
 
-       public function getFileSets($criteria, $limit_val = 0, $offset_val = 0) {
+       public function getFileSets($criteria, $limit_val = 0, $offset_val = 0, $unique_vals = false) {
                $limit = '';
                if (is_int($limit_val) && $limit_val > 0) {
                        $limit = ' LIMIT ' . $limit_val;
@@ -43,10 +43,28 @@ class FileSetManager extends APIModule {
                        $offset = ' OFFSET ' . $offset_val;
                }
                $where = Database::getWhere($criteria);
-
-               $sql = 'SELECT FileSet.* 
+               if ($unique_vals) {
+                       $sql = '
+SELECT
+       fs.FileSetId AS filesetid,
+       fs.FileSet AS fileset,
+       fs.Md5 AS md5,
+       fs.CreateTime AS createtime,
+       fs.Content AS content
+FROM (
+       SELECT
+               FileSet.*,
+               ROW_NUMBER() OVER (PARTITION BY FileSet ORDER BY CreateTime DESC) AS pos
+       FROM FileSet
+       ' . $where['where'] . '
+) AS fs
+WHERE fs.pos=1 '
+ . $limit . $offset;
+               } else {
+                       $sql = 'SELECT FileSet.* 
 FROM FileSet '
-. $where['where'] . $limit . $offset;
+ . $where['where'] . $limit . $offset;
+               }
 
                $statement = Database::runQuery($sql, $where['params']);
                return $statement->fetchAll(PDO::FETCH_OBJ);
index cce2a25508fed2fa04e6a6f9259278ff4b05239b..a53c4399ac87f0684abecc0642a588d1050a2810 100644 (file)
@@ -37,6 +37,7 @@ class FileSets extends BaculumAPIServer {
                $content = $this->Request->contains('content') && $misc->isValidNameList($this->Request['content']) ? $this->Request['content'] : '';
                $limit = $this->Request->contains('limit') && $misc->isValidInteger($this->Request['limit']) ? (int)$this->Request['limit'] : 0;
                $offset = $this->Request->contains('offset') && $misc->isValidInteger($this->Request['offset']) ? (int)$this->Request['offset'] : 0;
+               $unique_filesets = $this->Request->contains('unique_filesets') && $misc->isValidBooleanTrue($this->Request['unique_filesets']) ? true : false;
                $result = $this->getModule('bconsole')->bconsoleCommand(
                        $this->director,
                        ['.fileset']
@@ -69,7 +70,12 @@ class FileSets extends BaculumAPIServer {
                                ];
                        }
 
-                       $filesets = $this->getModule('fileset')->getFileSets($params, $limit, $offset);
+                       $filesets = $this->getModule('fileset')->getFileSets(
+                               $params,
+                               $limit,
+                               $offset,
+                               $unique_filesets
+                       );
                        $this->output = $filesets;
                        $this->error = FileSetError::ERROR_NO_ERRORS;
                } else {
index 38e49345b0baf85b7ef181c4d52492242b38ff2a..39ffc523d4a9c507b90e52698a470b29fc974ecd 100644 (file)
                                                        "type": "string",
                                                        "pattern": "[a-zA-Z0-9:.-_ ]+"
                                                }
+                                       },
+                                       {
+                                               "name": "unique_filesets",
+                                               "in": "query",
+                                               "required": false,
+                                               "description": "Display only latest unique filesets without taking into account fileset versions.",
+                                               "schema": {
+                                                       "type": "boolean"
+                                               }
                                        }
                                ]
                        }