diff --git a/CleanArchitecture.Api/CleanArchitecture.Api.csproj b/CleanArchitecture.Api/CleanArchitecture.Api.csproj
index 46e1257..ca184ec 100644
--- a/CleanArchitecture.Api/CleanArchitecture.Api.csproj
+++ b/CleanArchitecture.Api/CleanArchitecture.Api.csproj
@@ -7,26 +7,26 @@
-
-
-
-
-
+
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
diff --git a/CleanArchitecture.Api/Controllers/TenantController.cs b/CleanArchitecture.Api/Controllers/TenantController.cs
index 639e2c8..0576122 100644
--- a/CleanArchitecture.Api/Controllers/TenantController.cs
+++ b/CleanArchitecture.Api/Controllers/TenantController.cs
@@ -18,14 +18,14 @@ namespace CleanArchitecture.Api.Controllers;
public sealed class TenantController : ApiController
{
private readonly ITenantService _tenantService;
-
+
public TenantController(
INotificationHandler notifications,
ITenantService tenantService) : base(notifications)
{
_tenantService = tenantService;
}
-
+
[HttpGet]
[SwaggerOperation("Get a list of all tenants")]
[SwaggerResponse(200, "Request successful", typeof(ResponseMessage>))]
@@ -34,7 +34,7 @@ public sealed class TenantController : ApiController
var tenants = await _tenantService.GetAllTenantsAsync();
return Response(tenants);
}
-
+
[HttpGet("{id:guid}")]
[SwaggerOperation("Get a tenant by id")]
[SwaggerResponse(200, "Request successful", typeof(ResponseMessage))]
@@ -45,7 +45,7 @@ public sealed class TenantController : ApiController
var tenant = await _tenantService.GetTenantByIdAsync(id, isDeleted);
return Response(tenant);
}
-
+
[HttpPost]
[SwaggerOperation("Create a new tenant")]
[SwaggerResponse(200, "Request successful", typeof(ResponseMessage))]
@@ -54,7 +54,7 @@ public sealed class TenantController : ApiController
var tenantId = await _tenantService.CreateTenantAsync(tenant);
return Response(tenantId);
}
-
+
[HttpPut]
[SwaggerOperation("Update an existing tenant")]
[SwaggerResponse(200, "Request successful", typeof(ResponseMessage))]
@@ -63,7 +63,7 @@ public sealed class TenantController : ApiController
await _tenantService.UpdateTenantAsync(tenant);
return Response(tenant);
}
-
+
[HttpDelete("{id:guid}")]
[SwaggerOperation("Delete an existing tenant")]
[SwaggerResponse(200, "Request successful", typeof(ResponseMessage))]
diff --git a/CleanArchitecture.Api/Extensions/ServiceCollectionExtension.cs b/CleanArchitecture.Api/Extensions/ServiceCollectionExtension.cs
index a71b3ed..7224bcc 100644
--- a/CleanArchitecture.Api/Extensions/ServiceCollectionExtension.cs
+++ b/CleanArchitecture.Api/Extensions/ServiceCollectionExtension.cs
@@ -60,9 +60,12 @@ public static class ServiceCollectionExtension
services.AddHttpContextAccessor();
services.AddAuthentication(
- options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; })
+ options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; })
.AddJwtBearer(
- jwtOptions => { jwtOptions.TokenValidationParameters = CreateTokenValidationParameters(configuration); });
+ jwtOptions =>
+ {
+ jwtOptions.TokenValidationParameters = CreateTokenValidationParameters(configuration);
+ });
services
.AddOptions()
@@ -90,4 +93,4 @@ public static class ServiceCollectionExtension
return result;
}
-}
+}
\ No newline at end of file
diff --git a/CleanArchitecture.Api/Models/DetailedError.cs b/CleanArchitecture.Api/Models/DetailedError.cs
index a4f3bd7..f7a1fed 100644
--- a/CleanArchitecture.Api/Models/DetailedError.cs
+++ b/CleanArchitecture.Api/Models/DetailedError.cs
@@ -4,9 +4,7 @@ namespace CleanArchitecture.Api.Models;
public sealed class DetailedError
{
- [JsonPropertyName("code")]
- public string Code { get; init; } = string.Empty;
+ [JsonPropertyName("code")] public string Code { get; init; } = string.Empty;
- [JsonPropertyName("data")]
- public object? Data { get; init; }
+ [JsonPropertyName("data")] public object? Data { get; init; }
}
\ No newline at end of file
diff --git a/CleanArchitecture.Api/Models/ResponseMessage.cs b/CleanArchitecture.Api/Models/ResponseMessage.cs
index e425f55..2f971bd 100644
--- a/CleanArchitecture.Api/Models/ResponseMessage.cs
+++ b/CleanArchitecture.Api/Models/ResponseMessage.cs
@@ -6,15 +6,12 @@ namespace CleanArchitecture.Api.Models;
public sealed class ResponseMessage
{
- [JsonPropertyName("success")]
- public bool Success { get; init; }
+ [JsonPropertyName("success")] public bool Success { get; init; }
- [JsonPropertyName("errors")]
- public IEnumerable? Errors { get; init; }
+ [JsonPropertyName("errors")] public IEnumerable? Errors { get; init; }
[JsonPropertyName("detailedErrors")]
public IEnumerable DetailedErrors { get; init; } = Enumerable.Empty();
- [JsonPropertyName("data")]
- public T? Data { get; init; }
+ [JsonPropertyName("data")] public T? Data { get; init; }
}
\ No newline at end of file
diff --git a/CleanArchitecture.Api/Program.cs b/CleanArchitecture.Api/Program.cs
index f940491..b9819e7 100644
--- a/CleanArchitecture.Api/Program.cs
+++ b/CleanArchitecture.Api/Program.cs
@@ -61,9 +61,9 @@ var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
- ApplicationDbContext appDbContext = services.GetRequiredService();
- EventStoreDbContext storeDbContext = services.GetRequiredService();
- DomainNotificationStoreDbContext domainStoreDbContext = services.GetRequiredService();
+ var appDbContext = services.GetRequiredService();
+ var storeDbContext = services.GetRequiredService();
+ var domainStoreDbContext = services.GetRequiredService();
appDbContext.EnsureMigrationsApplied();
diff --git a/CleanArchitecture.Application.Tests/CleanArchitecture.Application.Tests.csproj b/CleanArchitecture.Application.Tests/CleanArchitecture.Application.Tests.csproj
index 225be5b..6f2f43b 100644
--- a/CleanArchitecture.Application.Tests/CleanArchitecture.Application.Tests.csproj
+++ b/CleanArchitecture.Application.Tests/CleanArchitecture.Application.Tests.csproj
@@ -8,11 +8,11 @@
-
-
-
-
-
+
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
@@ -24,8 +24,8 @@
-
-
+
+
diff --git a/CleanArchitecture.Application.Tests/Fixtures/Queries/QueryHandlerBaseFixture.cs b/CleanArchitecture.Application.Tests/Fixtures/Queries/QueryHandlerBaseFixture.cs
index 63c7502..d04b652 100644
--- a/CleanArchitecture.Application.Tests/Fixtures/Queries/QueryHandlerBaseFixture.cs
+++ b/CleanArchitecture.Application.Tests/Fixtures/Queries/QueryHandlerBaseFixture.cs
@@ -11,9 +11,9 @@ public class QueryHandlerBaseFixture
public QueryHandlerBaseFixture VerifyExistingNotification(string key, string errorCode, string message)
{
Bus.Received(1).RaiseEventAsync(Arg.Is(notification =>
- notification.Key == key &&
- notification.Code == errorCode &&
- notification.Value == message));
+ notification.Key == key &&
+ notification.Code == errorCode &&
+ notification.Value == message));
return this;
}
diff --git a/CleanArchitecture.Application.Tests/Fixtures/Queries/Tenants/GetAllTenantsTestFixture.cs b/CleanArchitecture.Application.Tests/Fixtures/Queries/Tenants/GetAllTenantsTestFixture.cs
index 90763e6..ef21f15 100644
--- a/CleanArchitecture.Application.Tests/Fixtures/Queries/Tenants/GetAllTenantsTestFixture.cs
+++ b/CleanArchitecture.Application.Tests/Fixtures/Queries/Tenants/GetAllTenantsTestFixture.cs
@@ -10,16 +10,16 @@ namespace CleanArchitecture.Application.Tests.Fixtures.Queries.Tenants;
public sealed class GetAllTenantsTestFixture : QueryHandlerBaseFixture
{
- public GetAllTenantsQueryHandler QueryHandler { get; }
- private ITenantRepository TenantRepository { get; }
-
public GetAllTenantsTestFixture()
{
TenantRepository = Substitute.For();
-
- QueryHandler = new(TenantRepository);
+
+ QueryHandler = new GetAllTenantsQueryHandler(TenantRepository);
}
-
+
+ public GetAllTenantsQueryHandler QueryHandler { get; }
+ private ITenantRepository TenantRepository { get; }
+
public Tenant SetupTenant(bool deleted = false)
{
var tenant = new Tenant(Guid.NewGuid(), "Tenant 1");
@@ -31,7 +31,7 @@ public sealed class GetAllTenantsTestFixture : QueryHandlerBaseFixture
var tenantList = new List { tenant }.BuildMock();
TenantRepository.GetAllNoTracking().Returns(tenantList);
-
+
return tenant;
}
}
\ No newline at end of file
diff --git a/CleanArchitecture.Application.Tests/Fixtures/Queries/Tenants/GetTenantByIdTestFixture.cs b/CleanArchitecture.Application.Tests/Fixtures/Queries/Tenants/GetTenantByIdTestFixture.cs
index 4ba31ef..ac12b58 100644
--- a/CleanArchitecture.Application.Tests/Fixtures/Queries/Tenants/GetTenantByIdTestFixture.cs
+++ b/CleanArchitecture.Application.Tests/Fixtures/Queries/Tenants/GetTenantByIdTestFixture.cs
@@ -10,18 +10,18 @@ namespace CleanArchitecture.Application.Tests.Fixtures.Queries.Tenants;
public sealed class GetTenantByIdTestFixture : QueryHandlerBaseFixture
{
- public GetTenantByIdQueryHandler QueryHandler { get; }
- private ITenantRepository TenantRepository { get; }
-
public GetTenantByIdTestFixture()
{
TenantRepository = Substitute.For();
-
- QueryHandler = new(
+
+ QueryHandler = new GetTenantByIdQueryHandler(
TenantRepository,
Bus);
}
+ public GetTenantByIdQueryHandler QueryHandler { get; }
+ private ITenantRepository TenantRepository { get; }
+
public Tenant SetupTenant(bool deleted = false)
{
var tenant = new Tenant(Guid.NewGuid(), "Tenant 1");
@@ -33,7 +33,7 @@ public sealed class GetTenantByIdTestFixture : QueryHandlerBaseFixture
var tenantList = new List { tenant }.BuildMock();
TenantRepository.GetAllNoTracking().Returns(tenantList);
-
+
return tenant;
}
}
\ No newline at end of file
diff --git a/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetAllUsersTestFixture.cs b/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetAllUsersTestFixture.cs
index 027e8ff..efdabee 100644
--- a/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetAllUsersTestFixture.cs
+++ b/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetAllUsersTestFixture.cs
@@ -24,13 +24,13 @@ public sealed class GetAllUsersTestFixture : QueryHandlerBaseFixture
public void SetupUserAsync()
{
var user = new User(
- ExistingUserId,
- Guid.NewGuid(),
- "max@mustermann.com",
- "Max",
- "Mustermann",
- "Password",
- UserRole.User);
+ ExistingUserId,
+ Guid.NewGuid(),
+ "max@mustermann.com",
+ "Max",
+ "Mustermann",
+ "Password",
+ UserRole.User);
var query = new[] { user }.BuildMock();
@@ -40,13 +40,13 @@ public sealed class GetAllUsersTestFixture : QueryHandlerBaseFixture
public void SetupDeletedUserAsync()
{
var user = new User(
- ExistingUserId,
- Guid.NewGuid(),
- "max@mustermann.com",
- "Max",
- "Mustermann",
- "Password",
- UserRole.User);
+ ExistingUserId,
+ Guid.NewGuid(),
+ "max@mustermann.com",
+ "Max",
+ "Mustermann",
+ "Password",
+ UserRole.User);
user.Delete();
diff --git a/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetUserByIdTestFixture.cs b/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetUserByIdTestFixture.cs
index 6f306d6..11b407f 100644
--- a/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetUserByIdTestFixture.cs
+++ b/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetUserByIdTestFixture.cs
@@ -25,13 +25,13 @@ public sealed class GetUserByIdTestFixture : QueryHandlerBaseFixture
public void SetupUserAsync()
{
var user = new User(
- ExistingUserId,
- Guid.NewGuid(),
- "max@mustermann.com",
- "Max",
- "Mustermann",
- "Password",
- UserRole.User);
+ ExistingUserId,
+ Guid.NewGuid(),
+ "max@mustermann.com",
+ "Max",
+ "Mustermann",
+ "Password",
+ UserRole.User);
var query = new[] { user }.BuildMock();
@@ -41,13 +41,13 @@ public sealed class GetUserByIdTestFixture : QueryHandlerBaseFixture
public void SetupDeletedUserAsync()
{
var user = new User(
- ExistingUserId,
- Guid.NewGuid(),
- "max@mustermann.com",
- "Max",
- "Mustermann",
- "Password",
- UserRole.User);
+ ExistingUserId,
+ Guid.NewGuid(),
+ "max@mustermann.com",
+ "Max",
+ "Mustermann",
+ "Password",
+ UserRole.User);
user.Delete();
diff --git a/CleanArchitecture.Application.Tests/Queries/Tenants/GetAllTenantsQueryHandlerTests.cs b/CleanArchitecture.Application.Tests/Queries/Tenants/GetAllTenantsQueryHandlerTests.cs
index 882eedf..6940687 100644
--- a/CleanArchitecture.Application.Tests/Queries/Tenants/GetAllTenantsQueryHandlerTests.cs
+++ b/CleanArchitecture.Application.Tests/Queries/Tenants/GetAllTenantsQueryHandlerTests.cs
@@ -10,12 +10,12 @@ namespace CleanArchitecture.Application.Tests.Queries.Tenants;
public sealed class GetAllTenantsQueryHandlerTests
{
private readonly GetAllTenantsTestFixture _fixture = new();
-
+
[Fact]
public async Task Should_Get_Existing_Tenant()
{
var tenant = _fixture.SetupTenant();
-
+
var result = await _fixture.QueryHandler.Handle(
new GetAllTenantsQuery(),
default);
@@ -24,12 +24,12 @@ public sealed class GetAllTenantsQueryHandlerTests
tenant.Should().BeEquivalentTo(result.First());
}
-
+
[Fact]
public async Task Should_Not_Get_Deleted_Tenant()
{
_fixture.SetupTenant(true);
-
+
var result = await _fixture.QueryHandler.Handle(
new GetAllTenantsQuery(),
default);
diff --git a/CleanArchitecture.Application.Tests/Queries/Tenants/GetTenantByIdQueryHandlerTests.cs b/CleanArchitecture.Application.Tests/Queries/Tenants/GetTenantByIdQueryHandlerTests.cs
index 222d456..230864b 100644
--- a/CleanArchitecture.Application.Tests/Queries/Tenants/GetTenantByIdQueryHandlerTests.cs
+++ b/CleanArchitecture.Application.Tests/Queries/Tenants/GetTenantByIdQueryHandlerTests.cs
@@ -15,7 +15,7 @@ public sealed class GetTenantByIdQueryHandlerTests
public async Task Should_Get_Existing_Tenant()
{
var tenant = _fixture.SetupTenant();
-
+
var result = await _fixture.QueryHandler.Handle(
new GetTenantByIdQuery(tenant.Id, false),
default);
@@ -24,12 +24,12 @@ public sealed class GetTenantByIdQueryHandlerTests
tenant.Should().BeEquivalentTo(result);
}
-
+
[Fact]
public async Task Should_Get_Deleted_Tenant()
{
var tenant = _fixture.SetupTenant(true);
-
+
var result = await _fixture.QueryHandler.Handle(
new GetTenantByIdQuery(tenant.Id, true),
default);
@@ -38,12 +38,12 @@ public sealed class GetTenantByIdQueryHandlerTests
tenant.Should().BeEquivalentTo(result);
}
-
+
[Fact]
public async Task Should_Not_Get_Deleted_Tenant()
{
var tenant = _fixture.SetupTenant(true);
-
+
var result = await _fixture.QueryHandler.Handle(
new GetTenantByIdQuery(tenant.Id, false),
default);
diff --git a/CleanArchitecture.Application/CleanArchitecture.Application.csproj b/CleanArchitecture.Application/CleanArchitecture.Application.csproj
index 2c7102f..3b320a5 100644
--- a/CleanArchitecture.Application/CleanArchitecture.Application.csproj
+++ b/CleanArchitecture.Application/CleanArchitecture.Application.csproj
@@ -6,14 +6,13 @@
-
+
-
-
+
+
-
diff --git a/CleanArchitecture.Application/Extensions/ServiceCollectionExtension.cs b/CleanArchitecture.Application/Extensions/ServiceCollectionExtension.cs
index 03d5044..9da4c3b 100644
--- a/CleanArchitecture.Application/Extensions/ServiceCollectionExtension.cs
+++ b/CleanArchitecture.Application/Extensions/ServiceCollectionExtension.cs
@@ -30,8 +30,9 @@ public static class ServiceCollectionExtension
// Tenant
services.AddScoped, GetTenantByIdQueryHandler>();
- services.AddScoped>, GetAllTenantsQueryHandler>();
-
+ services
+ .AddScoped>, GetAllTenantsQueryHandler>();
+
return services;
}
}
\ No newline at end of file
diff --git a/CleanArchitecture.Application/Queries/Tenants/GetAll/GetAllTenantsQuery.cs b/CleanArchitecture.Application/Queries/Tenants/GetAll/GetAllTenantsQuery.cs
index 09e81a7..e87ddec 100644
--- a/CleanArchitecture.Application/Queries/Tenants/GetAll/GetAllTenantsQuery.cs
+++ b/CleanArchitecture.Application/Queries/Tenants/GetAll/GetAllTenantsQuery.cs
@@ -4,4 +4,4 @@ using MediatR;
namespace CleanArchitecture.Application.Queries.Tenants.GetAll;
-public sealed record GetAllTenantsQuery() : IRequest>;
\ No newline at end of file
+public sealed record GetAllTenantsQuery : IRequest>;
\ No newline at end of file
diff --git a/CleanArchitecture.Application/Queries/Tenants/GetTenantById/GetTenantByIdQueryHandler.cs b/CleanArchitecture.Application/Queries/Tenants/GetTenantById/GetTenantByIdQueryHandler.cs
index 9157fe4..2e22455 100644
--- a/CleanArchitecture.Application/Queries/Tenants/GetTenantById/GetTenantByIdQueryHandler.cs
+++ b/CleanArchitecture.Application/Queries/Tenants/GetTenantById/GetTenantByIdQueryHandler.cs
@@ -14,8 +14,8 @@ namespace CleanArchitecture.Application.Queries.Tenants.GetTenantById;
public sealed class GetTenantByIdQueryHandler :
IRequestHandler
{
- private readonly ITenantRepository _tenantRepository;
private readonly IMediatorHandler _bus;
+ private readonly ITenantRepository _tenantRepository;
public GetTenantByIdQueryHandler(ITenantRepository tenantRepository, IMediatorHandler bus)
{
diff --git a/CleanArchitecture.Application/Services/TenantService.cs b/CleanArchitecture.Application/Services/TenantService.cs
index 62279c0..c10fe20 100644
--- a/CleanArchitecture.Application/Services/TenantService.cs
+++ b/CleanArchitecture.Application/Services/TenantService.cs
@@ -24,11 +24,11 @@ public sealed class TenantService : ITenantService
public async Task CreateTenantAsync(CreateTenantViewModel tenant)
{
var tenantId = Guid.NewGuid();
-
+
await _bus.SendCommandAsync(new CreateTenantCommand(
tenantId,
tenant.Name));
-
+
return tenantId;
}
diff --git a/CleanArchitecture.Application/ViewModels/Tenants/TenantViewModel.cs b/CleanArchitecture.Application/ViewModels/Tenants/TenantViewModel.cs
index 586768f..af6bb43 100644
--- a/CleanArchitecture.Application/ViewModels/Tenants/TenantViewModel.cs
+++ b/CleanArchitecture.Application/ViewModels/Tenants/TenantViewModel.cs
@@ -11,7 +11,7 @@ public sealed class TenantViewModel
public Guid Id { get; set; }
public string Name { get; set; } = string.Empty;
public IEnumerable Users { get; set; } = new List();
-
+
public static TenantViewModel FromTenant(Tenant tenant)
{
return new TenantViewModel
diff --git a/CleanArchitecture.Application/gRPC/TenantsApiImplementation.cs b/CleanArchitecture.Application/gRPC/TenantsApiImplementation.cs
index d356c9e..414206c 100644
--- a/CleanArchitecture.Application/gRPC/TenantsApiImplementation.cs
+++ b/CleanArchitecture.Application/gRPC/TenantsApiImplementation.cs
@@ -23,7 +23,7 @@ public sealed class TenantsApiImplementation : TenantsApi.TenantsApiBase
ServerCallContext context)
{
var idsAsGuids = new List(request.Ids.Count);
-
+
foreach (var id in request.Ids)
{
if (Guid.TryParse(id, out var parsed))
@@ -44,7 +44,7 @@ public sealed class TenantsApiImplementation : TenantsApi.TenantsApiBase
.ToListAsync();
var result = new GetTenantsByIdsResult();
-
+
result.Tenants.AddRange(tenants);
return result;
diff --git a/CleanArchitecture.Domain.Tests/CleanArchitecture.Domain.Tests.csproj b/CleanArchitecture.Domain.Tests/CleanArchitecture.Domain.Tests.csproj
index 9a66f90..ce47c49 100644
--- a/CleanArchitecture.Domain.Tests/CleanArchitecture.Domain.Tests.csproj
+++ b/CleanArchitecture.Domain.Tests/CleanArchitecture.Domain.Tests.csproj
@@ -8,11 +8,11 @@
-
-
-
-
-
+
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
@@ -24,7 +24,7 @@
-
+
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/CreateTenant/CreateTenantCommandHandlerTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/CreateTenant/CreateTenantCommandHandlerTests.cs
index 77e2038..eb8d848 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/CreateTenant/CreateTenantCommandHandlerTests.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/CreateTenant/CreateTenantCommandHandlerTests.cs
@@ -26,12 +26,12 @@ public sealed class CreateTenantCommandHandlerTests
x.AggregateId == command.AggregateId &&
x.Name == command.Name);
}
-
+
[Fact]
public void Should_Not_Create_Tenant_Insufficient_Permissions()
{
_fixture.SetupUser();
-
+
var command = new CreateTenantCommand(
Guid.NewGuid(),
"Test Tenant");
@@ -46,14 +46,14 @@ public sealed class CreateTenantCommandHandlerTests
ErrorCodes.InsufficientPermissions,
$"No permission to create tenant {command.AggregateId}");
}
-
+
[Fact]
public void Should_Not_Create_Tenant_Already_Exists()
{
var command = new CreateTenantCommand(
Guid.NewGuid(),
"Test Tenant");
-
+
_fixture.SetupExistingTenant(command.AggregateId);
_fixture.CommandHandler.Handle(command, default!).Wait();
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/CreateTenant/CreateTenantCommandTestFixture.cs b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/CreateTenant/CreateTenantCommandTestFixture.cs
index 9c9a48c..d2ca1f2 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/CreateTenant/CreateTenantCommandTestFixture.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/CreateTenant/CreateTenantCommandTestFixture.cs
@@ -8,15 +8,11 @@ namespace CleanArchitecture.Domain.Tests.CommandHandler.Tenant.CreateTenant;
public sealed class CreateTenantCommandTestFixture : CommandHandlerFixtureBase
{
- public CreateTenantCommandHandler CommandHandler { get;}
-
- private ITenantRepository TenantRepository { get; }
-
public CreateTenantCommandTestFixture()
{
TenantRepository = Substitute.For();
-
- CommandHandler = new(
+
+ CommandHandler = new CreateTenantCommandHandler(
Bus,
UnitOfWork,
NotificationHandler,
@@ -24,6 +20,10 @@ public sealed class CreateTenantCommandTestFixture : CommandHandlerFixtureBase
User);
}
+ public CreateTenantCommandHandler CommandHandler { get; }
+
+ private ITenantRepository TenantRepository { get; }
+
public void SetupUser()
{
User.GetUserRole().Returns(UserRole.User);
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/CreateTenant/CreateTenantCommandValidationTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/CreateTenant/CreateTenantCommandValidationTests.cs
index 25aec37..2156932 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/CreateTenant/CreateTenantCommandValidationTests.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/CreateTenant/CreateTenantCommandValidationTests.cs
@@ -11,7 +11,7 @@ public sealed class CreateTenantCommandValidationTests :
public CreateTenantCommandValidationTests() : base(new CreateTenantCommandValidation())
{
}
-
+
[Fact]
public void Should_Be_Valid()
{
@@ -19,7 +19,7 @@ public sealed class CreateTenantCommandValidationTests :
ShouldBeValid(command);
}
-
+
[Fact]
public void Should_Be_Invalid_For_Empty_Tenant_Id()
{
@@ -30,7 +30,7 @@ public sealed class CreateTenantCommandValidationTests :
DomainErrorCodes.Tenant.TenantEmptyId,
"Tenant id may not be empty");
}
-
+
[Fact]
public void Should_Be_Invalid_For_Empty_Tenant_Name()
{
@@ -46,7 +46,7 @@ public sealed class CreateTenantCommandValidationTests :
Guid? id = null,
string? name = null)
{
- return new(
+ return new CreateTenantCommand(
id ?? Guid.NewGuid(),
name ?? "Test Tenant");
}
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/DeleteTenant/DeleteTenantCommandHandlerTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/DeleteTenant/DeleteTenantCommandHandlerTests.cs
index 27b5a2d..cfd6851 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/DeleteTenant/DeleteTenantCommandHandlerTests.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/DeleteTenant/DeleteTenantCommandHandlerTests.cs
@@ -16,7 +16,7 @@ public sealed class DeleteTenantCommandHandlerTests
var tenant = _fixture.SetupTenant();
var command = new DeleteTenantCommand(tenant.Id);
-
+
_fixture.CommandHandler.Handle(command, default).Wait();
_fixture
@@ -24,14 +24,14 @@ public sealed class DeleteTenantCommandHandlerTests
.VerifyCommit()
.VerifyRaisedEvent(x => x.AggregateId == tenant.Id);
}
-
+
[Fact]
public void Should_Not_Delete_Non_Existing_Tenant()
{
_fixture.SetupTenant();
var command = new DeleteTenantCommand(Guid.NewGuid());
-
+
_fixture.CommandHandler.Handle(command, default).Wait();
_fixture
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/DeleteTenant/DeleteTenantCommandTestFixture.cs b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/DeleteTenant/DeleteTenantCommandTestFixture.cs
index 9ed5c2c..1b8367a 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/DeleteTenant/DeleteTenantCommandTestFixture.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/DeleteTenant/DeleteTenantCommandTestFixture.cs
@@ -7,17 +7,12 @@ namespace CleanArchitecture.Domain.Tests.CommandHandler.Tenant.DeleteTenant;
public sealed class DeleteTenantCommandTestFixture : CommandHandlerFixtureBase
{
- public DeleteTenantCommandHandler CommandHandler { get;}
-
- private ITenantRepository TenantRepository { get; }
- private IUserRepository UserRepository { get; }
-
public DeleteTenantCommandTestFixture()
{
TenantRepository = Substitute.For();
UserRepository = Substitute.For();
-
- CommandHandler = new(
+
+ CommandHandler = new DeleteTenantCommandHandler(
Bus,
UnitOfWork,
NotificationHandler,
@@ -26,14 +21,19 @@ public sealed class DeleteTenantCommandTestFixture : CommandHandlerFixtureBase
User);
}
+ public DeleteTenantCommandHandler CommandHandler { get; }
+
+ private ITenantRepository TenantRepository { get; }
+ private IUserRepository UserRepository { get; }
+
public Entities.Tenant SetupTenant()
{
var tenant = new Entities.Tenant(Guid.NewGuid(), "TestTenant");
-
+
TenantRepository
.GetByIdAsync(Arg.Is(y => y == tenant.Id))
.Returns(tenant);
-
+
return tenant;
- }
+ }
}
\ No newline at end of file
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/DeleteTenant/DeleteTenantCommandValidationTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/DeleteTenant/DeleteTenantCommandValidationTests.cs
index 48d3877..b36e294 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/DeleteTenant/DeleteTenantCommandValidationTests.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/DeleteTenant/DeleteTenantCommandValidationTests.cs
@@ -11,7 +11,7 @@ public sealed class DeleteTenantCommandValidationTests :
public DeleteTenantCommandValidationTests() : base(new DeleteTenantCommandValidation())
{
}
-
+
[Fact]
public void Should_Be_Valid()
{
@@ -19,7 +19,7 @@ public sealed class DeleteTenantCommandValidationTests :
ShouldBeValid(command);
}
-
+
[Fact]
public void Should_Be_Invalid_For_Empty_Tenant_Id()
{
@@ -30,9 +30,9 @@ public sealed class DeleteTenantCommandValidationTests :
DomainErrorCodes.Tenant.TenantEmptyId,
"Tenant id may not be empty");
}
-
+
private static DeleteTenantCommand CreateTestCommand(Guid? tenantId = null)
{
- return new(tenantId ?? Guid.NewGuid());
+ return new DeleteTenantCommand(tenantId ?? Guid.NewGuid());
}
}
\ No newline at end of file
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/UpdateTenant/UpdateTenantCommandHandlerTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/UpdateTenant/UpdateTenantCommandHandlerTests.cs
index 8fa4424..e391a89 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/UpdateTenant/UpdateTenantCommandHandlerTests.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/UpdateTenant/UpdateTenantCommandHandlerTests.cs
@@ -16,7 +16,7 @@ public sealed class UpdateTenantCommandHandlerTests
var command = new UpdateTenantCommand(
Guid.NewGuid(),
"Tenant Name");
-
+
_fixture.SetupExistingTenant(command.AggregateId);
_fixture.CommandHandler.Handle(command, default!).Wait();
@@ -28,14 +28,14 @@ public sealed class UpdateTenantCommandHandlerTests
x.AggregateId == command.AggregateId &&
x.Name == command.Name);
}
-
+
[Fact]
public void Should_Not_Update_Tenant_Insufficient_Permissions()
{
var command = new UpdateTenantCommand(
Guid.NewGuid(),
"Tenant Name");
-
+
_fixture.SetupUser();
_fixture.CommandHandler.Handle(command, default!).Wait();
@@ -48,14 +48,14 @@ public sealed class UpdateTenantCommandHandlerTests
ErrorCodes.InsufficientPermissions,
$"No permission to update tenant {command.AggregateId}");
}
-
+
[Fact]
public void Should_Not_Update_Tenant_Not_Existing()
{
var command = new UpdateTenantCommand(
Guid.NewGuid(),
"Tenant Name");
-
+
_fixture.CommandHandler.Handle(command, default!).Wait();
_fixture
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/UpdateTenant/UpdateTenantCommandTestFixture.cs b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/UpdateTenant/UpdateTenantCommandTestFixture.cs
index 82879d6..dbd1695 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/UpdateTenant/UpdateTenantCommandTestFixture.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/UpdateTenant/UpdateTenantCommandTestFixture.cs
@@ -1,7 +1,6 @@
using System;
using CleanArchitecture.Domain.Commands.Tenants.UpdateTenant;
using CleanArchitecture.Domain.Enums;
-using CleanArchitecture.Domain.Interfaces;
using CleanArchitecture.Domain.Interfaces.Repositories;
using NSubstitute;
@@ -9,22 +8,22 @@ namespace CleanArchitecture.Domain.Tests.CommandHandler.Tenant.UpdateTenant;
public sealed class UpdateTenantCommandTestFixture : CommandHandlerFixtureBase
{
- public UpdateTenantCommandHandler CommandHandler { get;}
-
- private ITenantRepository TenantRepository { get; }
-
public UpdateTenantCommandTestFixture()
{
TenantRepository = Substitute.For();
-
- CommandHandler = new(
+
+ CommandHandler = new UpdateTenantCommandHandler(
Bus,
UnitOfWork,
NotificationHandler,
TenantRepository,
User);
}
-
+
+ public UpdateTenantCommandHandler CommandHandler { get; }
+
+ private ITenantRepository TenantRepository { get; }
+
public void SetupUser()
{
User.GetUserRole().Returns(UserRole.User);
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/UpdateTenant/UpdateTenantCommandValidationTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/UpdateTenant/UpdateTenantCommandValidationTests.cs
index 4aac523..c7c4f11 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/UpdateTenant/UpdateTenantCommandValidationTests.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/Tenant/UpdateTenant/UpdateTenantCommandValidationTests.cs
@@ -11,7 +11,7 @@ public sealed class UpdateTenantCommandValidationTests :
public UpdateTenantCommandValidationTests() : base(new UpdateTenantCommandValidation())
{
}
-
+
[Fact]
public void Should_Be_Valid()
{
@@ -19,7 +19,7 @@ public sealed class UpdateTenantCommandValidationTests :
ShouldBeValid(command);
}
-
+
[Fact]
public void Should_Be_Invalid_For_Empty_Tenant_Id()
{
@@ -30,7 +30,7 @@ public sealed class UpdateTenantCommandValidationTests :
DomainErrorCodes.Tenant.TenantEmptyId,
"Tenant id may not be empty");
}
-
+
[Fact]
public void Should_Be_Invalid_For_Empty_Tenant_Name()
{
@@ -46,7 +46,7 @@ public sealed class UpdateTenantCommandValidationTests :
Guid? id = null,
string? name = null)
{
- return new(
+ return new UpdateTenantCommand(
id ?? Guid.NewGuid(),
name ?? "Test Tenant");
}
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/User/ChangePassword/ChangePasswordCommandValidationTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/User/ChangePassword/ChangePasswordCommandValidationTests.cs
index 4a1a41a..b75d5f4 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/User/ChangePassword/ChangePasswordCommandValidationTests.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/User/ChangePassword/ChangePasswordCommandValidationTests.cs
@@ -90,7 +90,7 @@ public sealed class ChangePasswordCommandValidationTests :
private static ChangePasswordCommand CreateTestCommand(
string? password = null, string? newPassword = null)
{
- return new(
+ return new ChangePasswordCommand(
password ?? "z8]tnayvd5FNLU9:]AQm",
newPassword ?? "z8]tnayvd5FNLU9:]AQw");
}
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/User/CreateUser/CreateUserCommandHandlerTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/User/CreateUser/CreateUserCommandHandlerTests.cs
index 5382f23..0151fd4 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/User/CreateUser/CreateUserCommandHandlerTests.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/User/CreateUser/CreateUserCommandHandlerTests.cs
@@ -15,7 +15,7 @@ public sealed class CreateUserCommandHandlerTests
{
// Todo: Fix tests
_fixture.SetupCurrentUser();
-
+
var user = _fixture.SetupUser();
_fixture.SetupTenant(user.TenantId);
@@ -39,7 +39,7 @@ public sealed class CreateUserCommandHandlerTests
public void Should_Not_Create_Already_Existing_User()
{
_fixture.SetupCurrentUser();
-
+
var user = _fixture.SetupUser();
var command = new CreateUserCommand(
@@ -60,12 +60,12 @@ public sealed class CreateUserCommandHandlerTests
DomainErrorCodes.User.UserAlreadyExists,
$"There is already a user with Id {command.UserId}");
}
-
+
[Fact]
public void Should_Not_Create_User_Tenant_Does_Not_Exist()
{
_fixture.SetupCurrentUser();
-
+
_fixture.SetupUser();
var command = new CreateUserCommand(
@@ -86,7 +86,7 @@ public sealed class CreateUserCommandHandlerTests
ErrorCodes.ObjectNotFound,
$"There is no tenant with Id {command.TenantId}");
}
-
+
[Fact]
public void Should_Not_Create_User_Insufficient_Permissions()
{
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/User/CreateUser/CreateUserCommandValidationTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/User/CreateUser/CreateUserCommandValidationTests.cs
index 015b40d..05e3d7c 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/User/CreateUser/CreateUserCommandValidationTests.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/User/CreateUser/CreateUserCommandValidationTests.cs
@@ -176,7 +176,7 @@ public sealed class CreateUserCommandValidationTests :
ShouldHaveSingleError(command, DomainErrorCodes.User.UserLongPassword);
}
-
+
[Fact]
public void Should_Be_Invalid_For_Empty_Tenant_Id()
{
@@ -193,7 +193,7 @@ public sealed class CreateUserCommandValidationTests :
string? lastName = null,
string? password = null)
{
- return new(
+ return new CreateUserCommand(
userId ?? Guid.NewGuid(),
tenantId ?? Guid.NewGuid(),
email ?? "test@email.com",
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/User/DeleteUser/DeleteUserCommandValidationTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/User/DeleteUser/DeleteUserCommandValidationTests.cs
index 9464154..8ea63cf 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/User/DeleteUser/DeleteUserCommandValidationTests.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/User/DeleteUser/DeleteUserCommandValidationTests.cs
@@ -33,6 +33,6 @@ public sealed class DeleteUserCommandValidationTests :
private static DeleteUserCommand CreateTestCommand(Guid? userId = null)
{
- return new(userId ?? Guid.NewGuid());
+ return new DeleteUserCommand(userId ?? Guid.NewGuid());
}
}
\ No newline at end of file
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/User/LoginUser/LoginUserCommandValidationTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/User/LoginUser/LoginUserCommandValidationTests.cs
index e6b4675..7b1ca35 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/User/LoginUser/LoginUserCommandValidationTests.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/User/LoginUser/LoginUserCommandValidationTests.cs
@@ -125,7 +125,7 @@ public sealed class LoginUserCommandValidationTests :
string? email = null,
string? password = null)
{
- return new(
+ return new LoginUserCommand(
email ?? "test@email.com",
password ?? "Po=PF]PC6t.?8?ks)A6W");
}
diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/User/UpdateUser/UpdateUserCommandValidationTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/User/UpdateUser/UpdateUserCommandValidationTests.cs
index 161aabc..42de98f 100644
--- a/CleanArchitecture.Domain.Tests/CommandHandler/User/UpdateUser/UpdateUserCommandValidationTests.cs
+++ b/CleanArchitecture.Domain.Tests/CommandHandler/User/UpdateUser/UpdateUserCommandValidationTests.cs
@@ -109,7 +109,7 @@ public sealed class UpdateUserCommandValidationTests :
DomainErrorCodes.User.UserLastNameExceedsMaxLength,
$"LastName may not be longer than {MaxLengths.User.LastName} characters");
}
-
+
[Fact]
public void Should_Be_Invalid_For_Empty_Tenant_Id()
{
@@ -129,7 +129,7 @@ public sealed class UpdateUserCommandValidationTests :
string? lastName = null,
UserRole? role = null)
{
- return new(
+ return new UpdateUserCommand(
userId ?? Guid.NewGuid(),
email ?? "test@email.com",
firstName ?? "test",
diff --git a/CleanArchitecture.Domain/ApiUser.cs b/CleanArchitecture.Domain/ApiUser.cs
index df1db8a..3e0ea81 100644
--- a/CleanArchitecture.Domain/ApiUser.cs
+++ b/CleanArchitecture.Domain/ApiUser.cs
@@ -59,17 +59,20 @@ public sealed class ApiUser : IUser
{
return _name;
}
+
var identity = _httpContextAccessor.HttpContext?.User.Identity;
if (identity is null)
{
_name = string.Empty;
return string.Empty;
}
+
if (!string.IsNullOrWhiteSpace(identity.Name))
{
_name = identity.Name;
return identity.Name;
}
+
var claim = _httpContextAccessor.HttpContext!.User.Claims
.FirstOrDefault(c => string.Equals(c.Type, ClaimTypes.Name, StringComparison.OrdinalIgnoreCase))?
.Value;
diff --git a/CleanArchitecture.Domain/CleanArchitecture.Domain.csproj b/CleanArchitecture.Domain/CleanArchitecture.Domain.csproj
index 0d9cbb5..756c41c 100644
--- a/CleanArchitecture.Domain/CleanArchitecture.Domain.csproj
+++ b/CleanArchitecture.Domain/CleanArchitecture.Domain.csproj
@@ -6,14 +6,14 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
diff --git a/CleanArchitecture.Domain/Commands/CommandHandlerBase.cs b/CleanArchitecture.Domain/Commands/CommandHandlerBase.cs
index 6ab6b8f..e1f7ba0 100644
--- a/CleanArchitecture.Domain/Commands/CommandHandlerBase.cs
+++ b/CleanArchitecture.Domain/Commands/CommandHandlerBase.cs
@@ -9,9 +9,9 @@ namespace CleanArchitecture.Domain.Commands;
public abstract class CommandHandlerBase
{
- protected readonly IMediatorHandler Bus;
private readonly DomainNotificationHandler _notifications;
private readonly IUnitOfWork _unitOfWork;
+ protected readonly IMediatorHandler Bus;
protected CommandHandlerBase(
IMediatorHandler bus,
diff --git a/CleanArchitecture.Domain/Commands/Tenants/CreateTenant/CreateTenantCommand.cs b/CleanArchitecture.Domain/Commands/Tenants/CreateTenant/CreateTenantCommand.cs
index 3a97121..febc727 100644
--- a/CleanArchitecture.Domain/Commands/Tenants/CreateTenant/CreateTenantCommand.cs
+++ b/CleanArchitecture.Domain/Commands/Tenants/CreateTenant/CreateTenantCommand.cs
@@ -5,14 +5,14 @@ namespace CleanArchitecture.Domain.Commands.Tenants.CreateTenant;
public sealed class CreateTenantCommand : CommandBase
{
private static readonly CreateTenantCommandValidation s_validation = new();
-
- public string Name { get; }
-
+
public CreateTenantCommand(Guid tenantId, string name) : base(tenantId)
{
Name = name;
}
+ public string Name { get; }
+
public override bool IsValid()
{
ValidationResult = s_validation.Validate(this);
diff --git a/CleanArchitecture.Domain/Commands/Tenants/CreateTenant/CreateTenantCommandHandler.cs b/CleanArchitecture.Domain/Commands/Tenants/CreateTenant/CreateTenantCommandHandler.cs
index c96c8f0..16d0821 100644
--- a/CleanArchitecture.Domain/Commands/Tenants/CreateTenant/CreateTenantCommandHandler.cs
+++ b/CleanArchitecture.Domain/Commands/Tenants/CreateTenant/CreateTenantCommandHandler.cs
@@ -34,7 +34,7 @@ public sealed class CreateTenantCommandHandler : CommandHandlerBase,
{
return;
}
-
+
if (_user.GetUserRole() != UserRole.Admin)
{
await NotifyAsync(
@@ -60,7 +60,7 @@ public sealed class CreateTenantCommandHandler : CommandHandlerBase,
var tenant = new Tenant(
request.AggregateId,
request.Name);
-
+
_tenantRepository.Add(tenant);
if (await CommitAsync())
diff --git a/CleanArchitecture.Domain/Commands/Tenants/CreateTenant/CreateTenantCommandValidation.cs b/CleanArchitecture.Domain/Commands/Tenants/CreateTenant/CreateTenantCommandValidation.cs
index 4838663..9ac7602 100644
--- a/CleanArchitecture.Domain/Commands/Tenants/CreateTenant/CreateTenantCommandValidation.cs
+++ b/CleanArchitecture.Domain/Commands/Tenants/CreateTenant/CreateTenantCommandValidation.cs
@@ -11,7 +11,7 @@ public sealed class CreateTenantCommandValidation : AbstractValidator cmd.AggregateId)
@@ -19,7 +19,7 @@ public sealed class CreateTenantCommandValidation : AbstractValidator cmd.Name)
diff --git a/CleanArchitecture.Domain/Commands/Tenants/DeleteTenant/DeleteTenantCommand.cs b/CleanArchitecture.Domain/Commands/Tenants/DeleteTenant/DeleteTenantCommand.cs
index 9e112ca..e83ddc8 100644
--- a/CleanArchitecture.Domain/Commands/Tenants/DeleteTenant/DeleteTenantCommand.cs
+++ b/CleanArchitecture.Domain/Commands/Tenants/DeleteTenant/DeleteTenantCommand.cs
@@ -5,7 +5,7 @@ namespace CleanArchitecture.Domain.Commands.Tenants.DeleteTenant;
public sealed class DeleteTenantCommand : CommandBase
{
private static readonly DeleteTenantCommandValidation s_validation = new();
-
+
public DeleteTenantCommand(Guid tenantId) : base(tenantId)
{
}
diff --git a/CleanArchitecture.Domain/Commands/Tenants/DeleteTenant/DeleteTenantCommandHandler.cs b/CleanArchitecture.Domain/Commands/Tenants/DeleteTenant/DeleteTenantCommandHandler.cs
index 6c6b91a..3a57bed 100644
--- a/CleanArchitecture.Domain/Commands/Tenants/DeleteTenant/DeleteTenantCommandHandler.cs
+++ b/CleanArchitecture.Domain/Commands/Tenants/DeleteTenant/DeleteTenantCommandHandler.cs
@@ -15,8 +15,8 @@ public sealed class DeleteTenantCommandHandler : CommandHandlerBase,
IRequestHandler
{
private readonly ITenantRepository _tenantRepository;
- private readonly IUserRepository _userRepository;
private readonly IUser _user;
+ private readonly IUserRepository _userRepository;
public DeleteTenantCommandHandler(
IMediatorHandler bus,
@@ -37,7 +37,7 @@ public sealed class DeleteTenantCommandHandler : CommandHandlerBase,
{
return;
}
-
+
// Todo: Test following
if (_user.GetUserRole() != UserRole.Admin)
@@ -67,9 +67,9 @@ public sealed class DeleteTenantCommandHandler : CommandHandlerBase,
var tenantUsers = _userRepository
.GetAll()
.Where(x => x.TenantId == request.AggregateId);
-
+
_userRepository.RemoveRange(tenantUsers);
-
+
_tenantRepository.Remove(tenant);
if (await CommitAsync())
diff --git a/CleanArchitecture.Domain/Commands/Tenants/DeleteTenant/DeleteTenantCommandValidation.cs b/CleanArchitecture.Domain/Commands/Tenants/DeleteTenant/DeleteTenantCommandValidation.cs
index dadddd8..7b80034 100644
--- a/CleanArchitecture.Domain/Commands/Tenants/DeleteTenant/DeleteTenantCommandValidation.cs
+++ b/CleanArchitecture.Domain/Commands/Tenants/DeleteTenant/DeleteTenantCommandValidation.cs
@@ -9,7 +9,7 @@ public sealed class DeleteTenantCommandValidation : AbstractValidator cmd.AggregateId)
diff --git a/CleanArchitecture.Domain/Commands/Tenants/UpdateTenant/UpdateTenantCommand.cs b/CleanArchitecture.Domain/Commands/Tenants/UpdateTenant/UpdateTenantCommand.cs
index 3962e9b..cafbfef 100644
--- a/CleanArchitecture.Domain/Commands/Tenants/UpdateTenant/UpdateTenantCommand.cs
+++ b/CleanArchitecture.Domain/Commands/Tenants/UpdateTenant/UpdateTenantCommand.cs
@@ -5,14 +5,14 @@ namespace CleanArchitecture.Domain.Commands.Tenants.UpdateTenant;
public sealed class UpdateTenantCommand : CommandBase
{
private static readonly UpdateTenantCommandValidation s_validation = new();
-
- public string Name { get; }
-
+
public UpdateTenantCommand(Guid tenantId, string name) : base(tenantId)
{
Name = name;
}
+ public string Name { get; }
+
public override bool IsValid()
{
ValidationResult = s_validation.Validate(this);
diff --git a/CleanArchitecture.Domain/Commands/Tenants/UpdateTenant/UpdateTenantCommandHandler.cs b/CleanArchitecture.Domain/Commands/Tenants/UpdateTenant/UpdateTenantCommandHandler.cs
index 4ef9929..dc1e076 100644
--- a/CleanArchitecture.Domain/Commands/Tenants/UpdateTenant/UpdateTenantCommandHandler.cs
+++ b/CleanArchitecture.Domain/Commands/Tenants/UpdateTenant/UpdateTenantCommandHandler.cs
@@ -33,7 +33,7 @@ public sealed class UpdateTenantCommandHandler : CommandHandlerBase,
{
return;
}
-
+
if (_user.GetUserRole() != UserRole.Admin)
{
await NotifyAsync(
@@ -57,9 +57,9 @@ public sealed class UpdateTenantCommandHandler : CommandHandlerBase,
return;
}
-
+
tenant.SetName(request.Name);
-
+
if (await CommitAsync())
{
await Bus.RaiseEventAsync(new TenantUpdatedEvent(
diff --git a/CleanArchitecture.Domain/Commands/Tenants/UpdateTenant/UpdateTenantCommandValidation.cs b/CleanArchitecture.Domain/Commands/Tenants/UpdateTenant/UpdateTenantCommandValidation.cs
index 905e638..c9abd29 100644
--- a/CleanArchitecture.Domain/Commands/Tenants/UpdateTenant/UpdateTenantCommandValidation.cs
+++ b/CleanArchitecture.Domain/Commands/Tenants/UpdateTenant/UpdateTenantCommandValidation.cs
@@ -11,7 +11,7 @@ public sealed class UpdateTenantCommandValidation : AbstractValidator cmd.AggregateId)
@@ -19,7 +19,7 @@ public sealed class UpdateTenantCommandValidation : AbstractValidator cmd.Name)
diff --git a/CleanArchitecture.Domain/Commands/Users/CreateUser/CreateUserCommandHandler.cs b/CleanArchitecture.Domain/Commands/Users/CreateUser/CreateUserCommandHandler.cs
index 4407656..8eb5388 100644
--- a/CleanArchitecture.Domain/Commands/Users/CreateUser/CreateUserCommandHandler.cs
+++ b/CleanArchitecture.Domain/Commands/Users/CreateUser/CreateUserCommandHandler.cs
@@ -15,9 +15,9 @@ namespace CleanArchitecture.Domain.Commands.Users.CreateUser;
public sealed class CreateUserCommandHandler : CommandHandlerBase,
IRequestHandler
{
- private readonly IUserRepository _userRepository;
private readonly ITenantRepository _tenantRepository;
private readonly IUser _user;
+ private readonly IUserRepository _userRepository;
public CreateUserCommandHandler(
IMediatorHandler bus,
@@ -38,9 +38,9 @@ public sealed class CreateUserCommandHandler : CommandHandlerBase,
{
return;
}
-
+
var currentUser = await _userRepository.GetByIdAsync(_user.GetUserId());
-
+
if (currentUser is null || currentUser.Role != UserRole.Admin)
{
await NotifyAsync(
diff --git a/CleanArchitecture.Domain/Commands/Users/UpdateUser/UpdateUserCommandHandler.cs b/CleanArchitecture.Domain/Commands/Users/UpdateUser/UpdateUserCommandHandler.cs
index eeda6e8..74b86fc 100644
--- a/CleanArchitecture.Domain/Commands/Users/UpdateUser/UpdateUserCommandHandler.cs
+++ b/CleanArchitecture.Domain/Commands/Users/UpdateUser/UpdateUserCommandHandler.cs
@@ -75,7 +75,7 @@ public sealed class UpdateUserCommandHandler : CommandHandlerBase,
if (_user.GetUserRole() == UserRole.Admin)
{
user.SetRole(request.Role);
-
+
// Todo: Test
// Todo: Check if tenant exists first
user.SetTenant(request.TenantId);
diff --git a/CleanArchitecture.Domain/Commands/Users/UpdateUser/UpdateUserCommandValidation.cs b/CleanArchitecture.Domain/Commands/Users/UpdateUser/UpdateUserCommandValidation.cs
index d5f9301..9380fb2 100644
--- a/CleanArchitecture.Domain/Commands/Users/UpdateUser/UpdateUserCommandValidation.cs
+++ b/CleanArchitecture.Domain/Commands/Users/UpdateUser/UpdateUserCommandValidation.cs
@@ -23,7 +23,7 @@ public sealed class UpdateUserCommandValidation : AbstractValidator cmd.TenantId)
diff --git a/CleanArchitecture.Domain/DomainEvents/Message.cs b/CleanArchitecture.Domain/DomainEvents/Message.cs
index 606c259..58622a3 100644
--- a/CleanArchitecture.Domain/DomainEvents/Message.cs
+++ b/CleanArchitecture.Domain/DomainEvents/Message.cs
@@ -19,4 +19,4 @@ public abstract class Message : IRequest
public Guid AggregateId { get; private set; }
public string MessageType { get; protected set; }
-}
+}
\ No newline at end of file
diff --git a/CleanArchitecture.Domain/DomainEvents/StoredDomainEvent.cs b/CleanArchitecture.Domain/DomainEvents/StoredDomainEvent.cs
index 1074410..895bc9c 100644
--- a/CleanArchitecture.Domain/DomainEvents/StoredDomainEvent.cs
+++ b/CleanArchitecture.Domain/DomainEvents/StoredDomainEvent.cs
@@ -4,11 +4,6 @@ namespace CleanArchitecture.Domain.DomainEvents;
public class StoredDomainEvent : DomainEvent
{
- public Guid Id { get; private set; }
- public string Data { get; private set; } = string.Empty;
- public string User { get; private set; } = string.Empty;
- public string CorrelationId { get; private set; } = string.Empty;
-
public StoredDomainEvent(
DomainEvent domainEvent,
string data,
@@ -24,5 +19,11 @@ public class StoredDomainEvent : DomainEvent
// EF Constructor
protected StoredDomainEvent() : base(Guid.NewGuid())
- { }
-}
+ {
+ }
+
+ public Guid Id { get; private set; }
+ public string Data { get; private set; } = string.Empty;
+ public string User { get; private set; } = string.Empty;
+ public string CorrelationId { get; private set; } = string.Empty;
+}
\ No newline at end of file
diff --git a/CleanArchitecture.Domain/DomainNotifications/StoredDomainNotification.cs b/CleanArchitecture.Domain/DomainNotifications/StoredDomainNotification.cs
index 3a6199c..b3fc594 100644
--- a/CleanArchitecture.Domain/DomainNotifications/StoredDomainNotification.cs
+++ b/CleanArchitecture.Domain/DomainNotifications/StoredDomainNotification.cs
@@ -5,21 +5,16 @@ namespace CleanArchitecture.Domain.DomainNotifications;
public class StoredDomainNotification : DomainNotification
{
- public Guid Id { get; private set; }
- public string SerializedData { get; private set; } = string.Empty;
- public string User { get; private set; } = string.Empty;
- public string CorrelationId { get; private set; } = string.Empty;
-
public StoredDomainNotification(
DomainNotification domainNotification,
string data,
string user,
string correlationId) : base(
- domainNotification.Key,
- domainNotification.Value,
- domainNotification.Code,
- null,
- domainNotification.AggregateId)
+ domainNotification.Key,
+ domainNotification.Value,
+ domainNotification.Code,
+ null,
+ domainNotification.AggregateId)
{
Id = Guid.NewGuid();
User = user;
@@ -31,5 +26,11 @@ public class StoredDomainNotification : DomainNotification
// EF Constructor
protected StoredDomainNotification() : base(string.Empty, string.Empty, string.Empty)
- { }
-}
+ {
+ }
+
+ public Guid Id { get; private set; }
+ public string SerializedData { get; private set; } = string.Empty;
+ public string User { get; private set; } = string.Empty;
+ public string CorrelationId { get; private set; } = string.Empty;
+}
\ No newline at end of file
diff --git a/CleanArchitecture.Domain/Entities/Tenant.cs b/CleanArchitecture.Domain/Entities/Tenant.cs
index 39cefb6..74b97fd 100644
--- a/CleanArchitecture.Domain/Entities/Tenant.cs
+++ b/CleanArchitecture.Domain/Entities/Tenant.cs
@@ -5,17 +5,17 @@ namespace CleanArchitecture.Domain.Entities;
public class Tenant : Entity
{
- public string Name { get; private set; }
-
- public virtual ICollection Users { get; private set; } = new HashSet();
-
public Tenant(
Guid id,
string name) : base(id)
{
Name = name;
}
-
+
+ public string Name { get; private set; }
+
+ public virtual ICollection Users { get; private set; } = new HashSet();
+
public void SetName(string name)
{
Name = name;
diff --git a/CleanArchitecture.Domain/Entities/User.cs b/CleanArchitecture.Domain/Entities/User.cs
index 56131d8..c897574 100644
--- a/CleanArchitecture.Domain/Entities/User.cs
+++ b/CleanArchitecture.Domain/Entities/User.cs
@@ -1,22 +1,10 @@
using System;
-using System.Diagnostics.CodeAnalysis;
using CleanArchitecture.Domain.Enums;
namespace CleanArchitecture.Domain.Entities;
public class User : Entity
{
- public string Email { get; private set; }
- public string FirstName { get; private set; }
- public string LastName { get; private set; }
- public string Password { get; private set; }
- public UserRole Role { get; private set; }
-
- public string FullName => $"{FirstName}, {LastName}";
-
- public Guid TenantId { get; private set; }
- public virtual Tenant Tenant { get; private set; } = null!;
-
public User(
Guid id,
Guid tenantId,
@@ -34,6 +22,17 @@ public class User : Entity
Role = role;
}
+ public string Email { get; private set; }
+ public string FirstName { get; private set; }
+ public string LastName { get; private set; }
+ public string Password { get; private set; }
+ public UserRole Role { get; private set; }
+
+ public string FullName => $"{FirstName}, {LastName}";
+
+ public Guid TenantId { get; private set; }
+ public virtual Tenant Tenant { get; private set; } = null!;
+
public void SetEmail(string email)
{
Email = email;
@@ -58,7 +57,7 @@ public class User : Entity
{
Role = role;
}
-
+
public void SetTenant(Guid tenantId)
{
TenantId = tenantId;
diff --git a/CleanArchitecture.Domain/Events/Tenant/TenantCreatedEvent.cs b/CleanArchitecture.Domain/Events/Tenant/TenantCreatedEvent.cs
index b79f34e..fcdca66 100644
--- a/CleanArchitecture.Domain/Events/Tenant/TenantCreatedEvent.cs
+++ b/CleanArchitecture.Domain/Events/Tenant/TenantCreatedEvent.cs
@@ -5,10 +5,10 @@ namespace CleanArchitecture.Domain.Events.Tenant;
public sealed class TenantCreatedEvent : DomainEvent
{
- public string Name { get; set; }
-
public TenantCreatedEvent(Guid tenantId, string name) : base(tenantId)
{
Name = name;
}
+
+ public string Name { get; set; }
}
\ No newline at end of file
diff --git a/CleanArchitecture.Domain/Events/Tenant/TenantUpdatedEvent.cs b/CleanArchitecture.Domain/Events/Tenant/TenantUpdatedEvent.cs
index 00b66b3..0c099d2 100644
--- a/CleanArchitecture.Domain/Events/Tenant/TenantUpdatedEvent.cs
+++ b/CleanArchitecture.Domain/Events/Tenant/TenantUpdatedEvent.cs
@@ -5,10 +5,10 @@ namespace CleanArchitecture.Domain.Events.Tenant;
public sealed class TenantUpdatedEvent : DomainEvent
{
- public string Name { get; set; }
-
public TenantUpdatedEvent(Guid tenantId, string name) : base(tenantId)
{
Name = name;
}
+
+ public string Name { get; set; }
}
\ No newline at end of file
diff --git a/CleanArchitecture.Domain/Extensions/ServiceCollectionExtension.cs b/CleanArchitecture.Domain/Extensions/ServiceCollectionExtension.cs
index a82ac0a..eddd6e7 100644
--- a/CleanArchitecture.Domain/Extensions/ServiceCollectionExtension.cs
+++ b/CleanArchitecture.Domain/Extensions/ServiceCollectionExtension.cs
@@ -41,7 +41,7 @@ public static class ServiceCollectionExtension
services.AddScoped, UserEventHandler>();
services.AddScoped, UserEventHandler>();
services.AddScoped, UserEventHandler>();
-
+
// Tenant
services.AddScoped, TenantEventHandler>();
services.AddScoped, TenantEventHandler>();
diff --git a/CleanArchitecture.Infrastructure.Tests/CleanArchitecture.Infrastructure.Tests.csproj b/CleanArchitecture.Infrastructure.Tests/CleanArchitecture.Infrastructure.Tests.csproj
index 41e3ba7..940558b 100644
--- a/CleanArchitecture.Infrastructure.Tests/CleanArchitecture.Infrastructure.Tests.csproj
+++ b/CleanArchitecture.Infrastructure.Tests/CleanArchitecture.Infrastructure.Tests.csproj
@@ -8,10 +8,10 @@
-
-
-
-
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
@@ -23,7 +23,7 @@
-
+
diff --git a/CleanArchitecture.Infrastructure/CleanArchitecture.Infrastructure.csproj b/CleanArchitecture.Infrastructure/CleanArchitecture.Infrastructure.csproj
index 1df52f3..4aab3e5 100644
--- a/CleanArchitecture.Infrastructure/CleanArchitecture.Infrastructure.csproj
+++ b/CleanArchitecture.Infrastructure/CleanArchitecture.Infrastructure.csproj
@@ -6,19 +6,19 @@
-
+
-
-
-
-
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/CleanArchitecture.Infrastructure/Configurations/EventSourcing/StoredDomainEventConfiguration.cs b/CleanArchitecture.Infrastructure/Configurations/EventSourcing/StoredDomainEventConfiguration.cs
index 05091d5..4347992 100644
--- a/CleanArchitecture.Infrastructure/Configurations/EventSourcing/StoredDomainEventConfiguration.cs
+++ b/CleanArchitecture.Infrastructure/Configurations/EventSourcing/StoredDomainEventConfiguration.cs
@@ -22,4 +22,4 @@ public sealed class StoredDomainEventConfiguration : IEntityTypeConfiguration c.SerializedData)
.HasColumnName("Data");
}
-}
+}
\ No newline at end of file
diff --git a/CleanArchitecture.Infrastructure/Configurations/UserConfiguration.cs b/CleanArchitecture.Infrastructure/Configurations/UserConfiguration.cs
index abe3cef..08642b0 100644
--- a/CleanArchitecture.Infrastructure/Configurations/UserConfiguration.cs
+++ b/CleanArchitecture.Infrastructure/Configurations/UserConfiguration.cs
@@ -1,4 +1,3 @@
-using System;
using CleanArchitecture.Domain.Constants;
using CleanArchitecture.Domain.Entities;
using CleanArchitecture.Domain.Enums;
diff --git a/CleanArchitecture.Infrastructure/Database/EventStoreDbContext.cs b/CleanArchitecture.Infrastructure/Database/EventStoreDbContext.cs
index fb6a4b3..e7e7c65 100644
--- a/CleanArchitecture.Infrastructure/Database/EventStoreDbContext.cs
+++ b/CleanArchitecture.Infrastructure/Database/EventStoreDbContext.cs
@@ -18,4 +18,4 @@ public class EventStoreDbContext : DbContext
base.OnModelCreating(modelBuilder);
}
-}
+}
\ No newline at end of file
diff --git a/CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs b/CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs
index 9231524..361156d 100644
--- a/CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs
+++ b/CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs
@@ -9,9 +9,9 @@ namespace CleanArchitecture.Infrastructure.EventSourcing;
public sealed class DomainEventStore : IDomainEventStore
{
- private readonly EventStoreDbContext _eventStoreDbContext;
- private readonly DomainNotificationStoreDbContext _domainNotificationStoreDbContext;
private readonly IEventStoreContext _context;
+ private readonly DomainNotificationStoreDbContext _domainNotificationStoreDbContext;
+ private readonly EventStoreDbContext _eventStoreDbContext;
public DomainEventStore(
EventStoreDbContext eventStoreDbContext,
@@ -53,4 +53,4 @@ public sealed class DomainEventStore : IDomainEventStore
break;
}
}
-}
+}
\ No newline at end of file
diff --git a/CleanArchitecture.Infrastructure/EventSourcing/EventStoreContext.cs b/CleanArchitecture.Infrastructure/EventSourcing/EventStoreContext.cs
index b28104b..f4610b4 100644
--- a/CleanArchitecture.Infrastructure/EventSourcing/EventStoreContext.cs
+++ b/CleanArchitecture.Infrastructure/EventSourcing/EventStoreContext.cs
@@ -14,7 +14,8 @@ public sealed class EventStoreContext : IEventStoreContext
_user = user;
if (httpContextAccessor?.HttpContext is null ||
- !httpContextAccessor.HttpContext.Request.Headers.TryGetValue("X-CLEAN-ARCHITECTURE-CORRELATION-ID", out var id))
+ !httpContextAccessor.HttpContext.Request.Headers.TryGetValue("X-CLEAN-ARCHITECTURE-CORRELATION-ID",
+ out var id))
{
_correlationId = $"internal - {Guid.NewGuid()}";
}
@@ -24,7 +25,13 @@ public sealed class EventStoreContext : IEventStoreContext
}
}
- public string GetCorrelationId() => _correlationId;
+ public string GetCorrelationId()
+ {
+ return _correlationId;
+ }
- public string GetUserEmail() => _user?.GetUserEmail() ?? string.Empty;
-}
+ public string GetUserEmail()
+ {
+ return _user?.GetUserEmail() ?? string.Empty;
+ }
+}
\ No newline at end of file
diff --git a/CleanArchitecture.Infrastructure/EventSourcing/IEventStoreContext.cs b/CleanArchitecture.Infrastructure/EventSourcing/IEventStoreContext.cs
index ab493f9..9bd64ca 100644
--- a/CleanArchitecture.Infrastructure/EventSourcing/IEventStoreContext.cs
+++ b/CleanArchitecture.Infrastructure/EventSourcing/IEventStoreContext.cs
@@ -4,4 +4,4 @@ public interface IEventStoreContext
{
public string GetUserEmail();
public string GetCorrelationId();
-}
+}
\ No newline at end of file
diff --git a/CleanArchitecture.Infrastructure/Extensions/ServiceCollectionExtensions.cs b/CleanArchitecture.Infrastructure/Extensions/ServiceCollectionExtensions.cs
index aec00dd..ad8ebac 100644
--- a/CleanArchitecture.Infrastructure/Extensions/ServiceCollectionExtensions.cs
+++ b/CleanArchitecture.Infrastructure/Extensions/ServiceCollectionExtensions.cs
@@ -16,18 +16,18 @@ public static class ServiceCollectionExtensions
{
public static IServiceCollection AddInfrastructure(
this IServiceCollection services,
- IConfiguration configuration,
- string migrationsAssemblyName,
- string connectionStringName = "DefaultConnection")
+ IConfiguration configuration,
+ string migrationsAssemblyName,
+ string connectionStringName = "DefaultConnection")
{
// Add event store db context
services.AddDbContext(
- options =>
- {
- options.UseSqlServer(
- configuration.GetConnectionString(connectionStringName),
- b => b.MigrationsAssembly(migrationsAssemblyName));
- });
+ options =>
+ {
+ options.UseSqlServer(
+ configuration.GetConnectionString(connectionStringName),
+ b => b.MigrationsAssembly(migrationsAssemblyName));
+ });
services.AddDbContext(
options =>
diff --git a/CleanArchitecture.Infrastructure/GlobalSuppressions.cs b/CleanArchitecture.Infrastructure/GlobalSuppressions.cs
index e510236..d7915ca 100644
--- a/CleanArchitecture.Infrastructure/GlobalSuppressions.cs
+++ b/CleanArchitecture.Infrastructure/GlobalSuppressions.cs
@@ -5,6 +5,12 @@
using System.Diagnostics.CodeAnalysis;
-[assembly: SuppressMessage("Style", "IDE0161:Convert to file-scoped namespace", Justification = "", Scope = "namespace", Target = "~N:CleanArchitecture.Infrastructure.Migrations")]
-[assembly: SuppressMessage("Style", "IDE0161:Convert to file-scoped namespace", Justification = "", Scope = "namespace", Target = "~N:CleanArchitecture.Infrastructure.Migrations.EventStoreDb")]
-[assembly: SuppressMessage("Style", "IDE0161:Convert to file-scoped namespace", Justification = "", Scope = "namespace", Target = "~N:CleanArchitecture.Infrastructure.Migrations.DomainNotificationStoreDb")]
+[assembly:
+ SuppressMessage("Style", "IDE0161:Convert to file-scoped namespace", Justification = "",
+ Scope = "namespace", Target = "~N:CleanArchitecture.Infrastructure.Migrations")]
+[assembly:
+ SuppressMessage("Style", "IDE0161:Convert to file-scoped namespace", Justification = "",
+ Scope = "namespace", Target = "~N:CleanArchitecture.Infrastructure.Migrations.EventStoreDb")]
+[assembly:
+ SuppressMessage("Style", "IDE0161:Convert to file-scoped namespace", Justification = "",
+ Scope = "namespace", Target = "~N:CleanArchitecture.Infrastructure.Migrations.DomainNotificationStoreDb")]
\ No newline at end of file
diff --git a/CleanArchitecture.Infrastructure/InMemoryBus.cs b/CleanArchitecture.Infrastructure/InMemoryBus.cs
index 0da1dae..703cbb2 100644
--- a/CleanArchitecture.Infrastructure/InMemoryBus.cs
+++ b/CleanArchitecture.Infrastructure/InMemoryBus.cs
@@ -8,8 +8,8 @@ namespace CleanArchitecture.Infrastructure;
public sealed class InMemoryBus : IMediatorHandler
{
- private readonly IMediator _mediator;
private readonly IDomainEventStore _domainEventStore;
+ private readonly IMediator _mediator;
public InMemoryBus(
IMediator mediator,
diff --git a/CleanArchitecture.Infrastructure/Migrations/DomainNotificationStoreDb/20230701135523_AddDomainNotificationStore.cs b/CleanArchitecture.Infrastructure/Migrations/DomainNotificationStoreDb/20230701135523_AddDomainNotificationStore.cs
index bb09c31..f582c38 100644
--- a/CleanArchitecture.Infrastructure/Migrations/DomainNotificationStoreDb/20230701135523_AddDomainNotificationStore.cs
+++ b/CleanArchitecture.Infrastructure/Migrations/DomainNotificationStoreDb/20230701135523_AddDomainNotificationStore.cs
@@ -1,43 +1,39 @@
-using System;
+#nullable disable
+
+using System;
using Microsoft.EntityFrameworkCore.Migrations;
-#nullable disable
+namespace CleanArchitecture.Infrastructure.Migrations.DomainNotificationStoreDb;
-namespace CleanArchitecture.Infrastructure.Migrations.DomainNotificationStoreDb
+///
+public partial class AddDomainNotificationStore : Migration
{
///
- public partial class AddDomainNotificationStore : Migration
+ protected override void Up(MigrationBuilder migrationBuilder)
{
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.CreateTable(
- name: "StoredDomainNotifications",
- columns: table => new
- {
- Id = table.Column(type: "uniqueidentifier", nullable: false),
- Data = table.Column(type: "nvarchar(max)", nullable: false),
- User = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false),
- CorrelationId = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false),
- AggregateId = table.Column(type: "uniqueidentifier", nullable: false),
- MessageType = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false),
- Timestamp = table.Column(type: "datetime2", nullable: false),
- Key = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false),
- Value = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: false),
- Code = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false),
- Version = table.Column(type: "int", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_StoredDomainNotifications", x => x.Id);
- });
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "StoredDomainNotifications");
- }
+ migrationBuilder.CreateTable(
+ "StoredDomainNotifications",
+ table => new
+ {
+ Id = table.Column("uniqueidentifier", nullable: false),
+ Data = table.Column("nvarchar(max)", nullable: false),
+ User = table.Column("nvarchar(100)", maxLength: 100, nullable: false),
+ CorrelationId = table.Column("nvarchar(100)", maxLength: 100, nullable: false),
+ AggregateId = table.Column("uniqueidentifier", nullable: false),
+ MessageType = table.Column("nvarchar(100)", maxLength: 100, nullable: false),
+ Timestamp = table.Column("datetime2", nullable: false),
+ Key = table.Column("nvarchar(100)", maxLength: 100, nullable: false),
+ Value = table.Column("nvarchar(1024)", maxLength: 1024, nullable: false),
+ Code = table.Column("nvarchar(100)", maxLength: 100, nullable: false),
+ Version = table.Column("int", nullable: false)
+ },
+ constraints: table => { table.PrimaryKey("PK_StoredDomainNotifications", x => x.Id); });
}
-}
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ "StoredDomainNotifications");
+ }
+}
\ No newline at end of file
diff --git a/CleanArchitecture.Infrastructure/Migrations/EventStoreDb/20230701135441_AddEventStore.cs b/CleanArchitecture.Infrastructure/Migrations/EventStoreDb/20230701135441_AddEventStore.cs
index b30585f..8a4c9c8 100644
--- a/CleanArchitecture.Infrastructure/Migrations/EventStoreDb/20230701135441_AddEventStore.cs
+++ b/CleanArchitecture.Infrastructure/Migrations/EventStoreDb/20230701135441_AddEventStore.cs
@@ -1,39 +1,35 @@
-using System;
+#nullable disable
+
+using System;
using Microsoft.EntityFrameworkCore.Migrations;
-#nullable disable
+namespace CleanArchitecture.Infrastructure.Migrations.EventStoreDb;
-namespace CleanArchitecture.Infrastructure.Migrations.EventStoreDb
+///
+public partial class AddEventStore : Migration
{
///
- public partial class AddEventStore : Migration
+ protected override void Up(MigrationBuilder migrationBuilder)
{
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.CreateTable(
- name: "StoredDomainEvents",
- columns: table => new
- {
- Id = table.Column(type: "uniqueidentifier", nullable: false),
- Data = table.Column(type: "nvarchar(max)", nullable: false),
- User = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false),
- CorrelationId = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false),
- AggregateId = table.Column(type: "uniqueidentifier", nullable: false),
- Action = table.Column(type: "varchar(100)", nullable: false),
- CreationDate = table.Column(type: "datetime2", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_StoredDomainEvents", x => x.Id);
- });
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "StoredDomainEvents");
- }
+ migrationBuilder.CreateTable(
+ "StoredDomainEvents",
+ table => new
+ {
+ Id = table.Column("uniqueidentifier", nullable: false),
+ Data = table.Column("nvarchar(max)", nullable: false),
+ User = table.Column("nvarchar(100)", maxLength: 100, nullable: false),
+ CorrelationId = table.Column("nvarchar(100)", maxLength: 100, nullable: false),
+ AggregateId = table.Column("uniqueidentifier", nullable: false),
+ Action = table.Column("varchar(100)", nullable: false),
+ CreationDate = table.Column("datetime2", nullable: false)
+ },
+ constraints: table => { table.PrimaryKey("PK_StoredDomainEvents", x => x.Id); });
}
-}
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ "StoredDomainEvents");
+ }
+}
\ No newline at end of file
diff --git a/CleanArchitecture.Infrastructure/Repositories/BaseRepository.cs b/CleanArchitecture.Infrastructure/Repositories/BaseRepository.cs
index 4be4db9..88b7349 100644
--- a/CleanArchitecture.Infrastructure/Repositories/BaseRepository.cs
+++ b/CleanArchitecture.Infrastructure/Repositories/BaseRepository.cs
@@ -72,7 +72,7 @@ public class BaseRepository : IRepository where TEntity : Enti
DbSet.Update(entity);
}
}
-
+
public void RemoveRange(IEnumerable entities, bool hardDelete = false)
{
if (hardDelete)
diff --git a/CleanArchitecture.IntegrationTests/CleanArchitecture.IntegrationTests.csproj b/CleanArchitecture.IntegrationTests/CleanArchitecture.IntegrationTests.csproj
index d008535..3aa4f40 100644
--- a/CleanArchitecture.IntegrationTests/CleanArchitecture.IntegrationTests.csproj
+++ b/CleanArchitecture.IntegrationTests/CleanArchitecture.IntegrationTests.csproj
@@ -8,14 +8,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
@@ -27,8 +27,8 @@
-
-
+
+
diff --git a/CleanArchitecture.IntegrationTests/Controller/TenantControllerTests.cs b/CleanArchitecture.IntegrationTests/Controller/TenantControllerTests.cs
index a3d60e5..2f9dd8a 100644
--- a/CleanArchitecture.IntegrationTests/Controller/TenantControllerTests.cs
+++ b/CleanArchitecture.IntegrationTests/Controller/TenantControllerTests.cs
@@ -30,17 +30,17 @@ public sealed class TenantControllerTests : IClassFixture
await _fixture.AuthenticateUserAsync();
var response = await _fixture.ServerClient.GetAsync($"/api/v1/Tenant/{_fixture.CreatedTenantId}");
-
+
response.StatusCode.Should().Be(HttpStatusCode.OK);
-
+
var message = await response.Content.ReadAsJsonAsync();
-
+
message?.Data.Should().NotBeNull();
-
+
message!.Data!.Id.Should().Be(_fixture.CreatedTenantId);
message.Data.Name.Should().Be("Test Tenant");
}
-
+
[Fact]
[Priority(5)]
public async Task Should_Get_All_Tenants()
@@ -48,89 +48,89 @@ public sealed class TenantControllerTests : IClassFixture
await _fixture.AuthenticateUserAsync();
var response = await _fixture.ServerClient.GetAsync("api/v1/Tenant");
-
+
response.StatusCode.Should().Be(HttpStatusCode.OK);
-
+
var message = await response.Content.ReadAsJsonAsync>();
-
+
message?.Data.Should().NotBeEmpty();
message!.Data.Should().HaveCountGreaterOrEqualTo(2);
message.Data!
.FirstOrDefault(x => x.Id == _fixture.CreatedTenantId)
.Should().NotBeNull();
}
-
+
[Fact]
[Priority(10)]
public async Task Should_Create_Tenant()
{
await _fixture.AuthenticateUserAsync();
-
+
var request = new CreateTenantViewModel("Test Tenant 2");
-
+
var response = await _fixture.ServerClient.PostAsJsonAsync("/api/v1/Tenant", request);
-
+
response.StatusCode.Should().Be(HttpStatusCode.OK);
-
+
var message = await response.Content.ReadAsJsonAsync();
var tenantId = message?.Data;
-
+
// Check if tenant exists
var tenantResponse = await _fixture.ServerClient.GetAsync($"/api/v1/Tenant/{tenantId}");
-
+
tenantResponse.StatusCode.Should().Be(HttpStatusCode.OK);
var tenantMessage = await tenantResponse.Content.ReadAsJsonAsync();
-
+
tenantMessage?.Data.Should().NotBeNull();
-
+
tenantMessage!.Data!.Id.Should().Be(tenantId!.Value);
tenantMessage.Data.Name.Should().Be(request.Name);
}
-
+
[Fact]
[Priority(15)]
public async Task Should_Update_Tenant()
{
await _fixture.AuthenticateUserAsync();
-
+
var request = new UpdateTenantViewModel(_fixture.CreatedTenantId, "Test Tenant 3");
-
+
var response = await _fixture.ServerClient.PutAsJsonAsync("/api/v1/Tenant", request);
-
+
response.StatusCode.Should().Be(HttpStatusCode.OK);
-
+
var message = await response.Content.ReadAsJsonAsync();
-
+
message?.Data.Should().NotBeNull();
message!.Data.Should().BeEquivalentTo(request);
-
+
// Check if tenant is updated
var tenantResponse = await _fixture.ServerClient.GetAsync($"/api/v1/Tenant/{_fixture.CreatedTenantId}");
-
+
tenantResponse.StatusCode.Should().Be(HttpStatusCode.OK);
-
+
var tenantMessage = await response.Content.ReadAsJsonAsync();
-
+
tenantMessage?.Data.Should().NotBeNull();
-
+
tenantMessage!.Data!.Id.Should().Be(_fixture.CreatedTenantId);
tenantMessage.Data.Name.Should().Be(request.Name);
}
-
+
[Fact]
[Priority(20)]
public async Task Should_Delete_Tenant()
{
await _fixture.AuthenticateUserAsync();
-
+
var response = await _fixture.ServerClient.DeleteAsync($"/api/v1/Tenant/{_fixture.CreatedTenantId}");
-
+
response.StatusCode.Should().Be(HttpStatusCode.OK);
-
+
// Check if tenant is deleted
var tenantResponse = await _fixture.ServerClient.GetAsync($"/api/v1/Tenant/{_fixture.CreatedTenantId}");
-
+
tenantResponse.StatusCode.Should().Be(HttpStatusCode.NotFound);
}
}
\ No newline at end of file
diff --git a/CleanArchitecture.IntegrationTests/Controller/UserControllerTests.cs b/CleanArchitecture.IntegrationTests/Controller/UserControllerTests.cs
index 4fd17ef..b3dd980 100644
--- a/CleanArchitecture.IntegrationTests/Controller/UserControllerTests.cs
+++ b/CleanArchitecture.IntegrationTests/Controller/UserControllerTests.cs
@@ -26,13 +26,13 @@ public sealed class UserControllerTests : IClassFixture
}
// Todo: Refactor tests to work alone
-
+
[Fact]
[Priority(0)]
public async Task Should_Create_User()
{
await _fixture.AuthenticateUserAsync();
-
+
var user = new CreateUserViewModel(
_fixture.CreatedUserEmail,
"Test",
@@ -237,7 +237,7 @@ public sealed class UserControllerTests : IClassFixture
var content = message!.Data;
content.Should().Be(_fixture.CreatedUserId);
-
+
// Todo: Check if stuff is done
}
}
\ No newline at end of file
diff --git a/CleanArchitecture.IntegrationTests/Fixtures/TenantTestFixture.cs b/CleanArchitecture.IntegrationTests/Fixtures/TenantTestFixture.cs
index 0ab2498..dffe6cc 100644
--- a/CleanArchitecture.IntegrationTests/Fixtures/TenantTestFixture.cs
+++ b/CleanArchitecture.IntegrationTests/Fixtures/TenantTestFixture.cs
@@ -7,7 +7,7 @@ namespace CleanArchitecture.IntegrationTests.Fixtures;
public sealed class TenantTestFixture : TestFixtureBase
{
public Guid CreatedTenantId { get; } = Guid.NewGuid();
-
+
protected override void SeedTestData(ApplicationDbContext context)
{
context.Tenants.Add(new Tenant(
diff --git a/CleanArchitecture.IntegrationTests/Fixtures/TestFixtureBase.cs b/CleanArchitecture.IntegrationTests/Fixtures/TestFixtureBase.cs
index 80c2273..0be073f 100644
--- a/CleanArchitecture.IntegrationTests/Fixtures/TestFixtureBase.cs
+++ b/CleanArchitecture.IntegrationTests/Fixtures/TestFixtureBase.cs
@@ -1,5 +1,4 @@
using System;
-using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using CleanArchitecture.Application.ViewModels.Users;
@@ -36,7 +35,7 @@ public class TestFixtureBase
IServiceProvider scopedServices)
{
}
-
+
// Todo: Fix auth
public virtual async Task AuthenticateUserAsync()
{
diff --git a/CleanArchitecture.IntegrationTests/Fixtures/gRPC/GetTenantsByIdsTestFixture.cs b/CleanArchitecture.IntegrationTests/Fixtures/gRPC/GetTenantsByIdsTestFixture.cs
index 5c9c3bd..b6f2672 100644
--- a/CleanArchitecture.IntegrationTests/Fixtures/gRPC/GetTenantsByIdsTestFixture.cs
+++ b/CleanArchitecture.IntegrationTests/Fixtures/gRPC/GetTenantsByIdsTestFixture.cs
@@ -7,9 +7,6 @@ namespace CleanArchitecture.IntegrationTests.Fixtures.gRPC;
public sealed class GetTenantsByIdsTestFixture : TestFixtureBase
{
- public GrpcChannel GrpcChannel { get; }
- public Guid CreatedTenantId { get; } = Guid.NewGuid();
-
public GetTenantsByIdsTestFixture()
{
GrpcChannel = GrpcChannel.ForAddress("http://localhost", new GrpcChannelOptions
@@ -18,6 +15,9 @@ public sealed class GetTenantsByIdsTestFixture : TestFixtureBase
});
}
+ public GrpcChannel GrpcChannel { get; }
+ public Guid CreatedTenantId { get; } = Guid.NewGuid();
+
protected override void SeedTestData(ApplicationDbContext context)
{
base.SeedTestData(context);
@@ -30,7 +30,7 @@ public sealed class GetTenantsByIdsTestFixture : TestFixtureBase
public Tenant CreateTenant()
{
- return new(
+ return new Tenant(
CreatedTenantId,
"Test Tenant");
}
diff --git a/CleanArchitecture.IntegrationTests/Fixtures/gRPC/GetUsersByIdsTestFixture.cs b/CleanArchitecture.IntegrationTests/Fixtures/gRPC/GetUsersByIdsTestFixture.cs
index 22ce59b..c39c29b 100644
--- a/CleanArchitecture.IntegrationTests/Fixtures/gRPC/GetUsersByIdsTestFixture.cs
+++ b/CleanArchitecture.IntegrationTests/Fixtures/gRPC/GetUsersByIdsTestFixture.cs
@@ -9,9 +9,6 @@ namespace CleanArchitecture.IntegrationTests.Fixtures.gRPC;
public sealed class GetUsersByIdsTestFixture : TestFixtureBase
{
- public GrpcChannel GrpcChannel { get; }
- public Guid CreatedUserId { get; } = Guid.NewGuid();
-
public GetUsersByIdsTestFixture()
{
GrpcChannel = GrpcChannel.ForAddress("http://localhost", new GrpcChannelOptions
@@ -20,6 +17,9 @@ public sealed class GetUsersByIdsTestFixture : TestFixtureBase
});
}
+ public GrpcChannel GrpcChannel { get; }
+ public Guid CreatedUserId { get; } = Guid.NewGuid();
+
protected override void SeedTestData(ApplicationDbContext context)
{
base.SeedTestData(context);
diff --git a/CleanArchitecture.IntegrationTests/Infrastructure/CleanArchitectureWebApplicationFactory.cs b/CleanArchitecture.IntegrationTests/Infrastructure/CleanArchitectureWebApplicationFactory.cs
index 63578e2..9a52c4d 100644
--- a/CleanArchitecture.IntegrationTests/Infrastructure/CleanArchitectureWebApplicationFactory.cs
+++ b/CleanArchitecture.IntegrationTests/Infrastructure/CleanArchitectureWebApplicationFactory.cs
@@ -47,19 +47,19 @@ public sealed class CleanArchitectureWebApplicationFactory : WebApplicationFacto
services.SetupTestDatabase(_connection);
services.SetupTestDatabase(_connection);
- ServiceProvider sp = services.BuildServiceProvider();
+ var sp = services.BuildServiceProvider();
- using IServiceScope scope = sp.CreateScope();
- IServiceProvider scopedServices = scope.ServiceProvider;
+ using var scope = sp.CreateScope();
+ var scopedServices = scope.ServiceProvider;
- ApplicationDbContext applicationDbContext = scopedServices.GetRequiredService();
- EventStoreDbContext storeDbContext = scopedServices.GetRequiredService();
- DomainNotificationStoreDbContext domainStoreDbContext = scopedServices.GetRequiredService();
+ var applicationDbContext = scopedServices.GetRequiredService();
+ var storeDbContext = scopedServices.GetRequiredService();
+ var domainStoreDbContext = scopedServices.GetRequiredService();
applicationDbContext.EnsureMigrationsApplied();
var creator2 = (RelationalDatabaseCreator)storeDbContext.Database
- .GetService();
+ .GetService();
creator2.CreateTables();
var creator3 = (RelationalDatabaseCreator)domainStoreDbContext
diff --git a/CleanArchitecture.IntegrationTests/gRPC/GetTenantsByIdsTests.cs b/CleanArchitecture.IntegrationTests/gRPC/GetTenantsByIdsTests.cs
index 5c939a3..d6c2e8b 100644
--- a/CleanArchitecture.IntegrationTests/gRPC/GetTenantsByIdsTests.cs
+++ b/CleanArchitecture.IntegrationTests/gRPC/GetTenantsByIdsTests.cs
@@ -26,9 +26,9 @@ public sealed class GetTenantsByIdsTests : IClassFixture
-
-
-
-
+
+
+
+
-
-
-
+
+
+
diff --git a/CleanArchitecture.Shared/CleanArchitecture.Shared.csproj b/CleanArchitecture.Shared/CleanArchitecture.Shared.csproj
index 882f5b9..7547394 100644
--- a/CleanArchitecture.Shared/CleanArchitecture.Shared.csproj
+++ b/CleanArchitecture.Shared/CleanArchitecture.Shared.csproj
@@ -1,9 +1,9 @@
-
- net7.0
- enable
-
+
+ net7.0
+ enable
+
diff --git a/CleanArchitecture.Shared/Users/UserViewModel.cs b/CleanArchitecture.Shared/Users/UserViewModel.cs
index c183ded..d08d316 100644
--- a/CleanArchitecture.Shared/Users/UserViewModel.cs
+++ b/CleanArchitecture.Shared/Users/UserViewModel.cs
@@ -7,4 +7,4 @@ public sealed record UserViewModel(
string Email,
string FirstName,
string LastName,
- bool IsDeleted);
+ bool IsDeleted);
\ No newline at end of file
diff --git a/CleanArchitecture.gRPC.Tests/CleanArchitecture.gRPC.Tests.csproj b/CleanArchitecture.gRPC.Tests/CleanArchitecture.gRPC.Tests.csproj
index e4730d8..dfc5b4f 100644
--- a/CleanArchitecture.gRPC.Tests/CleanArchitecture.gRPC.Tests.csproj
+++ b/CleanArchitecture.gRPC.Tests/CleanArchitecture.gRPC.Tests.csproj
@@ -8,11 +8,11 @@
-
-
-
-
-
+
+
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
@@ -24,9 +24,9 @@
-
-
-
+
+
+
diff --git a/CleanArchitecture.gRPC.Tests/Fixtures/TenantTestFixture.cs b/CleanArchitecture.gRPC.Tests/Fixtures/TenantTestFixture.cs
index 4fb0177..3910cc2 100644
--- a/CleanArchitecture.gRPC.Tests/Fixtures/TenantTestFixture.cs
+++ b/CleanArchitecture.gRPC.Tests/Fixtures/TenantTestFixture.cs
@@ -10,24 +10,24 @@ namespace CleanArchitecture.gRPC.Tests.Fixtures;
public sealed class TenantTestFixture
{
- public TenantsApiImplementation TenantsApiImplementation { get; }
- private ITenantRepository TenantRepository { get; }
-
- public IEnumerable ExistingTenants { get; }
-
public TenantTestFixture()
{
TenantRepository = Substitute.For();
ExistingTenants = new List
{
- new Tenant(Guid.NewGuid(), "Tenant 1"),
- new Tenant(Guid.NewGuid(), "Tenant 2"),
- new Tenant(Guid.NewGuid(), "Tenant 3"),
+ new(Guid.NewGuid(), "Tenant 1"),
+ new(Guid.NewGuid(), "Tenant 2"),
+ new(Guid.NewGuid(), "Tenant 3")
};
-
+
TenantRepository.GetAllNoTracking().Returns(ExistingTenants.BuildMock());
-
- TenantsApiImplementation = new(TenantRepository);
+
+ TenantsApiImplementation = new TenantsApiImplementation(TenantRepository);
}
+
+ public TenantsApiImplementation TenantsApiImplementation { get; }
+ private ITenantRepository TenantRepository { get; }
+
+ public IEnumerable ExistingTenants { get; }
}
\ No newline at end of file
diff --git a/CleanArchitecture.gRPC.Tests/Tenants/GetTenantsByIdsTests.cs b/CleanArchitecture.gRPC.Tests/Tenants/GetTenantsByIdsTests.cs
index 5a60273..61e51f5 100644
--- a/CleanArchitecture.gRPC.Tests/Tenants/GetTenantsByIdsTests.cs
+++ b/CleanArchitecture.gRPC.Tests/Tenants/GetTenantsByIdsTests.cs
@@ -24,7 +24,7 @@ public sealed class GetTenantsByIdsTests : IClassFixture
var result = await _fixture.TenantsApiImplementation.GetByIds(
SetupRequest(Enumerable.Empty()),
default!);
-
+
result.Tenants.Should().HaveCount(0);
}
@@ -37,36 +37,36 @@ public sealed class GetTenantsByIdsTests : IClassFixture
.Take(2)
.Select(tenant => tenant.Id)
.ToList();
-
+
ids.Add(nonExistingId);
-
+
var result = await _fixture.TenantsApiImplementation.GetByIds(
SetupRequest(ids),
default!);
-
+
result.Tenants.Should().HaveCount(2);
foreach (var tenant in result.Tenants)
{
var tenantId = Guid.Parse(tenant.Id);
-
+
tenantId.Should().NotBe(nonExistingId);
-
+
var mockTenant = _fixture.ExistingTenants.First(t => t.Id == tenantId);
-
+
mockTenant.Should().NotBeNull();
-
+
tenant.Name.Should().Be(mockTenant.Name);
}
}
-
+
private static GetTenantsByIdsRequest SetupRequest(IEnumerable ids)
{
var request = new GetTenantsByIdsRequest();
-
+
request.Ids.AddRange(ids.Select(id => id.ToString()));
request.Ids.Add("Not a guid");
-
+
return request;
}
}
\ No newline at end of file
diff --git a/CleanArchitecture.gRPC/CleanArchitecture.cs b/CleanArchitecture.gRPC/CleanArchitecture.cs
index 8aa7853..3a54670 100644
--- a/CleanArchitecture.gRPC/CleanArchitecture.cs
+++ b/CleanArchitecture.gRPC/CleanArchitecture.cs
@@ -4,18 +4,15 @@ namespace CleanArchitecture.gRPC;
public sealed class CleanArchitecture : ICleanArchitecture
{
- private readonly IUsersContext _users;
- private readonly ITenantsContext _tenants;
-
- public IUsersContext Users => _users;
- public ITenantsContext Tenants => _tenants;
-
public CleanArchitecture(
IUsersContext users,
ITenantsContext tenants)
{
- _users = users;
- _tenants = tenants;
-
+ Users = users;
+ Tenants = tenants;
}
-}
+
+ public IUsersContext Users { get; }
+
+ public ITenantsContext Tenants { get; }
+}
\ No newline at end of file
diff --git a/CleanArchitecture.gRPC/CleanArchitecture.gRPC.csproj b/CleanArchitecture.gRPC/CleanArchitecture.gRPC.csproj
index 1bec38c..068e549 100644
--- a/CleanArchitecture.gRPC/CleanArchitecture.gRPC.csproj
+++ b/CleanArchitecture.gRPC/CleanArchitecture.gRPC.csproj
@@ -6,9 +6,9 @@
-
-
-
+
+
+
diff --git a/CleanArchitecture.gRPC/Contexts/TenantsContext.cs b/CleanArchitecture.gRPC/Contexts/TenantsContext.cs
index a8235ad..f6038e4 100644
--- a/CleanArchitecture.gRPC/Contexts/TenantsContext.cs
+++ b/CleanArchitecture.gRPC/Contexts/TenantsContext.cs
@@ -20,11 +20,11 @@ public sealed class TenantsContext : ITenantsContext
public async Task> GetTenantsByIds(IEnumerable ids)
{
var request = new GetTenantsByIdsRequest();
-
+
request.Ids.AddRange(ids.Select(id => id.ToString()));
-
+
var result = await _client.GetByIdsAsync(request);
-
+
return result.Tenants.Select(tenant => new TenantViewModel(
Guid.Parse(tenant.Id),
tenant.Name));
diff --git a/CleanArchitecture.gRPC/Contexts/UsersContext.cs b/CleanArchitecture.gRPC/Contexts/UsersContext.cs
index a00cbb7..a6b02d2 100644
--- a/CleanArchitecture.gRPC/Contexts/UsersContext.cs
+++ b/CleanArchitecture.gRPC/Contexts/UsersContext.cs
@@ -32,4 +32,4 @@ public sealed class UsersContext : IUsersContext
user.LastName,
user.IsDeleted));
}
-}
+}
\ No newline at end of file
diff --git a/CleanArchitecture.gRPC/Extensions/ServiceCollectionExtensions.cs b/CleanArchitecture.gRPC/Extensions/ServiceCollectionExtensions.cs
index 89a9084..114c410 100644
--- a/CleanArchitecture.gRPC/Extensions/ServiceCollectionExtensions.cs
+++ b/CleanArchitecture.gRPC/Extensions/ServiceCollectionExtensions.cs
@@ -53,7 +53,7 @@ public static class ServiceCollectionExtensions
services.AddSingleton();
services.AddSingleton();
-
+
return services;
}
-}
+}
\ No newline at end of file
diff --git a/CleanArchitecture.gRPC/ICleanArchitecture.cs b/CleanArchitecture.gRPC/ICleanArchitecture.cs
index 9e04af9..9c92a1c 100644
--- a/CleanArchitecture.gRPC/ICleanArchitecture.cs
+++ b/CleanArchitecture.gRPC/ICleanArchitecture.cs
@@ -6,4 +6,4 @@ public interface ICleanArchitecture
{
IUsersContext Users { get; }
ITenantsContext Tenants { get; }
-}
+}
\ No newline at end of file
diff --git a/CleanArchitecture.gRPC/Interfaces/IUsersContext.cs b/CleanArchitecture.gRPC/Interfaces/IUsersContext.cs
index f1f2f04..c8b01f3 100644
--- a/CleanArchitecture.gRPC/Interfaces/IUsersContext.cs
+++ b/CleanArchitecture.gRPC/Interfaces/IUsersContext.cs
@@ -8,4 +8,4 @@ namespace CleanArchitecture.gRPC.Interfaces;
public interface IUsersContext
{
Task> GetUsersByIds(IEnumerable ids);
-}
+}
\ No newline at end of file
diff --git a/CleanArchitecture.gRPC/Models/GRPCSettings.cs b/CleanArchitecture.gRPC/Models/GRPCSettings.cs
index fd7a02c..e784168 100644
--- a/CleanArchitecture.gRPC/Models/GRPCSettings.cs
+++ b/CleanArchitecture.gRPC/Models/GRPCSettings.cs
@@ -3,4 +3,4 @@
public sealed class GRPCSettings
{
public string CleanArchitectureUrl { get; set; } = string.Empty;
-}
+}
\ No newline at end of file