PIbd-21_Danilov_V.V._Course.../VeterinaryClinic/VeterinaryClinicBusinessLogics/BusinessLogics/UserLogic.cs
Владимир Данилов 848fbf8970 Бизнес-логика
2024-05-01 01:24:55 +04:00

140 lines
4.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VeterinaryClinicContracts.BindingModels;
using VeterinaryClinicContracts.BusinessLogicsContracts;
using VeterinaryClinicContracts.SearchModels;
using VeterinaryClinicContracts.StoragesContracts;
using VeterinaryClinicContracts.ViewModels;
using Microsoft.Extensions.Logging;
namespace VeterinaryClinicBusinessLogics.BusinessLogics
{
public class UserLogic : IUserLogic
{
private readonly ILogger _logger;
private readonly IUserStorage _userStorage;
public UserLogic(ILogger<UserLogic> logger, IUserStorage userStorage)
{
_logger = logger;
_userStorage = userStorage;
}
public bool Create(UserBindingModel model)
{
CheckModel(model);
_logger.LogInformation("Create. User.Id: {Id}", model.Id);
if (_userStorage.Insert(model) == null)
{
_logger.LogWarning("Insert operation failed");
return false;
}
return true;
}
public bool Delete(UserBindingModel model)
{
CheckModel(model, false);
_logger.LogInformation("Delete. User.Id: {Id}", model.Id);
if (_userStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
public UserViewModel? ReadElement(UserSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. User.Id: {Id}. Email: {Email}. Password: {Password}", model?.Id, model?.Email, model?.Password);
var element = _userStorage.GetElement(model!);
if (element == null)
{
_logger.LogWarning("ReadElement. Element not found");
return null;
}
_logger.LogInformation("ReadElement. Find User.Id: {Id}", element?.Id);
return element;
}
public List<UserViewModel>? ReadList(UserSearchModel? model)
{
_logger.LogInformation("ReadList. User.Id: {Id}. Email: {Email}. FullName: {FullName}", model?.Id, model?.Email, model?.FullName);
var list = model == null ? _userStorage.GetFullList() : _userStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList. Returned null list");
return null;
}
_logger.LogInformation("ReadList. Count: {Count}", list.Count);
return list;
}
public bool Update(UserBindingModel model)
{
CheckModel(model);
_logger.LogInformation("Update. User.Id: {Id}", model.Id);
if (_userStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
private void CheckModel(UserBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (!withParams)
{
return;
}
if (string.IsNullOrEmpty(model.FullName))
{
throw new ArgumentNullException("Не указано ФИО", nameof(model.FullName));
}
if (string.IsNullOrEmpty(model.Phone))
{
throw new ArgumentNullException("Не указан номер телефона", nameof(model.Phone));
}
if (string.IsNullOrEmpty(model.Password))
{
throw new ArgumentNullException("Не указан пароль", nameof(model.Password));
}
if (string.IsNullOrEmpty(model.Email))
{
throw new ArgumentNullException("Не указана электронная почта", nameof(model.Email));
}
_logger.LogInformation("CheckModel. User.Id: {Id}", model.Id);
var element = _userStorage.GetElement(new UserSearchModel
{
Email = model.Email
});
if (element != null && !element.Id.Equals(model.Id))
{
throw new InvalidOperationException("Пользователь с данной электронной почтой уже существует");
}
}
}
}