From b027db4da57df77bf6689dc3c9846c30e63d8bea Mon Sep 17 00:00:00 2001 From: Rick van Dam Date: Thu, 9 May 2024 21:40:06 +0200 Subject: [PATCH] change base class Entity to a interface IEntity --- CleanAspCore.Api.Tests/Data/EntityTests.cs | 79 ------------------- .../Data/Extensions/DbSetExtensions.cs | 2 +- CleanAspCore/Data/Models/Department.cs | 4 +- CleanAspCore/Data/Models/Employee.cs | 3 +- CleanAspCore/Data/Models/Entity.cs | 35 -------- CleanAspCore/Data/Models/IEntity.cs | 6 ++ CleanAspCore/Data/Models/Job.cs | 3 +- .../FluentValidationExtensions.cs | 2 +- 8 files changed, 15 insertions(+), 119 deletions(-) delete mode 100644 CleanAspCore.Api.Tests/Data/EntityTests.cs delete mode 100644 CleanAspCore/Data/Models/Entity.cs create mode 100644 CleanAspCore/Data/Models/IEntity.cs diff --git a/CleanAspCore.Api.Tests/Data/EntityTests.cs b/CleanAspCore.Api.Tests/Data/EntityTests.cs deleted file mode 100644 index 198e778..0000000 --- a/CleanAspCore.Api.Tests/Data/EntityTests.cs +++ /dev/null @@ -1,79 +0,0 @@ -using CleanAspCore.Data.Models; - -namespace CleanAspCore.Api.Tests.Data; - -public class EntityTests -{ - private sealed class TestEntity : Entity; - - [Test] - public void EntityWithDifferentId_OpEqual_ReturnsFalse() - { - var entity1 = new TestEntity { Id = Guid.NewGuid() }; - var entity2 = new TestEntity { Id = Guid.NewGuid() }; - - (entity1 == entity2).Should().BeFalse(); - } - - [Test] - public void EntityWithSameId_OpEqual_ReturnsTrue() - { - var id = Guid.NewGuid(); - var entity1 = new TestEntity { Id = id }; - var entity2 = new TestEntity { Id = id }; - - (entity1 == entity2).Should().BeTrue(); - } - - [Test] - public void EntitySameInstance_OpEqual_ReturnsTrue() - { - var id = Guid.NewGuid(); - var entity1 = new TestEntity { Id = id }; - var entity2 = entity1; - - (entity1 == entity2).Should().BeTrue(); - } - - [Test] - public void EntityAndNull_OpEqual_ReturnsFalse() - { - var entity1 = new TestEntity { Id = Guid.NewGuid() }; - TestEntity entity2 = null!; - -#pragma warning disable CA1508 - (entity1 == entity2).Should().BeFalse(); -#pragma warning restore CA1508 - } - - [Test] - public void NullAndNull_OpEqual_ReturnsTrue() - { - TestEntity entity1 = null!; - TestEntity entity2 = null!; - -#pragma warning disable CA1508 - (entity1 == entity2).Should().BeTrue(); -#pragma warning restore CA1508 - } - - [Test] - public void EntityWithDifferentId_OpNotEqual_ReturnsFalse() - { - var entity1 = new TestEntity { Id = Guid.NewGuid() }; - var entity2 = new TestEntity { Id = Guid.NewGuid() }; - - (entity1 != entity2).Should().BeTrue(); - } - - [Test] - public void EntityWithSameId_OpNotEqual_ReturnsTrue() - { - var id = Guid.NewGuid(); - var entity1 = new TestEntity { Id = id }; - var entity2 = new TestEntity { Id = id }; - - (entity1 != entity2).Should().BeFalse(); - } -} - diff --git a/CleanAspCore/Data/Extensions/DbSetExtensions.cs b/CleanAspCore/Data/Extensions/DbSetExtensions.cs index f128396..e9166ce 100644 --- a/CleanAspCore/Data/Extensions/DbSetExtensions.cs +++ b/CleanAspCore/Data/Extensions/DbSetExtensions.cs @@ -7,7 +7,7 @@ namespace CleanAspCore.Data.Extensions; public static class DbSetExtensions { public static EntityEntry? AddIfNotExists(this DbSet dbSet, T entity) - where T : Entity + where T : class, IEntity { return !dbSet.Any(x => x.Id == entity.Id) ? dbSet.Add(entity) : null; } diff --git a/CleanAspCore/Data/Models/Department.cs b/CleanAspCore/Data/Models/Department.cs index 38520d6..5e32c23 100644 --- a/CleanAspCore/Data/Models/Department.cs +++ b/CleanAspCore/Data/Models/Department.cs @@ -1,7 +1,9 @@ namespace CleanAspCore.Data.Models; -public class Department : Entity +public class Department : IEntity { + public required Guid Id { get; init; } public required string Name { get; init; } public required string City { get; init; } + } diff --git a/CleanAspCore/Data/Models/Employee.cs b/CleanAspCore/Data/Models/Employee.cs index c345db7..30114a3 100644 --- a/CleanAspCore/Data/Models/Employee.cs +++ b/CleanAspCore/Data/Models/Employee.cs @@ -1,7 +1,8 @@ namespace CleanAspCore.Data.Models; -public class Employee : Entity +public class Employee : IEntity { + public required Guid Id { get; init; } public required string FirstName { get; set; } public required string LastName { get; set; } public required EmailAddress Email { get; set; } diff --git a/CleanAspCore/Data/Models/Entity.cs b/CleanAspCore/Data/Models/Entity.cs deleted file mode 100644 index 4309fcf..0000000 --- a/CleanAspCore/Data/Models/Entity.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace CleanAspCore.Data.Models; - -public abstract class Entity -{ - public required Guid Id { get; init; } - - public override bool Equals(object? obj) - { - if (obj is not Entity other) - return false; - - if (ReferenceEquals(this, other)) - return true; - - return Id.Equals(other.Id); - } - - public static bool operator ==(Entity? a, Entity? b) - { - if (a is null && b is null) - return true; - - if (a is null || b is null) - return false; - - return a.Equals(b); - } - - public static bool operator !=(Entity? a, Entity? b) - { - return !(a == b); - } - - public override int GetHashCode() => Id.GetHashCode(); -} diff --git a/CleanAspCore/Data/Models/IEntity.cs b/CleanAspCore/Data/Models/IEntity.cs new file mode 100644 index 0000000..dcd5904 --- /dev/null +++ b/CleanAspCore/Data/Models/IEntity.cs @@ -0,0 +1,6 @@ +namespace CleanAspCore.Data.Models; + +public interface IEntity +{ + public Guid Id { get; init; } +} diff --git a/CleanAspCore/Data/Models/Job.cs b/CleanAspCore/Data/Models/Job.cs index d47ba5d..34d9b10 100644 --- a/CleanAspCore/Data/Models/Job.cs +++ b/CleanAspCore/Data/Models/Job.cs @@ -1,6 +1,7 @@ namespace CleanAspCore.Data.Models; -public class Job : Entity +public class Job : IEntity { + public required Guid Id { get; init; } public required string Name { get; set; } } diff --git a/CleanAspCore/Extensions/FluentValidation/FluentValidationExtensions.cs b/CleanAspCore/Extensions/FluentValidation/FluentValidationExtensions.cs index 8dcb847..32e8a3e 100644 --- a/CleanAspCore/Extensions/FluentValidation/FluentValidationExtensions.cs +++ b/CleanAspCore/Extensions/FluentValidation/FluentValidationExtensions.cs @@ -8,7 +8,7 @@ namespace CleanAspCore.Extensions.FluentValidation; public static class FluentValidationExtensions { public static IRuleBuilderOptions EntityShouldExist(this IRuleBuilder rule, DbSet entities) - where TEntity : Entity => + where TEntity : class, IEntity => rule.MustAsync((id, t) => entities.AnyAsync(y => y.Id == id, t)) .WithMessage((x, y) => $"{typeof(TEntity).Name} with id {y} does not exist.");