diff --git a/Backbone.sln.DotSettings b/Backbone.sln.DotSettings
index 678e39afaf..2b6eef206f 100644
--- a/Backbone.sln.DotSettings
+++ b/Backbone.sln.DotSettings
@@ -36,6 +36,7 @@
True
True
True
+ True
True
True
True
diff --git a/BuildingBlocks/src/BuildingBlocks.Infrastructure/Persistence/BlobStorage/BlobStorageServiceCollectionExtensions.cs b/BuildingBlocks/src/BuildingBlocks.Infrastructure/Persistence/BlobStorage/BlobStorageServiceCollectionExtensions.cs
index f2921a0c4c..7ef97b7b47 100644
--- a/BuildingBlocks/src/BuildingBlocks.Infrastructure/Persistence/BlobStorage/BlobStorageServiceCollectionExtensions.cs
+++ b/BuildingBlocks/src/BuildingBlocks.Infrastructure/Persistence/BlobStorage/BlobStorageServiceCollectionExtensions.cs
@@ -29,7 +29,7 @@ public static void AddBlobStorage(this IServiceCollection services, BlobStorageO
services.AddGoogleCloudStorage(googleCloudStorageOptions =>
{
googleCloudStorageOptions.GcpAuthJson = options.ConnectionInfo;
- googleCloudStorageOptions.BucketName = options.Container!;
+ googleCloudStorageOptions.BucketName = options.Container;
});
else if (options.CloudProvider.IsNullOrEmpty())
throw new NotSupportedException("No cloud provider was specified.");
@@ -41,15 +41,9 @@ public static void AddBlobStorage(this IServiceCollection services, BlobStorageO
public class BlobStorageOptions
{
- /**
- * This property will never be null as it makes no sense, but is marked as nullable due to how AddBlobStorage method uses BlobStorageOptions.
- */
- public string? CloudProvider { get; set; }
+ public string CloudProvider { get; set; } = null!;
- /**
- * This property will never be null as it makes no sense, but is marked as nullable due to how AddBlobStorage method uses BlobStorageOptions.
- */
- public string? Container { get; set; }
+ public string Container { get; set; } = null!;
- public string? ConnectionInfo { get; set; }
+ public string? ConnectionInfo { get; set; } = null;
}
diff --git a/Modules/Files/src/Files.Application/Files/DTOs/FileMetadataDTO.cs b/Modules/Files/src/Files.Application/Files/DTOs/FileMetadataDTO.cs
index f4c4784ddf..8d5f36bf37 100644
--- a/Modules/Files/src/Files.Application/Files/DTOs/FileMetadataDTO.cs
+++ b/Modules/Files/src/Files.Application/Files/DTOs/FileMetadataDTO.cs
@@ -8,29 +8,29 @@ namespace Backbone.Modules.Files.Application.Files.DTOs;
public class FileMetadataDTO : IHaveCustomMapping
{
- public FileId Id { get; set; }
+ public required FileId Id { get; set; }
- public DateTime CreatedAt { get; set; }
- public IdentityAddress CreatedBy { get; set; }
- public DeviceId CreatedByDevice { get; set; }
+ public required DateTime CreatedAt { get; set; }
+ public required IdentityAddress CreatedBy { get; set; }
+ public required DeviceId CreatedByDevice { get; set; }
- public DateTime ModifiedAt { get; set; }
- public IdentityAddress ModifiedBy { get; set; }
- public DeviceId ModifiedByDevice { get; set; }
+ public required DateTime ModifiedAt { get; set; }
+ public required IdentityAddress ModifiedBy { get; set; }
+ public required DeviceId ModifiedByDevice { get; set; }
public DateTime? DeletedAt { get; set; }
- public IdentityAddress DeletedBy { get; set; }
- public DeviceId DeletedByDevice { get; set; }
+ public IdentityAddress? DeletedBy { get; set; }
+ public DeviceId? DeletedByDevice { get; set; }
- public IdentityAddress Owner { get; set; }
- public byte[] OwnerSignature { get; set; }
+ public required IdentityAddress Owner { get; set; }
+ public required byte[] OwnerSignature { get; set; }
- public long CipherSize { get; set; }
- public byte[] CipherHash { get; set; }
+ public required long CipherSize { get; set; }
+ public required byte[] CipherHash { get; set; }
- public DateTime ExpiresAt { get; set; }
+ public required DateTime ExpiresAt { get; set; }
- public byte[] EncryptedProperties { get; set; }
+ public required byte[] EncryptedProperties { get; set; }
public void CreateMappings(Profile configuration)
{
diff --git a/Modules/Files/src/Files.Application/Files/Queries/GetFileContent/GetFileContentQuery.cs b/Modules/Files/src/Files.Application/Files/Queries/GetFileContent/GetFileContentQuery.cs
index b03a268cc4..a1261bfbec 100644
--- a/Modules/Files/src/Files.Application/Files/Queries/GetFileContent/GetFileContentQuery.cs
+++ b/Modules/Files/src/Files.Application/Files/Queries/GetFileContent/GetFileContentQuery.cs
@@ -5,5 +5,5 @@ namespace Backbone.Modules.Files.Application.Files.Queries.GetFileContent;
public class GetFileContentQuery : IRequest
{
- public FileId Id { get; set; }
+ public required FileId Id { get; set; }
}
diff --git a/Modules/Files/src/Files.Application/Files/Queries/GetFileContent/GetFileContentResponse.cs b/Modules/Files/src/Files.Application/Files/Queries/GetFileContent/GetFileContentResponse.cs
index cad268999e..648b6c2f61 100644
--- a/Modules/Files/src/Files.Application/Files/Queries/GetFileContent/GetFileContentResponse.cs
+++ b/Modules/Files/src/Files.Application/Files/Queries/GetFileContent/GetFileContentResponse.cs
@@ -2,5 +2,5 @@
public class GetFileContentResponse
{
- public byte[] FileContent { get; set; }
+ public required byte[] FileContent { get; set; }
}
diff --git a/Modules/Files/src/Files.Application/Files/Queries/GetFileMetadata/GetFileMetadataQuery.cs b/Modules/Files/src/Files.Application/Files/Queries/GetFileMetadata/GetFileMetadataQuery.cs
index 137a62d0f6..3621b0cc2e 100644
--- a/Modules/Files/src/Files.Application/Files/Queries/GetFileMetadata/GetFileMetadataQuery.cs
+++ b/Modules/Files/src/Files.Application/Files/Queries/GetFileMetadata/GetFileMetadataQuery.cs
@@ -6,5 +6,5 @@ namespace Backbone.Modules.Files.Application.Files.Queries.GetFileMetadata;
public class GetFileMetadataQuery : IRequest
{
- public FileId Id { get; set; }
+ public required FileId Id { get; set; }
}
diff --git a/Modules/Files/src/Files.Application/Infrastructure/Persistence/BlobOptions.cs b/Modules/Files/src/Files.Application/Infrastructure/Persistence/BlobOptions.cs
index 48b6842940..ff8a3e34b2 100644
--- a/Modules/Files/src/Files.Application/Infrastructure/Persistence/BlobOptions.cs
+++ b/Modules/Files/src/Files.Application/Infrastructure/Persistence/BlobOptions.cs
@@ -2,5 +2,5 @@
public class BlobOptions
{
- public string RootFolder { get; set; }
+ public required string RootFolder { get; set; }
}
diff --git a/Modules/Files/src/Files.Application/Infrastructure/Persistence/Repository/IFilesRepository.cs b/Modules/Files/src/Files.Application/Infrastructure/Persistence/Repository/IFilesRepository.cs
index 7507e0fc1a..093480cdf8 100644
--- a/Modules/Files/src/Files.Application/Infrastructure/Persistence/Repository/IFilesRepository.cs
+++ b/Modules/Files/src/Files.Application/Infrastructure/Persistence/Repository/IFilesRepository.cs
@@ -7,7 +7,7 @@
namespace Backbone.Modules.Files.Application.Infrastructure.Persistence.Repository;
public interface IFilesRepository
{
- Task Find(FileId id, CancellationToken cancellationToken, bool track = false, bool fillContent = true);
+ Task Find(FileId id, CancellationToken cancellationToken, bool track = false, bool fillContent = true);
Task> FindFilesByCreator(IEnumerable fileIds, IdentityAddress creatorAddress, PaginationFilter paginationFilter, CancellationToken cancellationToken);
Task Add(File file, CancellationToken cancellationToken);
}
diff --git a/Modules/Files/src/Files.Domain/Entities/File.cs b/Modules/Files/src/Files.Domain/Entities/File.cs
index e10bd9f454..9f69b8d208 100644
--- a/Modules/Files/src/Files.Domain/Entities/File.cs
+++ b/Modules/Files/src/Files.Domain/Entities/File.cs
@@ -6,9 +6,20 @@ namespace Backbone.Modules.Files.Domain.Entities;
public class File
{
-#pragma warning disable CS8618
- private File() { }
-#pragma warning restore CS8618
+ private File()
+ {
+ // This constructor is for EF Core only; initializing the properties with null is therefore not a problem
+ Id = null!;
+ CreatedBy = null!;
+ CreatedByDevice = null!;
+ ModifiedBy = null!;
+ ModifiedByDevice = null!;
+ Owner = null!;
+ OwnerSignature = null!;
+ CipherHash = null!;
+ Content = null!;
+ EncryptedProperties = null!;
+ }
public File(IdentityAddress createdBy, DeviceId createdByDevice, IdentityAddress owner, byte[] ownerSignature, byte[] cipherHash, byte[] content, long cipherSize, DateTime expiresAt, byte[] encryptedProperties)
{
diff --git a/Modules/Files/src/Files.Infrastructure/Files.Infrastructure.csproj b/Modules/Files/src/Files.Infrastructure/Files.Infrastructure.csproj
index b535e7f37d..3d377fd7c1 100644
--- a/Modules/Files/src/Files.Infrastructure/Files.Infrastructure.csproj
+++ b/Modules/Files/src/Files.Infrastructure/Files.Infrastructure.csproj
@@ -4,12 +4,6 @@
enable
-
-
-
-
-
-
diff --git a/Modules/Files/src/Files.Infrastructure/Persistence/Database/EntityTypeConfigurations/FileEntityTypeConfiguration.cs b/Modules/Files/src/Files.Infrastructure/Persistence/Database/EntityTypeConfigurations/FileEntityTypeConfiguration.cs
index c8e30521a8..b406bc11ca 100644
--- a/Modules/Files/src/Files.Infrastructure/Persistence/Database/EntityTypeConfigurations/FileEntityTypeConfiguration.cs
+++ b/Modules/Files/src/Files.Infrastructure/Persistence/Database/EntityTypeConfigurations/FileEntityTypeConfiguration.cs
@@ -4,7 +4,7 @@
namespace Backbone.Modules.Files.Infrastructure.Persistence.Database.EntityTypeConfigurations;
-public class FileEntityTypeConfiguration : IEntityTypeConfiguration
+public class FileEntityTypeConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
diff --git a/Modules/Files/src/Files.Infrastructure/Persistence/Database/FilesDbContext.cs b/Modules/Files/src/Files.Infrastructure/Persistence/Database/FilesDbContext.cs
index d45bd1875c..c7488e12b2 100644
--- a/Modules/Files/src/Files.Infrastructure/Persistence/Database/FilesDbContext.cs
+++ b/Modules/Files/src/Files.Infrastructure/Persistence/Database/FilesDbContext.cs
@@ -15,7 +15,7 @@ public FilesDbContext(DbContextOptions options) : base(options)
public FilesDbContext(DbContextOptions options, IServiceProvider serviceProvider) : base(options, serviceProvider) { }
- public DbSet FileMetadata { get; set; }
+ public DbSet FileMetadata { get; set; } = null!;
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
diff --git a/Modules/Files/src/Files.Infrastructure/Persistence/Database/IServiceCollectionExtensions.cs b/Modules/Files/src/Files.Infrastructure/Persistence/Database/IServiceCollectionExtensions.cs
index e20fb08f5c..928bc4e440 100644
--- a/Modules/Files/src/Files.Infrastructure/Persistence/Database/IServiceCollectionExtensions.cs
+++ b/Modules/Files/src/Files.Infrastructure/Persistence/Database/IServiceCollectionExtensions.cs
@@ -15,7 +15,7 @@ public static class IServiceCollectionExtensions
public static void AddDatabase(this IServiceCollection services, Action setupOptions)
{
var options = new DbOptions();
- setupOptions?.Invoke(options);
+ setupOptions.Invoke(options);
services.AddDatabase(options);
}
@@ -56,8 +56,8 @@ public static void AddDatabase(this IServiceCollection services, DbOptions optio
public class DbOptions
{
- public string Provider { get; set; }
- public string DbConnectionString { get; set; }
+ public string Provider { get; set; } = null!;
+ public string DbConnectionString { get; set; } = null!;
public RetryOptions RetryOptions { get; set; } = new();
}
diff --git a/Modules/Files/src/Files.Infrastructure/Persistence/Database/Repository/FilesRepository.cs b/Modules/Files/src/Files.Infrastructure/Persistence/Database/Repository/FilesRepository.cs
index abb6ab6a9d..cb721aa6e3 100644
--- a/Modules/Files/src/Files.Infrastructure/Persistence/Database/Repository/FilesRepository.cs
+++ b/Modules/Files/src/Files.Infrastructure/Persistence/Database/Repository/FilesRepository.cs
@@ -38,7 +38,7 @@ public async Task Add(File file, CancellationToken cancellationToken)
}
- public async Task Find(FileId fileId, CancellationToken cancellationToken, bool track = false, bool fillContent = true)
+ public async Task Find(FileId fileId, CancellationToken cancellationToken, bool track = false, bool fillContent = true)
{
var file = await (track ? _files : _readOnlyFiles)
.WithId(fileId)
diff --git a/Modules/Files/src/Files.Infrastructure/Persistence/Database/ValueConverters/FileIdEntityFrameworkValueConverter.cs b/Modules/Files/src/Files.Infrastructure/Persistence/Database/ValueConverters/FileIdEntityFrameworkValueConverter.cs
index 4545be81d6..16ad39e10e 100644
--- a/Modules/Files/src/Files.Infrastructure/Persistence/Database/ValueConverters/FileIdEntityFrameworkValueConverter.cs
+++ b/Modules/Files/src/Files.Infrastructure/Persistence/Database/ValueConverters/FileIdEntityFrameworkValueConverter.cs
@@ -5,11 +5,11 @@ namespace Backbone.Modules.Files.Infrastructure.Persistence.Database.ValueConver
public class FileIdEntityFrameworkValueConverter : ValueConverter
{
- public FileIdEntityFrameworkValueConverter() : this(null) { }
+ public FileIdEntityFrameworkValueConverter() : this(new ConverterMappingHints()) { }
public FileIdEntityFrameworkValueConverter(ConverterMappingHints mappingHints)
: base(
- id => id == null ? null : id.StringValue,
+ id => id.StringValue,
value => FileId.Parse(value),
mappingHints
)
diff --git a/Modules/Files/src/Files.Infrastructure/Persistence/IServiceCollectionExtensions.cs b/Modules/Files/src/Files.Infrastructure/Persistence/IServiceCollectionExtensions.cs
index d47f5dbb6d..0d3847a883 100644
--- a/Modules/Files/src/Files.Infrastructure/Persistence/IServiceCollectionExtensions.cs
+++ b/Modules/Files/src/Files.Infrastructure/Persistence/IServiceCollectionExtensions.cs
@@ -11,7 +11,7 @@ public static class IServiceCollectionExtensions
public static void AddPersistence(this IServiceCollection services, Action setupOptions)
{
var options = new PersistenceOptions();
- setupOptions?.Invoke(options);
+ setupOptions.Invoke(options);
services.AddPersistence(options);
}
diff --git a/Modules/Files/src/Files.Jobs.SanityCheck/Files.Jobs.SanityCheck.csproj b/Modules/Files/src/Files.Jobs.SanityCheck/Files.Jobs.SanityCheck.csproj
index a338edbbc7..24463953d1 100644
--- a/Modules/Files/src/Files.Jobs.SanityCheck/Files.Jobs.SanityCheck.csproj
+++ b/Modules/Files/src/Files.Jobs.SanityCheck/Files.Jobs.SanityCheck.csproj
@@ -1,7 +1,6 @@
- dotnet-Files.Jobs.SanityCheck-9f22e8e4-eb64-498c-9599-b971e0419647
Linux
..\..\..\..
enable
diff --git a/Modules/Files/src/Files.Jobs.SanityCheck/Infrastructure/SanityCheck/SanityCheck.cs b/Modules/Files/src/Files.Jobs.SanityCheck/Infrastructure/SanityCheck/SanityCheck.cs
index 643a164e46..4a9b15b88d 100644
--- a/Modules/Files/src/Files.Jobs.SanityCheck/Infrastructure/SanityCheck/SanityCheck.cs
+++ b/Modules/Files/src/Files.Jobs.SanityCheck/Infrastructure/SanityCheck/SanityCheck.cs
@@ -15,6 +15,8 @@ public SanityCheck(IDataSource dataSource, IReporter reporter)
{
_dataSource = dataSource;
_reporter = reporter;
+ _databaseIds = [];
+ _blobIds = [];
}
public async Task Run(CancellationToken cancellationToken)
diff --git a/Modules/Files/src/Files.Jobs.SanityCheck/Worker.cs b/Modules/Files/src/Files.Jobs.SanityCheck/Worker.cs
index fab043f432..6c82448355 100644
--- a/Modules/Files/src/Files.Jobs.SanityCheck/Worker.cs
+++ b/Modules/Files/src/Files.Jobs.SanityCheck/Worker.cs
@@ -14,6 +14,10 @@ public Worker(IHostApplicationLifetime host, IServiceScopeFactory serviceScopeFa
{
_host = host;
_serviceScopeFactory = serviceScopeFactory;
+
+ // the following fields are initialized in StartAsync, which is always called before any other method
+ _dataSource = null!;
+ _reporter = null!;
}
public async Task StartAsync(CancellationToken cancellationToken)
@@ -33,7 +37,7 @@ public Task StopAsync(CancellationToken cancellationToken)
return Task.CompletedTask;
}
- public async Task RunSanityCheck(CancellationToken cancellationToken)
+ private async Task RunSanityCheck(CancellationToken cancellationToken)
{
var sanityCheck = new Infrastructure.SanityCheck.SanityCheck(_dataSource, _reporter);
diff --git a/Modules/Files/test/Files.Application.Tests/TestData.cs b/Modules/Files/test/Files.Application.Tests/TestData.cs
index 662d5415e2..98c2422125 100644
--- a/Modules/Files/test/Files.Application.Tests/TestData.cs
+++ b/Modules/Files/test/Files.Application.Tests/TestData.cs
@@ -31,9 +31,9 @@ public static class Devices
public static class Payloads
{
- public static readonly byte[] EMPTY = Array.Empty();
- public static readonly byte[] PAYLOAD_1 = { 1, 1, 1 };
- public static readonly byte[] PAYLOAD_2 = { 2, 2, 2 };
- public static readonly byte[] PAYLOAD_3 = { 3, 3, 3 };
+ public static readonly byte[] EMPTY = [];
+ public static readonly byte[] PAYLOAD_1 = [1, 1, 1];
+ public static readonly byte[] PAYLOAD_2 = [2, 2, 2];
+ public static readonly byte[] PAYLOAD_3 = [3, 3, 3];
}
}
diff --git a/Modules/Files/test/Files.Jobs.SanityCheck.Tests/Infrastructure/DataSource/FakeDataSource.cs b/Modules/Files/test/Files.Jobs.SanityCheck.Tests/Infrastructure/DataSource/FakeDataSource.cs
index 49907c2013..625a7e12a7 100644
--- a/Modules/Files/test/Files.Jobs.SanityCheck.Tests/Infrastructure/DataSource/FakeDataSource.cs
+++ b/Modules/Files/test/Files.Jobs.SanityCheck.Tests/Infrastructure/DataSource/FakeDataSource.cs
@@ -5,8 +5,8 @@ namespace Backbone.Modules.Files.Jobs.SanityCheck.Tests.Infrastructure.DataSourc
public class FakeDataSource : IDataSource
{
- public List DatabaseIds { get; } = new();
- public List BlobIds { get; } = new();
+ public List DatabaseIds { get; } = [];
+ public List BlobIds { get; } = [];
public Task> GetBlobIdsAsync(CancellationToken cancellationToken)
{