From: Marcin Haba Date: Fri, 12 Aug 2022 07:24:06 +0000 (+0200) Subject: baculum: Add object versions endpoint X-Git-Tag: Release-13.0.2~70 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c7466dcc88493ae35756c3a5ce176e5c82841dba;p=thirdparty%2Fbacula.git baculum: Add object versions endpoint --- diff --git a/gui/baculum/protected/API/Modules/ObjectManager.php b/gui/baculum/protected/API/Modules/ObjectManager.php index 637ed4dc3..6ffa219c1 100644 --- a/gui/baculum/protected/API/Modules/ObjectManager.php +++ b/gui/baculum/protected/API/Modules/ObjectManager.php @@ -187,4 +187,45 @@ LEFT JOIN Job USING (JobId) ' $sth->execute(); return $sth->fetchAll(\PDO::FETCH_ASSOC); } + + /** + * Get all object versions by objectuuid. + * + * @param string $objectuuid object UUID + * @return array object versions + */ + public function getObjectVersions($objectuuid) { + $sql = 'SELECT + obj.ObjectUUID AS objectuuid, + obj.ObjectId AS objectid, + obj.ObjectType AS objecttype, + obj.ObjectName AS objectname, + obj.ObjectCategory AS objectcategory, + Job.JobId AS jobid, + Job.Name AS jobname, + Job.Level AS level, + Job.JobStatus AS jobstatus, + Job.JobBytes AS jobbytes, + Job.JobFiles AS jobfiles, + Job.StartTime AS starttime, + Job.EndTime AS endtime, + Job.JobErrors AS joberrors, + Client.Name AS client, + FileSet.FileSet AS fileset + FROM + Object AS obj + LEFT JOIN Job USING(JobId) + LEFT JOIN Client USING(ClientId) + LEFT JOIN FileSet USING(FileSetId) + WHERE + obj.ObjectUUID=:objectuuid + ORDER BY Job.StartTime DESC'; + $connection = ObjectRecord::finder()->getDbConnection(); + $connection->setActive(true); + $pdo = $connection->getPdoInstance(); + $sth = $pdo->prepare($sql); + $sth->bindParam(':objectuuid', $objectuuid, \PDO::PARAM_STR, 400); + $sth->execute(); + return $sth->fetchAll(\PDO::FETCH_ASSOC); + } } diff --git a/gui/baculum/protected/API/Pages/API/ObjectVersions.php b/gui/baculum/protected/API/Pages/API/ObjectVersions.php new file mode 100644 index 000000000..0093c7fb7 --- /dev/null +++ b/gui/baculum/protected/API/Pages/API/ObjectVersions.php @@ -0,0 +1,47 @@ + + * @category API + * @package Baculum API + */ +class ObjectVersions extends BaculumAPIServer { + + public function get() { + $misc = $this->getModule('misc'); + $objectuuid = null; + if ($this->Request->contains('uuid') && $misc->isValidName($this->Request['uuid'])) { + $objectuuid = $this->Request['uuid']; + } + + $versions = $this->getModule('object')->getObjectVersions( + $objectuuid + ); + $this->output = $versions; + $this->error = ObjectError::ERROR_NO_ERRORS; + } +} diff --git a/gui/baculum/protected/API/Pages/API/endpoints.xml b/gui/baculum/protected/API/Pages/API/endpoints.xml index 28d98cf84..04f93a251 100644 --- a/gui/baculum/protected/API/Pages/API/endpoints.xml +++ b/gui/baculum/protected/API/Pages/API/endpoints.xml @@ -90,6 +90,7 @@ + diff --git a/gui/baculum/protected/API/openapi_baculum.json b/gui/baculum/protected/API/openapi_baculum.json index 2ec195736..92add7e25 100644 --- a/gui/baculum/protected/API/openapi_baculum.json +++ b/gui/baculum/protected/API/openapi_baculum.json @@ -6138,6 +6138,46 @@ ] } }, + "/api/v2/objects/versions/{objectuuid}": { + "get": { + "tags": ["objects"], + "summary": "Object versions by objectuuid", + "description": "Get object versions.", + "responses": { + "200": { + "description": "Object versions by objectuuid", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "output": { + "$ref": "#/components/schemas/Objects" + }, + "error": { + "type": "integer", + "description": "Error code", + "enum": [0, 1, 2, 3, 6, 7, 1000] + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "objectuuid", + "in": "path", + "required": true, + "description": "Object UUID", + "schema": { + "type": "string" + } + } + ] + } + }, "/api/v2/objects/stats/category-sum": { "get": { "tags": ["objects"],