Доброго времени суток.
Пишу в данный момент WebAPI к которому потом будет сделан клиент, для этого выделил Core библиотеку с общими классами, которые будут использоваться и в API и в клиенте, но как быть с валидаторами (FluentValidation), которые могут использовать в себе сервисы API?
Как пример:
spoiler
public class RegistreRequestValidator : AbstractValidator<RegisterRequest>
{
private readonly IAccountService accountService;
/// <summary>
/// Конструктор.
/// </summary>
public RegistreRequestValidator(
IStringLocalizer<RegisterRequest> regLocalizer,
IStringLocalizer<SharedResources> sharedLocalizer,
IAccountService accountService,
IOptions<RegexSettings> options)
{
this.accountService = accountService;
RuleFor(x => x.Email).EmailAddress().MustAsync(CheckEmailInDb).WithMessage(regLocalizer["EmailIsInUse"]);
RuleFor(x => x.Password).NotEmpty().Matches(options.Value.UserPasswordPattern);
RuleFor(x => x.ConfirmPassword).Equal(x => x.Password).WithMessage(sharedLocalizer["ConfirmPassword"]);
RuleFor(x => x.FirstName).NotEmpty().Length(2, 30).Matches(options.Value.UserFirstNamePattern);
}
/// <summary>
/// Проверяет, НЕ используется ли указанная почта у какого-либо пользователя.
/// </summary>
/// <param name="email">Почта.</param>
/// <returns><see cref="bool">true</see> если почта НЕ используется</returns>
async Task<bool> CheckEmailInDb(string email, CancellationToken _)
{
return !await accountService.CheckEmailAsync(email);
}
}
Как такой валидатор можно отдать клиенту?
Что с ним можно сделать?
Реализовывать на API метод проверки почты, на клиенте реализовать IAccountService, который будет обращаться к API (безопасность пострадает же)?
Как быть с локализацией, когда resx файлы сейчас лежат в сборке рядом с валидатором.
Зачем тащить в клиент потом, если они не нужны будут клиенту, потому что он будет локализованные API ответы получать.