From 72f98f50138ed15e8e3d583a034b570399d6c035 Mon Sep 17 00:00:00 2001 From: Kieran Date: Wed, 6 Jul 2022 22:38:18 +0100 Subject: [PATCH] Expires --- VoidCat/Model/VoidFileMeta.cs | 5 +++++ .../Files/LocalDiskFileMetadataStore.cs | 1 + .../Files/PostgresFileMetadataStore.cs | 11 +++++++---- VoidCat/Services/Files/S3FileMetadataStore.cs | 1 + .../Migrations/Database/01-FileExpiry.cs | 19 +++++++++++++++++++ 5 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 VoidCat/Services/Migrations/Database/01-FileExpiry.cs diff --git a/VoidCat/Model/VoidFileMeta.cs b/VoidCat/Model/VoidFileMeta.cs index d6ae701..f332e79 100644 --- a/VoidCat/Model/VoidFileMeta.cs +++ b/VoidCat/Model/VoidFileMeta.cs @@ -65,6 +65,11 @@ public record VoidFileMeta : IVoidFileMeta /// Url to download the file /// public Uri? Url { get; set; } + + /// + /// Time when the file will expire and be deleted + /// + public DateTimeOffset? Expires { get; set; } } /// diff --git a/VoidCat/Services/Files/LocalDiskFileMetadataStore.cs b/VoidCat/Services/Files/LocalDiskFileMetadataStore.cs index 4a2cd4d..faa1df0 100644 --- a/VoidCat/Services/Files/LocalDiskFileMetadataStore.cs +++ b/VoidCat/Services/Files/LocalDiskFileMetadataStore.cs @@ -52,6 +52,7 @@ public class LocalDiskFileMetadataStore : IFileMetadataStore oldMeta.Description = meta.Description ?? oldMeta.Description; oldMeta.Name = meta.Name ?? oldMeta.Name; oldMeta.MimeType = meta.MimeType ?? oldMeta.MimeType; + oldMeta.Expires = meta.Expires ?? oldMeta.Expires; await Set(id, oldMeta); } diff --git a/VoidCat/Services/Files/PostgresFileMetadataStore.cs b/VoidCat/Services/Files/PostgresFileMetadataStore.cs index d23df97..e508925 100644 --- a/VoidCat/Services/Files/PostgresFileMetadataStore.cs +++ b/VoidCat/Services/Files/PostgresFileMetadataStore.cs @@ -32,9 +32,10 @@ public class PostgresFileMetadataStore : IFileMetadataStore await using var conn = await _connection.Get(); await conn.ExecuteAsync( @"insert into -""Files""(""Id"", ""Name"", ""Size"", ""Uploaded"", ""Description"", ""MimeType"", ""Digest"", ""EditSecret"") -values(:id, :name, :size, :uploaded, :description, :mimeType, :digest, :editSecret) -on conflict (""Id"") do update set ""Name"" = :name, ""Description"" = :description, ""MimeType"" = :mimeType", new +""Files""(""Id"", ""Name"", ""Size"", ""Uploaded"", ""Description"", ""MimeType"", ""Digest"", ""EditSecret"", ""Expires"") +values(:id, :name, :size, :uploaded, :description, :mimeType, :digest, :editSecret, :expires) +on conflict (""Id"") do update set ""Name"" = :name, ""Description"" = :description, ""MimeType"" = :mimeType, ""Expires"" = :expires", + new { id, name = obj.Name, @@ -43,7 +44,8 @@ on conflict (""Id"") do update set ""Name"" = :name, ""Description"" = :descript description = obj.Description, mimeType = obj.MimeType, digest = obj.Digest, - editSecret = obj.EditSecret + editSecret = obj.EditSecret, + expires = obj.Expires }); } @@ -79,6 +81,7 @@ on conflict (""Id"") do update set ""Name"" = :name, ""Description"" = :descript oldMeta.Description = meta.Description ?? oldMeta.Description; oldMeta.Name = meta.Name ?? oldMeta.Name; oldMeta.MimeType = meta.MimeType ?? oldMeta.MimeType; + oldMeta.Expires = meta.Expires ?? oldMeta.Expires; await Set(id, oldMeta); } diff --git a/VoidCat/Services/Files/S3FileMetadataStore.cs b/VoidCat/Services/Files/S3FileMetadataStore.cs index 860cff9..ab005ba 100644 --- a/VoidCat/Services/Files/S3FileMetadataStore.cs +++ b/VoidCat/Services/Files/S3FileMetadataStore.cs @@ -52,6 +52,7 @@ public class S3FileMetadataStore : IFileMetadataStore oldMeta.Description = meta.Description ?? oldMeta.Description; oldMeta.Name = meta.Name ?? oldMeta.Name; oldMeta.MimeType = meta.MimeType ?? oldMeta.MimeType; + oldMeta.Expires = meta.Expires ?? oldMeta.Expires; await Set(id, oldMeta); } diff --git a/VoidCat/Services/Migrations/Database/01-FileExpiry.cs b/VoidCat/Services/Migrations/Database/01-FileExpiry.cs new file mode 100644 index 0000000..5d0501f --- /dev/null +++ b/VoidCat/Services/Migrations/Database/01-FileExpiry.cs @@ -0,0 +1,19 @@ +using FluentMigrator; + +namespace VoidCat.Services.Migrations.Database; + +[Migration(20220615_2238)] +public class FileExpiry : Migration { + public override void Up() + { + Create.Column("Expires") + .OnTable("Files") + .AsDateTimeOffset().Nullable().Indexed(); + } + + public override void Down() + { + Delete.Column("Expires") + .FromTable("Files"); + } +} \ No newline at end of file