fix user logic

This commit is contained in:
mfnefd 2024-06-05 15:14:38 +04:00
parent 4f472bce41
commit 054ed4b461

View File

@ -1,4 +1,5 @@
using Contracts.BindingModels; using BusinessLogic.Tools;
using Contracts.BindingModels;
using Contracts.BusinessLogicContracts; using Contracts.BusinessLogicContracts;
using Contracts.Converters; using Contracts.Converters;
using Contracts.Exceptions; using Contracts.Exceptions;
@ -28,7 +29,10 @@ namespace BusinessLogic.BusinessLogic
public UserViewModel Create(UserBindingModel model) public UserViewModel Create(UserBindingModel model)
{ {
ArgumentNullException.ThrowIfNull(model); ArgumentNullException.ThrowIfNull(model);
// Проверяем пароль
_validatePassword(model.Password);
// Хешируем пароль
model.PasswordHash = PasswordHasher.Hash(model.Password);
var user = _userStorage.Insert(model); var user = _userStorage.Insert(model);
if (user is null) if (user is null)
{ {
@ -46,7 +50,7 @@ namespace BusinessLogic.BusinessLogic
var user = _userStorage.Delete(model); var user = _userStorage.Delete(model);
if (user is null) if (user is null)
{ {
throw new Exception("Update operation failed."); throw new ElementNotFoundException();
} }
return UserConverter.ToView(user); return UserConverter.ToView(user);
@ -85,6 +89,11 @@ namespace BusinessLogic.BusinessLogic
{ {
ArgumentNullException.ThrowIfNull(model); ArgumentNullException.ThrowIfNull(model);
if (model.Password is not null)
{
_validatePassword(model.Password);
model.PasswordHash = PasswordHasher.Hash(model.Password);
}
var user = _userStorage.Update(model); var user = _userStorage.Update(model);
if (user is null) if (user is null)
{ {
@ -92,5 +101,32 @@ namespace BusinessLogic.BusinessLogic
} }
return UserConverter.ToView(user); return UserConverter.ToView(user);
} }
public UserViewModel Login(UserBindingModel model)
{
ArgumentNullException.ThrowIfNull(model);
var user = _userStorage.GetElement(new() { Email = model.Email });
if (user is null)
{
throw new ElementNotFoundException();
}
// Проверяем пароль
_validatePassword(model.Password);
if (PasswordHasher.Verify(model.Password, user.PasswordHash))
{
throw new AccountException("The passwords don't match.");
}
return UserConverter.ToView(user);
}
public void _validatePassword(string? password)
{
if (string.IsNullOrWhiteSpace(password))
{
throw new AccountException("The password is null.");
}
}
} }
} }