2024-04-29 20:07:03 +04:00

99 lines
3.8 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 UniversityContracts.BindingModels;
using UniversityContracts.BusinessLogicContracts;
using UniversityContracts.SearchModels;
using UniversityContracts.StoragesContracts;
using UniversityContracts.ViewModels;
using Microsoft.Extensions.Logging;
using System.Text.RegularExpressions;
namespace UniversityBusinessLogics.BusinessLogic
{
public class EmployeeLogic : IEmployeeLogic
{
private readonly ILogger _logger;
private readonly IEmployeeStorage _employeeStorage;
public EmployeeLogic(ILogger<EmployeeLogic> logger, IEmployeeStorage employeeStorage)
{
_logger = logger;
_employeeStorage = employeeStorage;
}
private void CheckModel(EmployeeBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (!withParams)
{
return;
}
if (string.IsNullOrEmpty(model.Login))
{
throw new ArgumentNullException(nameof(model.Login), "Нет логина клиента");
}
if (string.IsNullOrEmpty(model.Password))
{
throw new ArgumentNullException(nameof(model.Password), "Нет пароля клиента");
}
if (model.Password.Length < 5)
{
throw new ArgumentException(nameof(model.Password),
"Пароль пользователя должен быть не менее 5 символов");
}
if (!Regex.IsMatch(model.Password, "[0-9]+"))
{
throw new ArgumentException(nameof(model.Password),
"Пароль пользователя должен содержать хотя бы одну цифру");
}
_logger.LogDebug("{level} Проверка логина пользователя на уникальность {@Employee}", model);
}
public bool Create(EmployeeBindingModel model)
{
try
{
CheckModel(model);
var result = _employeeStorage.Insert(model);
if (result == null)
{
throw new ArgumentNullException($"Сотрудник не создался");
}
_logger.LogInformation("Создана сущность: {@EmployeeViewModel}", result);
return true;
}
catch (Exception e)
{
_logger.LogError(e, "Ошибка при попытки создать элемент по {@EmployeeBindingModel} модели", model);
throw;
}
}
public EmployeeViewModel ReadElement(EmployeeSearchModel model)
{
try
{
var result = _employeeStorage.GetElement(model);
if (result == null)
{
throw new ArgumentNullException($"Результат получения элемента с id {model.Id} оказался нулевым");
}
_logger.LogInformation("Извлечение элемента {@EmployeeViewModel} c сотрудника по модели: {@EmployeeSearchModel}", result, model);
return result;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки получить элемент по модели: {@EmployeeSearchModel}", model);
throw;
}
}
}
}