Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 8 additions & 13 deletions Commands.Test/Commands.Test.csproj
Original file line number Diff line number Diff line change
@@ -1,29 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="AutoMapper" Version="15.1.3" />
<PackageReference Include="FluentAssertions" Version="8.10.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="9.0.17" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.7.0" />
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PackageReference Include="FluentAssertions" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Moq" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="10.0.1">
<PackageReference Include="coverlet.collector">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Commands\Commands.csproj" />
<ProjectReference Include="..\Domain.Test\Domain.Test.csproj" />
</ItemGroup>

</Project>
</Project>
13 changes: 4 additions & 9 deletions Commands/Commands.csproj
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">

<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\Persistence\Persistence.csproj" />
<ProjectReference Include="..\Types\Types.csproj" />
<ProjectReference Include="..\Domain\Domain.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="FluentValidation" Version="12.1.1" />
<PackageReference Include="MediatR" Version="13.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.3.11" />
<PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.3.11" />
<PackageReference Include="FluentValidation" />
<PackageReference Include="MediatR" />
</ItemGroup>

</Project>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ namespace Commands.Handlers.BankAccount.AddBankAccount;

public record AddBankAccountCommand(
string Name,
string AccountNumber
string AccountNumber,
string PerformingUser
) : IRequest<Guid>;

public class AddAccountCommandValidator : AbstractValidator<AddBankAccountCommand>
Expand All @@ -18,5 +19,7 @@ public AddAccountCommandValidator()

RuleFor(x => x.Name)
.NotEmpty();
RuleFor(x => x.PerformingUser)
.NotEmpty();
}
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,19 @@
using Commands.Extensions;
using Commands.Services;

using Domain.Interfaces;

namespace Commands.Handlers.BankAccount.AddBankAccount;

public class AddBankAccountHandler : IRequestHandler<AddBankAccountCommand, Guid>
{
private readonly IBankAccountRepository _bankAccountRepository;
private readonly IUserAccessor _userAccessor;

public AddBankAccountHandler(IBankAccountRepository bankAccountRepository, IUserAccessor userAccessor)
public AddBankAccountHandler(IBankAccountRepository bankAccountRepository)
{
_bankAccountRepository = bankAccountRepository;
_userAccessor = userAccessor;
}

public async Task<Guid> Handle(AddBankAccountCommand request, CancellationToken ct)
{
var performingUser = _userAccessor.User.GetName()!;
var newAccount = new Domain.BankAccount(request.Name, request.AccountNumber, performingUser);
var newAccount = new Domain.BankAccount(request.Name, request.AccountNumber, request.PerformingUser);
_bankAccountRepository.Add(newAccount);
await _bankAccountRepository.SaveAsync(ct);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ namespace Commands.Handlers.BankAccount.EditBankAccount;
public record EditBankAccountCommand(
Guid Id,
string Name,
string AccountNumber
string AccountNumber,
string PerformingUser
) : IRequest<Guid>;

public class EditBankAccountValidator : AbstractValidator<EditBankAccountCommand>
Expand All @@ -22,5 +23,7 @@ public EditBankAccountValidator()
.NotEmpty()
.MinimumLength(5)
.MaximumLength(34);
RuleFor(x => x.PerformingUser)
.NotEmpty();
}
}
Original file line number Diff line number Diff line change
@@ -1,30 +1,23 @@
using Commands.Extensions;
using Commands.Services;

using Domain.Interfaces;

namespace Commands.Handlers.BankAccount.EditBankAccount;

