From beeaae15af3fcd075fa52a90a61c68c6ea263fbc Mon Sep 17 00:00:00 2001 From: Marcin Haba Date: Mon, 26 Feb 2024 10:30:10 +0100 Subject: [PATCH] baculum: Add to filesets endpoint parameter to list unique filesets without versions --- .../protected/API/Modules/FileSetManager.php | 26 ++++++++++++++++--- .../protected/API/Pages/API/FileSets.php | 8 +++++- .../protected/API/openapi_baculum.json | 9 +++++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/gui/baculum/protected/API/Modules/FileSetManager.php b/gui/baculum/protected/API/Modules/FileSetManager.php index 9c3c24b7c..98884ec02 100644 --- a/gui/baculum/protected/API/Modules/FileSetManager.php +++ b/gui/baculum/protected/API/Modules/FileSetManager.php @@ -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); diff --git a/gui/baculum/protected/API/Pages/API/FileSets.php b/gui/baculum/protected/API/Pages/API/FileSets.php index cce2a2550..a53c4399a 100644 --- a/gui/baculum/protected/API/Pages/API/FileSets.php +++ b/gui/baculum/protected/API/Pages/API/FileSets.php @@ -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 { diff --git a/gui/baculum/protected/API/openapi_baculum.json b/gui/baculum/protected/API/openapi_baculum.json index 38e49345b..39ffc523d 100644 --- a/gui/baculum/protected/API/openapi_baculum.json +++ b/gui/baculum/protected/API/openapi_baculum.json @@ -5679,6 +5679,15 @@ "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" + } } ] } -- 2.47.3