aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_versions/lib
diff options
context:
space:
mode:
authorLouis Chemineau <louis@chmn.me>2022-11-14 16:33:42 +0100
committerLouis (Rebase PR Action) <artonge@users.noreply.github.com>2023-01-26 10:12:22 +0000
commite82bfba114aa291fe6bbe1de3488c685d12489a1 (patch)
tree800112b8c8d77ece210ea13c1b14eccab51405b2 /apps/files_versions/lib
parent1ade482797e2d26eb006b433ed71e6e7ac407f1f (diff)
downloadnextcloud-server-e82bfba114aa291fe6bbe1de3488c685d12489a1.tar.gz
nextcloud-server-e82bfba114aa291fe6bbe1de3488c685d12489a1.zip
Create files_versions table
Signed-off-by: Louis Chemineau <louis@chmn.me>
Diffstat (limited to 'apps/files_versions/lib')
-rw-r--r--apps/files_versions/lib/Db/VersionEntity.php72
-rw-r--r--apps/files_versions/lib/Db/VersionsMapper.php64
-rw-r--r--apps/files_versions/lib/Migration/Version1020Date20221114144058.php84
3 files changed, 220 insertions, 0 deletions
diff --git a/apps/files_versions/lib/Db/VersionEntity.php b/apps/files_versions/lib/Db/VersionEntity.php
new file mode 100644
index 00000000000..5ef94215dd2
--- /dev/null
+++ b/apps/files_versions/lib/Db/VersionEntity.php
@@ -0,0 +1,72 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2022 Louis Chmn <louis@chmn.me>
+ *
+ * @author Louis Chmn <louis@chmn.me>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_Versions\Db;
+
+use JsonSerializable;
+
+use OCP\AppFramework\Db\Entity;
+use OCP\DB\Types;
+
+/**
+ * @method int getFileId()
+ * @method void setFileId(int $fileId)
+ * @method int getTimestamp()
+ * @method void setTimestamp(int $timestamp)
+ * @method int getSize()
+ * @method void setSize(int $size)
+ * @method int getMimetype()
+ * @method void setMimetype(int $mimetype)
+ * @method array|null getMetadata()
+ * @method void setMetadata(array $metadata)
+ */
+class VersionEntity extends Entity implements JsonSerializable {
+ protected ?int $fileId = null;
+ protected ?int $timestamp = null;
+ protected ?int $size = null;
+ protected ?int $mimetype = null;
+ protected ?array $metadata = null;
+
+ public function __construct() {
+ $this->addType('id', Types::INTEGER);
+ $this->addType('file_id', Types::INTEGER);
+ $this->addType('timestamp', Types::INTEGER);
+ $this->addType('size', Types::INTEGER);
+ $this->addType('mimetype', Types::INTEGER);
+ $this->addType('metadata', Types::JSON);
+ }
+
+ public function jsonSerialize() {
+ return [
+ 'id' => $this->id,
+ 'file_id' => $this->fileId,
+ 'timestamp' => $this->timestamp,
+ 'size' => $this->size,
+ 'mimetype' => $this->mimetype,
+ 'metadata' => $this->metadata,
+ ];
+ }
+} \ No newline at end of file
diff --git a/apps/files_versions/lib/Db/VersionsMapper.php b/apps/files_versions/lib/Db/VersionsMapper.php
new file mode 100644
index 00000000000..3da684b7d77
--- /dev/null
+++ b/apps/files_versions/lib/Db/VersionsMapper.php
@@ -0,0 +1,64 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2022 Louis Chmn <louis@chmn.me>
+ *
+ * @author Louis Chmn <louis@chmn.me>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_Versions\Db;
+
+use OCA\Files_Versions\Db\VersionEntity;
+use OCP\IDBConnection;
+use OCP\AppFramework\Db\QBMapper;
+
+/**
+ * @extends QBMapper<VersionEntity>
+ */
+class VersionsMapper extends QBMapper {
+ public function __construct(IDBConnection $db) {
+ parent::__construct($db, 'files_versions', VersionEntity::class);
+ }
+
+ /**
+ * @return VersionEntity[]
+ */
+ public function findAllVersionsForFileId(int $fileId): array {
+ $qb = $this->db->getQueryBuilder();
+
+ $qb->select('*')
+ ->from($this->getTableName())
+ ->where($qb->expr()->eq('file_id', $qb->createNamedParameter($fileId)));
+
+ return $this->findEntities($qb);
+ }
+
+ public function findVersionForFileId(int $fileId, int $timestamp): VersionEntity {
+ $qb = $this->db->getQueryBuilder();
+
+ $qb->select('*')
+ ->from($this->getTableName())
+ ->where($qb->expr()->eq('file_id', $qb->createNamedParameter($fileId)))
+ ->where($qb->expr()->eq('timestamp', $qb->createNamedParameter($timestamp)));
+
+ return $this->findEntity($qb);
+ }
+}
diff --git a/apps/files_versions/lib/Migration/Version1020Date20221114144058.php b/apps/files_versions/lib/Migration/Version1020Date20221114144058.php
new file mode 100644
index 00000000000..f0d58284c9f
--- /dev/null
+++ b/apps/files_versions/lib/Migration/Version1020Date20221114144058.php
@@ -0,0 +1,84 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2022 Louis Chmn <louis@chmn.me>
+ *
+ * @author Louis Chmn <louis@chmn.me>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_Versions\Migration;
+
+use Closure;
+use OCP\DB\ISchemaWrapper;
+use OCP\DB\Types;
+use OCP\Migration\IOutput;
+use OCP\Migration\SimpleMigrationStep;
+
+/**
+ * Auto-generated migration step: Please modify to your needs!
+ */
+class Version1020Date20221114144058 extends SimpleMigrationStep {
+ /**
+ * @param IOutput $output
+ * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
+ * @param array $options
+ * @return null|ISchemaWrapper
+ */
+ public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
+ /** @var ISchemaWrapper $schema */
+ $schema = $schemaClosure();
+
+ if ($schema->hasTable("files_versions")) {
+ return null;
+ }
+
+ $table = $schema->createTable("files_versions");
+ $table->addColumn('id', Types::BIGINT, [
+ 'autoincrement' => true,
+ 'notnull' => true,
+ 'length' => 20,
+ ]);
+ $table->addColumn('file_id', Types::BIGINT, [
+ 'notnull' => true,
+ 'length' => 20,
+ ]);
+ $table->addColumn('timestamp', Types::BIGINT, [
+ 'notnull' => true,
+ 'length' => 20,
+ ]);
+ $table->addColumn('size', Types::BIGINT, [
+ 'notnull' => true,
+ 'length' => 20,
+ ]);
+ $table->addColumn('mimetype', Types::BIGINT, [
+ 'notnull' => true,
+ 'length' => 20,
+ ]);
+ $table->addColumn('metadata', Types::JSON, [
+ 'notnull' => true,
+ ]);
+
+ $table->setPrimaryKey(['id']);
+ $table->addUniqueIndex(['file_id', 'timestamp'], 'files_versions_uniq_index');
+
+ return $schema;
+ }
+}