Skip to content

Commit

Permalink
Fix compiler warnings related to nullability in Messages module (#502)
Browse files Browse the repository at this point in the history
* chore: add nullable enable property group

* chore: fix formatting issues

* refactor: wip

* refactor: wip

* fix: revert to fix admin UI Checks

* refactor: declare properties as nullable

* refactor: fix non-nullable property for Body

* fix: compile error

* fix: formatting

* refactor: fix non-nullable propert for EncryptedKey

* refactor: fix non-nullable property for Id

* refactor: declared queueName as nullable

* refactor: solve non-nullable property for MessageDTO

* refactor: declare properties for DbOptions nullable

* refactor: add nullable

* chore: remove empty line

* refactor: make Address and EncryptedKey required

* refactor: make Id required

* refactor: remove null suppression for Id

* refactor: remove null check for EncryptedKey since it is required

* refactor: remove redundant ! operator

* refactor: make MessageId required

* refactor: make Id required

* refactor: make MessageId required

* refactor: make CreatedBy required

* refactor: make CreatedByDevice required

* refactor: make Body required

* refactor: make Attachments required

* refactor: make Recipients required

* refactor: make Address required

* refactor: make EncryptedKey required

* chore: move property group to the top of the file

* refactor: make Id required

* refactor: set From and To to default!

* refactor: initialize Provider and DbConnectionnString with null!

* refactor: make Body required and remove null check

* refactor: remove redundant ! operator

* refactor: remove When check since the expression is always true

* refactor: remove nullable and redundant ! since it doesn't cause an issue

* refactor: add extra logic on HasFrom and HasTo

* refactor: suppress the null warning

* refactor: apply only Equals

* ci: trigger pipelines

* chore: fix nullability issues

* chore: remove unused setter

* chore: add comments for ef core constructors

* chore: add comments to ef core constructor

* chore: make GetMessageQuery.NoBody required

* chore: enable nullable for Messags.Application.Tests

* chore: remove redundant using directives

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Co-authored-by: Timo Notheisen <timo.notheisen@js-soft.com>
  • Loading branch information
4 people authored Feb 19, 2024
1 parent c05730c commit e616965
Show file tree
Hide file tree
Showing 32 changed files with 117 additions and 93 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace Backbone.Modules.Messages.Application.Extensions;

public static class RecipientInformationICollectionExtensions
{
public static RecipientInformation FirstWithIdOrDefault(this IReadOnlyCollection<RecipientInformation> query, IdentityAddress address)
public static RecipientInformation? FirstWithIdOrDefault(this IReadOnlyCollection<RecipientInformation> query, IdentityAddress address)
{
return query.FirstOrDefault(r => r.Address == address);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Backbone.Modules.Messages.Application.Infrastructure.EventBus;

public interface IMessagesEventBus : IEventBus
{
}
public interface IMessagesEventBus : IEventBus;
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

public class BlobOptions
{
public string RootFolder { get; set; }
public string? RootFolder { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

namespace Backbone.Modules.Messages.Application.Infrastructure.Persistence.Repository;

#nullable enable
public interface IRelationshipsRepository
{
Task<RelationshipId?> GetIdOfRelationshipBetweenSenderAndRecipient(IdentityAddress identityA, IdentityAddress identityB);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="11.9.0" />
</ItemGroup>
Expand All @@ -9,4 +13,5 @@
<ProjectReference Include="..\..\..\..\BuildingBlocks\src\BuildingBlocks.Application\BuildingBlocks.Application.csproj" />
<ProjectReference Include="..\Messages.Domain\Messages.Domain.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@ public class SendMessageCommand : IRequest<SendMessageResponse>
{
public ICollection<SendMessageCommandRecipientInformation> Recipients { get; set; } = new List<SendMessageCommandRecipientInformation>();
public DateTime? DoNotSendBefore { get; set; }
public byte[] Body { get; set; }
public required byte[] Body { get; set; }
public ICollection<SendMessageCommandAttachment> Attachments { get; set; } = new List<SendMessageCommandAttachment>();
}

public class SendMessageCommandRecipientInformation
{
public IdentityAddress Address { get; set; }
public byte[] EncryptedKey { get; set; }
public required IdentityAddress Address { get; set; }
public required byte[] EncryptedKey { get; set; }
}

public class SendMessageCommandAttachment
{
public string Id { get; set; }
public required string Id { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public SendMessageCommandValidator()
.SetValidator(new SendMessageCommandRecipientInformationValidator()));

RuleFor(m => m.Recipients.Count)
.InclusiveBetween(1, 50).When(m => m.Recipients != null).WithErrorCode(GenericApplicationErrors.Validation.InvalidPropertyValue().Code);
.InclusiveBetween(1, 50).WithErrorCode(GenericApplicationErrors.Validation.InvalidPropertyValue().Code);

RuleFor(m => m.Body).DetailedNotNull().NumberOfBytes(1, 10.Mebibytes());

Expand All @@ -29,7 +29,7 @@ public SendMessageCommandValidator()
.SetValidator(new SendMessageCommandAttachmentValidator()));

RuleFor(m => m.Attachments.Count)
.InclusiveBetween(0, 20).When(m => m.Attachments != null).WithErrorCode(GenericApplicationErrors.Validation.InvalidPropertyValue().Code);
.InclusiveBetween(0, 20).WithErrorCode(GenericApplicationErrors.Validation.InvalidPropertyValue().Code);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ namespace Backbone.Modules.Messages.Application.Messages.Commands.SendMessage;

public class SendMessageResponse : IMapTo<Message>
{
public MessageId Id { get; set; }
public DateTime CreatedAt { get; set; }
public required MessageId Id { get; set; }
public required DateTime CreatedAt { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ namespace Backbone.Modules.Messages.Application.Messages.DTOs;

public class AttachmentDTO : IMapTo<Attachment>
{
public string Id { get; set; }
public required string Id { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@ namespace Backbone.Modules.Messages.Application.Messages.DTOs;

public class MessageDTO : IMapTo<Message>
{
public MessageId Id { get; set; }
public required MessageId 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? DoNotSendBefore { get; set; }
public byte[] Body { get; set; }
public required byte[] Body { get; set; }

public List<AttachmentDTO> Attachments { get; set; }
public List<RecipientInformationDTO> Recipients { get; set; }
public required List<AttachmentDTO> Attachments { get; set; }
public required List<RecipientInformationDTO> Recipients { get; set; }

public void PrepareForActiveIdentity(IdentityAddress activeIdentity)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ namespace Backbone.Modules.Messages.Application.Messages.DTOs;

public class RecipientInformationDTO : IMapTo<RecipientInformation>
{
public IdentityAddress Address { get; set; }
public byte[] EncryptedKey { get; set; }
public required IdentityAddress Address { get; set; }
public required byte[] EncryptedKey { get; set; }
public DateTime? ReceivedAt { get; set; }
public DeviceId ReceivedByDevice { get; set; }
public DeviceId? ReceivedByDevice { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ namespace Backbone.Modules.Messages.Application.Messages.Queries.GetMessage;

public class GetMessageQuery : IRequest<MessageDTO>
{
public MessageId Id { get; init; }
public bool NoBody { get; init; }
public required MessageId Id { get; init; }
public required bool NoBody { get; init; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,4 @@
namespace Backbone.Modules.Messages.Application.Messages.Queries.ListMessages;

// ReSharper disable once UnusedMember.Global
public class ListMessagesQueryValidator : AbstractValidator<ListMessagesQuery>
{
public ListMessagesQueryValidator() { }
}
public class ListMessagesQueryValidator : AbstractValidator<ListMessagesQuery>;
12 changes: 8 additions & 4 deletions Modules/Messages/src/Messages.Common/Messages.Common.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<ItemGroup>
<PackageReference Include="FluentValidation" Version="11.9.0" />
</ItemGroup>
<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FluentValidation" Version="11.9.0" />
</ItemGroup>

</Project>
8 changes: 4 additions & 4 deletions Modules/Messages/src/Messages.Common/Range.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@ public Range(T from, T to)
To = to;
}

public T From { get; set; }
public T To { get; set; }
public T From { get; set; } = default!;
public T To { get; set; } = default!;

public bool HasFrom()
{
return !From.Equals(default(T));
return Equals(From, default(T));
}

public bool HasTo()
{
return !To.Equals(default(T));
return Equals(To, default(T));
}
}

Expand Down
4 changes: 1 addition & 3 deletions Modules/Messages/src/Messages.Domain/Entities/Attachment.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,12 @@ namespace Backbone.Modules.Messages.Domain.Entities;

public class Attachment
{
#pragma warning disable CS8618
public Attachment(FileId id)
#pragma warning restore CS8618
{
Id = id;
MessageId = null!; // we just assign null to satisfy the compiler; it will be set by EF Core
}

public FileId Id { get; set; }
public MessageId MessageId { get; set; }
public Message Message { get; set; }
}
14 changes: 11 additions & 3 deletions Modules/Messages/src/Messages.Domain/Entities/Message.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,17 @@ namespace Backbone.Modules.Messages.Domain.Entities;

public class Message : IIdentifiable<MessageId>
{
#pragma warning disable CS8618
private Message() { }
#pragma warning restore CS8618
// ReSharper disable once UnusedMember.Local
private Message()
{
// This constructor is for EF Core only; initializing the properties with null is therefore not a problem
Id = null!;
CreatedBy = null!;
CreatedByDevice = null!;
Body = null!;
Attachments = null!;
Recipients = null!;
}

public Message(IdentityAddress createdBy, DeviceId createdByDevice, DateTime? doNotSendBefore, byte[] body, IEnumerable<Attachment> attachments, IEnumerable<RecipientInformation> recipients)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,22 @@ namespace Backbone.Modules.Messages.Domain.Entities;

public class RecipientInformation
{
#pragma warning disable CS8618
private RecipientInformation() { }
#pragma warning restore CS8618
// ReSharper disable once UnusedMember.Local
private RecipientInformation()
{
// This constructor is for EF Core only; initializing the properties with null is therefore not a problem
Address = null!;
EncryptedKey = null!;
RelationshipId = null!;
MessageId = null!;
}

#pragma warning disable CS8618
public RecipientInformation(IdentityAddress address, RelationshipId relationshipId, byte[] encryptedKey)
#pragma warning restore CS8618
{
Address = address;
RelationshipId = relationshipId;
EncryptedKey = encryptedKey;
MessageId = null!; // we just assign null to satisfy the compiler; it will be set by EF Core
}

public IdentityAddress Address { get; }
Expand All @@ -28,10 +33,9 @@ public RecipientInformation(IdentityAddress address, RelationshipId relationship

public void FetchedMessage(DeviceId fetchedByDevice)
{
if (!ReceivedAt.HasValue)
{
ReceivedAt = SystemTime.UtcNow;
ReceivedByDevice = fetchedByDevice;
}
if (ReceivedAt.HasValue) return;

ReceivedAt = SystemTime.UtcNow;
ReceivedByDevice = fetchedByDevice;
}
}
15 changes: 11 additions & 4 deletions Modules/Messages/src/Messages.Domain/Entities/Relationship.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,16 @@ namespace Backbone.Modules.Messages.Domain.Entities;

public class Relationship
{
#pragma warning disable CS8618
private Relationship() { }
#pragma warning restore CS8618
// ReSharper disable once UnusedMember.Local
private Relationship()
{
// This constructor is for EF Core only; initializing the properties with null is therefore not a problem
Id = null!;
From = null!;
To = null!;
CreatedAt = default;
Status = default;
}

public RelationshipId Id { get; }

Expand All @@ -16,7 +23,7 @@ private Relationship() { }

public DateTime CreatedAt { get; }

public RelationshipStatus Status { get; private set; }
public RelationshipStatus Status { get; }
}

public enum RelationshipStatus
Expand Down
8 changes: 4 additions & 4 deletions Modules/Messages/src/Messages.Domain/Messages.Domain.csproj
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\BuildingBlocks\src\DevelopmentKit.Identity\DevelopmentKit.Identity.csproj" />
<ProjectReference Include="..\..\..\..\BuildingBlocks\src\Tooling\Tooling.csproj" />
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Messages.Infrastructure\Messages.Infrastructure.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Messages.Infrastructure\Messages.Infrastructure.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Messages.Infrastructure\Messages.Infrastructure.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Messages.Infrastructure\Messages.Infrastructure.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
namespace Backbone.Modules.Messages.Infrastructure.EventBus;
public class MessagesEventBusRabbitMq : EventBusRabbitMq, IMessagesEventBus
{
public MessagesEventBusRabbitMq(IRabbitMqPersistentConnection persistentConnection, ILogger<EventBusRabbitMq> logger, ILifetimeScope autofac, IEventBusSubscriptionsManager subsManager, HandlerRetryBehavior handlerRetryBehavior, string queueName = null) : base(persistentConnection, logger, autofac, subsManager, handlerRetryBehavior, queueName)
public MessagesEventBusRabbitMq(IRabbitMqPersistentConnection persistentConnection, ILogger<EventBusRabbitMq> logger, ILifetimeScope autofac, IEventBusSubscriptionsManager subsManager, HandlerRetryBehavior handlerRetryBehavior, string? queueName = null) : base(persistentConnection, logger, autofac, subsManager, handlerRetryBehavior, queueName)
{
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.1" />
Expand All @@ -12,4 +16,5 @@
<ProjectReference Include="..\Messages.Application\Messages.Application.csproj" />
<ProjectReference Include="..\Messages.Domain\Messages.Domain.csproj" />
</ItemGroup>

</Project>
Loading

0 comments on commit e616965

Please sign in to comment.