Skip to content

Commit

Permalink
Refactor of base classes and interfaces
Browse files Browse the repository at this point in the history
  • Loading branch information
danielmackay committed Jun 5, 2023
1 parent 3e565f7 commit f90bbee
Show file tree
Hide file tree
Showing 13 changed files with 57 additions and 45 deletions.
9 changes: 9 additions & 0 deletions src/Domain/Common/Base/AuditableEntity.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace SSW.CleanArchitecture.Domain.Common.Base;

public abstract class AuditableEntity
{
public DateTimeOffset CreatedAt { get; set; }
public string? CreatedBy { get; set; }
public DateTimeOffset? UpdatedAt { get; set; }
public string? UpdatedBy { get; set; }
}
20 changes: 20 additions & 0 deletions src/Domain/Common/Base/BaseEntity.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using SSW.CleanArchitecture.Domain.Common.Interfaces;
using System.ComponentModel.DataAnnotations.Schema;

namespace SSW.CleanArchitecture.Domain.Common.Base;

public abstract class BaseEntity<TId> : AuditableEntity, IDomainEvents
{
private readonly List<DomainEvent> _domainEvents = new();

public TId Id { get; set; } = default!;

[NotMapped]
public IReadOnlyList<DomainEvent> DomainEvents => _domainEvents.AsReadOnly();

public void AddDomainEvent(DomainEvent domainEvent) => _domainEvents.Add(domainEvent);

public void RemoveDomainEvent(DomainEvent domainEvent) => _domainEvents.Remove(domainEvent);

public void ClearDomainEvents() => _domainEvents.Clear();
}
5 changes: 5 additions & 0 deletions src/Domain/Common/Base/DomainEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
using MediatR;

namespace SSW.CleanArchitecture.Domain.Common.Base;

public record DomainEvent : INotification;
19 changes: 0 additions & 19 deletions src/Domain/Common/BaseEntity.cs

This file was deleted.

5 changes: 0 additions & 5 deletions src/Domain/Common/BaseEvent.cs

This file was deleted.

12 changes: 0 additions & 12 deletions src/Domain/Common/IDomainEvents.cs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace SSW.CleanArchitecture.Domain.Common;
namespace SSW.CleanArchitecture.Domain.Common.Interfaces;

public abstract class AuditableEntity
public interface IAuditableEntity
{
public DateTimeOffset CreatedAt { get; set; }
public string? CreatedBy { get; set; } // TODO: String as userId? (https://github.com/SSWConsulting/SSW.CleanArchitecture/issues/76)
Expand Down
14 changes: 14 additions & 0 deletions src/Domain/Common/Interfaces/IDomainEvents.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using SSW.CleanArchitecture.Domain.Common.Base;

namespace SSW.CleanArchitecture.Domain.Common.Interfaces;

public interface IDomainEvents
{
IReadOnlyList<DomainEvent> DomainEvents { get; }

void AddDomainEvent(DomainEvent domainEvent);

void RemoveDomainEvent(DomainEvent domainEvent);

void ClearDomainEvents();
}
2 changes: 1 addition & 1 deletion src/Domain/Entities/TodoItem.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using SSW.CleanArchitecture.Domain.Common;
using SSW.CleanArchitecture.Domain.Common.Base;
using SSW.CleanArchitecture.Domain.Enum;

namespace SSW.CleanArchitecture.Domain.Entities;
Expand Down
4 changes: 2 additions & 2 deletions src/Domain/Events/TodoItemCreatedEvent.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using SSW.CleanArchitecture.Domain.Common;
using SSW.CleanArchitecture.Domain.Common.Base;
using SSW.CleanArchitecture.Domain.Entities;

namespace SSW.CleanArchitecture.Domain.Events;

public record TodoItemCreatedEvent(TodoItem Item) : BaseEvent;
public record TodoItemCreatedEvent(TodoItem Item) : DomainEvent;
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using MediatR;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using SSW.CleanArchitecture.Domain.Common;
using SSW.CleanArchitecture.Domain.Common.Interfaces;

namespace SSW.CleanArchitecture.Infrastructure.Persistence.Interceptors;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.Diagnostics;
using SSW.CleanArchitecture.Application.Common.Interfaces;
using SSW.CleanArchitecture.Domain.Common;
using SSW.CleanArchitecture.Domain.Common.Interfaces;

namespace SSW.CleanArchitecture.Infrastructure.Persistence.Interceptors;

Expand Down Expand Up @@ -36,7 +36,7 @@ public void UpdateEntities(DbContext? context)
if (context is null)
return;

foreach (var entry in context.ChangeTracker.Entries<AuditableEntity>())
foreach (var entry in context.ChangeTracker.Entries<IAuditableEntity>())
if (entry.State is EntityState.Added)
{
entry.Entity.CreatedAt = _dateTime.Now;
Expand Down
2 changes: 1 addition & 1 deletion tests/Architecture.Tests/DatabaseEntitiesTest.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using FluentAssertions;
using Microsoft.EntityFrameworkCore;
using NetArchTest.Rules;
using SSW.CleanArchitecture.Domain.Common;
using SSW.CleanArchitecture.Domain.Common.Base;
using SSW.CleanArchitecture.Infrastructure;

namespace SSW.CleanArchitecture.Architecture.UnitTests;
Expand Down

0 comments on commit f90bbee

Please sign in to comment.