dotnet-digital-ops/DigitalOps.CQRS/Commands/Client/AddClientCommand.cs

45 lines
1.4 KiB
C#

using DigitalOps.Authority.Services;
using DigitalOps.Authority.Validators;
using DigitalOps.CQRS.Services.Client;
using DigitalOps.CQRS.Services.Client.Options;
using DigitalOps.Dal;
using DigitalOps.Dal.DbEntity;
using DigitalOps.Dal.Validators;
using FluentValidation;
using OpenHarbor.CQRS.Abstractions;
namespace DigitalOps.CQRS.Commands.Client;
public class AddClientCommand
{
public long OrganizationId { get; set; }
public required string Name { get; set; }
}
public class AddClientCommandHandler(ClientService clientService) : ICommandHandler<AddClientCommand>
{
public async Task HandleAsync(AddClientCommand command, CancellationToken cancellationToken = default)
{
await clientService.AddClientAsync(new AddClientOptions
{
Name = command.Name,
OrganizationId = command.OrganizationId
}, cancellationToken);
}
}
public class AddClientCommandValidator : AbstractValidator<AddClientCommand>
{
public AddClientCommandValidator(MainDbContext dbContext, UserIdentityService userIdentityService)
{
RuleFor(command => command.Name)
.NotEmpty()
.MinimumLength(3);
RuleFor(command => command.OrganizationId)
.Cascade(CascadeMode.Stop)
.NotEmpty()
.SetValidator(new DbEntityExistValidator<Dal.DbEntity.Organization, long>(dbContext))
.SetValidator(new HasAccessToOrganizationValidator(OrganizationRole.Member, dbContext, userIdentityService));
}
}