public class EditBankAccountHandler : IRequestHandler<EditBankAccountCommand, Guid>
{
private readonly IBankAccountRepository _repository;
private readonly IUserAccessor _userAccessor;

public EditBankAccountHandler(IBankAccountRepository repository, IUserAccessor userAccessor)
public EditBankAccountHandler(IBankAccountRepository repository)
{
_repository = repository;
_userAccessor = userAccessor;
}

public async Task<Guid> Handle(EditBankAccountCommand request, CancellationToken cancellationToken)
{
var bankAccount = await _repository.GetByIdAsync(request.Id, cancellationToken)
?? throw new ArgumentException($"No bankaccount found for Id {request.Id}", nameof(request.Id));

var performingUser = _userAccessor.User.GetName()!;

bankAccount.ChangeName(request.Name, performingUser);
bankAccount.ChangeAccountNumber(request.AccountNumber, performingUser);
bankAccount.ChangeName(request.Name, request.PerformingUser);
bankAccount.ChangeAccountNumber(request.AccountNumber, request.PerformingUser);

await _repository.SaveAsync(cancellationToken);
return bankAccount.Id;
Expand Down
6 changes: 5 additions & 1 deletion Commands/Handlers/Member/AddMember/AddMemberCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ public record AddMemberCommand(
string Email,
string PhoneNumber,
double MembershipFee,
DateTimeOffset MembershipExpiryDate
DateTimeOffset MembershipExpiryDate,
string PerformingUser
) : IRequest<Guid>;

public class AddMemberCommandValidator : AbstractValidator<AddMemberCommand>
Expand Down Expand Up @@ -40,6 +41,9 @@ public AddMemberCommandValidator()

RuleFor(x => x.MembershipFee)
.GreaterThanOrEqualTo(0);

RuleFor(x => x.PerformingUser)
.NotEmpty();
}

public class AddMemberCommandAddressValidator : AbstractValidator<Address>
Expand Down
9 changes: 2 additions & 7 deletions Commands/Handlers/Member/AddMember/AddMemberHandler.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
using Commands.Extensions;
using Commands.Services;

using Domain.Interfaces;

using Microsoft.EntityFrameworkCore;
Expand All @@ -12,13 +9,11 @@ namespace Commands.Handlers.Member.AddMember;
public class AddMemberHandler : IRequestHandler<AddMemberCommand, Guid>
{
private readonly IMemberRepository _memberRepository;
private readonly IUserAccessor _userAccessor;
private readonly HaSpManContext _dbContext;

public AddMemberHandler(IMemberRepository memberRepository, IUserAccessor userAccessor, HaSpManContext dbContext)
public AddMemberHandler(IMemberRepository memberRepository, HaSpManContext dbContext)
{
_memberRepository = memberRepository;
_userAccessor = userAccessor;
_dbContext = dbContext;
}

Expand All @@ -31,7 +26,7 @@ public async Task<Guid> Handle(AddMemberCommand request, CancellationToken cance
lastName: request.LastName,
address: request.Address,
membershipFee: request.MembershipFee,
performedBy: _userAccessor.User.GetName() ?? throw new Exception("Command performed by user with no name"),
performedBy: request.PerformingUser,
membershipExpiryDate: request.MembershipExpiryDate,
email: request.Email,
phoneNumber: request.PhoneNumber
Expand Down
6 changes: 5 additions & 1 deletion Commands/Handlers/Member/EditMember/EditMemberCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ public record EditMemberCommand(
string Email,
string PhoneNumber,
double MembershipFee,
DateTimeOffset? MembershipExpiryDate
DateTimeOffset? MembershipExpiryDate,
string PerformingUser
) : IRequest;

public class EditMemberCommandValidator : AbstractValidator<EditMemberCommand>
Expand Down Expand Up @@ -41,6 +42,9 @@ public EditMemberCommandValidator()

RuleFor(x => x.MembershipFee)
.GreaterThanOrEqualTo(0);

RuleFor(x => x.PerformingUser)
.NotEmpty();
}

public class EditMemberCommandAddressValidator : AbstractValidator<Address>
Expand Down
9 changes: 2 additions & 7 deletions Commands/Handlers/Member/EditMember/EditMemberHandler.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
using Commands.Extensions;
using Commands.Services;

using Domain.Interfaces;

using Microsoft.EntityFrameworkCore;
Expand All @@ -12,13 +9,11 @@ namespace Commands.Handlers.Member.EditMember;
public class EditMemberHandler : IRequestHandler<EditMemberCommand>
{
private readonly IMemberRepository _memberRepository;
private readonly IUserAccessor _userAccessor;
private readonly HaSpManContext _dbContext;

public EditMemberHandler(IMemberRepository memberRepository, IUserAccessor userAccessor, HaSpManContext dbContext)
public EditMemberHandler(IMemberRepository memberRepository, HaSpManContext dbContext)
{
_memberRepository = memberRepository;
_userAccessor = userAccessor;
_dbContext = dbContext;
}

Expand All @@ -29,7 +24,7 @@ public async Task Handle(EditMemberCommand request, CancellationToken cancellati

await EnsureMemberIsNotBecomeDuplicate(request, cancellationToken);

var performingUser = _userAccessor.User.GetName()!;
var performingUser = request.PerformingUser;
member.ChangeAddress(request.Address, performingUser);
member.ChangeEmail(request.Email, performingUser);
member.ChangeMembershipExpiryDate(request.MembershipExpiryDate, performingUser);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Commands.Handlers.Member.ExtendMembership;

public record ExtendMembershipCommand(Guid Id, DateTime NewMembershipExpirationDate) : IRequest;
public record ExtendMembershipCommand(Guid Id, DateTime NewMembershipExpirationDate, string PerformingUser) : IRequest;

public class ExtendMembershipCommandValidator : AbstractValidator<ExtendMembershipCommand>
{
Expand All @@ -12,5 +12,7 @@ public ExtendMembershipCommandValidator()
.NotEmpty();
RuleFor(x => x.NewMembershipExpirationDate)
.NotEmpty();
RuleFor(x => x.PerformingUser)
.NotEmpty();
}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,22 @@
using Commands.Extensions;
using Commands.Services;

using Domain.Interfaces;
using Domain.Interfaces;

namespace Commands.Handlers.Member.ExtendMembership;

public class ExtendMembershipHandler : IRequestHandler<ExtendMembershipCommand>
{
private readonly IMemberRepository _repository;
private readonly IUserAccessor _userAccessor;

public ExtendMembershipHandler(IMemberRepository repository, IUserAccessor userAccessor)
public ExtendMembershipHandler(IMemberRepository repository)
{
_repository = repository;
_userAccessor = userAccessor;
}

public async Task Handle(ExtendMembershipCommand request, CancellationToken cancellationToken)
{
var member = await _repository.GetById(request.Id)
?? throw new ArgumentException($"No member found by Id {request.Id}", nameof(request.Id));

var performingUser = _userAccessor.User.GetName()!;

member.ChangeMembershipExpiryDate(request.NewMembershipExpirationDate, performingUser);

member.ChangeMembershipExpiryDate(request.NewMembershipExpirationDate, request.PerformingUser);

await _repository.Save(cancellationToken);
}
Expand Down
12 changes: 12 additions & 0 deletions Commands/Properties/launchSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"profiles": {
"Commands": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:63966;http://localhost:63977"
}
}
}
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
Expand Down
33 changes: 33 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
<NoWarn>$(NoWarn);NU1507</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="AutoMapper" Version="16.2.0" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.29.1" />
<PackageVersion Include="Bogus" Version="35.6.5" />
<PackageVersion Include="coverlet.collector" Version="10.0.1" />
<PackageVersion Include="FluentAssertions" Version="8.10.0" />
<PackageVersion Include="FluentValidation" Version="12.1.1" />
<PackageVersion Include="GitVersion.MsBuild" Version="5.12.0" />
<PackageVersion Include="LinqKit" Version="1.3.11" />
<PackageVersion Include="MediatR" Version="13.1.0" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Components.DataAnnotations.Validation" Version="3.2.0-rc1.20223.4" />
<PackageVersion Include="Microsoft.AspNetCore.Http" Version="2.3.11" />
<PackageVersion Include="Microsoft.AspNetCore.Identity" Version="2.3.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11" />
<PackageVersion Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="8.22.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.9.0" />
<PackageVersion Include="Moq" Version="4.20.72" />
<PackageVersion Include="MudBlazor" Version="8.15.0" />
<PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
</ItemGroup>
</Project>
Loading
Loading