From 5f1fd1acaa2b2876c85d15535e0f2792627059c3 Mon Sep 17 00:00:00 2001 From: Whoisthatjulia Date: Sun, 28 Apr 2024 21:02:22 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B8=D0=B7=D0=BE=D1=88?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=BE=D0=B1=D1=88=D0=B8=D0=B1=D0=BE=D1=87=D0=BA?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogic/CostLogic.cs | 138 +++++++++++++++++- .../BusinessLogic/EmployeeLogic.cs | 106 +++++++++++++- .../BusinessLogic/ReportLogic.cs | 12 -- 3 files changed, 232 insertions(+), 24 deletions(-) delete mode 100644 Bank/BankBusinessLogics/BusinessLogic/ReportLogic.cs diff --git a/Bank/BankBusinessLogics/BusinessLogic/CostLogic.cs b/Bank/BankBusinessLogics/BusinessLogic/CostLogic.cs index 5d9238e..c18253d 100644 --- a/Bank/BankBusinessLogics/BusinessLogic/CostLogic.cs +++ b/Bank/BankBusinessLogics/BusinessLogic/CostLogic.cs @@ -1,12 +1,138 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using BankContracts.BindingModels; +using BankContracts.BusinessLogicContracts; +using BankContracts.SearchModels; +using BankContracts.StoragesContracts; +using BankContracts.ViewModels; +using Microsoft.Extensions.Logging; namespace BankBusinessLogics.BusinessLogic { - internal class CostLogic + public class CostLogic : ICostLogic { + private readonly ILogger _logger; + private readonly ICostStorage _costStorage; + + public CostLogic(ILogger logger, ICostStorage costStorage) + { + _logger = logger; + _costStorage = costStorage; + } + + public void CheckModel(CostBindingModel model, bool checkParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (checkParams is false) + { + return; + } + + if (string.IsNullOrEmpty(model.NameOfCost)) + { + throw new ArgumentNullException($"Имя затраты не должно быть пустым"); + } + + if (model.Price <= 0) + { + throw new ArgumentException($"Стоимость должна быть больше 0"); + } + } + + public bool Create(CostBindingModel model) + { + try + { + CheckModel(model); + var result = _costStorage.Insert(model); + if (result == null) + { + throw new ArgumentNullException($"Затрата не создана"); + } + _logger.LogInformation("Была создана сущность {@CostViewModel}", result); + return true; + } + catch (Exception e) + { + _logger.LogError(e, "Произошла ошибка при попытки создать элемент по {@CostBindingModel} модели", model); + throw; + } + } + + public bool Delete(CostBindingModel model) + { + try + { + CheckModel(model, false); + var result = _costStorage.Delete(model); + if (result == null) + { + throw new ArgumentNullException($"Удалить затрату не удалось"); + } + _logger.LogInformation("Была удалена сущность {@CostViewModel}", result); + return true; + } + catch (Exception e) + { + _logger.LogError(e, "Произошла ошибка при попытки удалить элемент по {@CostBindingModel} модели", model); + throw; + } + } + + public CostViewModel ReadElement(CostSearchModel model) + { + try + { + var result = _costStorage.GetElement(model); + if (result == null) + { + throw new ArgumentNullException($"Не получилось получить id {model.Id}"); + } + _logger.LogInformation("Извлечение элемента {@CostViewModel} c затрат по {@CostSearchModel} модели", result, model); + return result; + } + catch (Exception e) + { + _logger.LogError(e, "Произошла ошибка при попытки получить элемент по {@CostSearchModel} модели", model); + throw; + } + } + + public List ReadList(CostSearchModel? model = null) + { + try + { + var results = model != null ? _costStorage.GetFilteredList(model) : _costStorage.GetFullList(); + _logger.LogDebug("Список полученных статей затрат {@costs}", results); + _logger.LogInformation("Извлечение списка c затрат по {@CostSearchModel} модели", model); + return results; + } + catch (Exception e) + { + _logger.LogError(e, "Произошла ошибка при попытки получить список по {@CostSearchModel} модели", model); + throw; + } + } + + public bool Update(CostBindingModel model) + { + try + { + //CheckModel(model); + var result = _costStorage.Update(model); + if (result == null) + { + throw new ArgumentNullException($"Не получилось обновить затраты"); + } + _logger.LogInformation("Обновлена сущность на {@CostViewModel}", result); + return true; + } + catch (Exception e) + { + _logger.LogError(e, "Произошла ошибка при попытки обновить элемент по {@CostBindingModel} модели", model); + throw; + } + } } } diff --git a/Bank/BankBusinessLogics/BusinessLogic/EmployeeLogic.cs b/Bank/BankBusinessLogics/BusinessLogic/EmployeeLogic.cs index 5623031..0151f47 100644 --- a/Bank/BankBusinessLogics/BusinessLogic/EmployeeLogic.cs +++ b/Bank/BankBusinessLogics/BusinessLogic/EmployeeLogic.cs @@ -1,12 +1,106 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using BankContracts.BindingModels; +using BankContracts.BusinessLogicContracts; +using BankContracts.SearchModels; +using BankContracts.StoragesContracts; +using BankContracts.ViewModels; +using Microsoft.Extensions.Logging; +using System.Text.RegularExpressions; namespace BankBusinessLogics.BusinessLogic { - internal class EmployeeLogic + public class EmployeeLogic : IEmployeeLogic { + + private readonly ILogger _logger; + private readonly IEmployeeStorage _employeeStorage; + public EmployeeLogic(ILogger 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.PhoneNumber)) + { + throw new ArgumentNullException(nameof(model.PhoneNumber), "Нет логина клиента"); + } + if (string.IsNullOrEmpty(model.Password)) + { + throw new ArgumentNullException(nameof(model.Password), "Нет пароля клиента"); + } + if (model.PhoneNumber.Length is < 12) + { + throw new ArgumentException(nameof(model.PhoneNumber), "Длина номера телефона должна быть 11 цифр"); + } + + 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); + var element = _employeeStorage.GetElement(new EmployeeSearchModel + { + PhoneNumber = model.PhoneNumber, + }); + if (element != null && element.Id != model.Id) + { + _logger.LogWarning("С номером {PhoneNumber}, уже есть пользователь: {@ExistEmployee}", model.PhoneNumber, element); + throw new InvalidOperationException($"Сотрудник с таким номером телефона уже есть"); + }*/ + } + + 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; + } + } } } diff --git a/Bank/BankBusinessLogics/BusinessLogic/ReportLogic.cs b/Bank/BankBusinessLogics/BusinessLogic/ReportLogic.cs deleted file mode 100644 index 6e42ebc..0000000 --- a/Bank/BankBusinessLogics/BusinessLogic/ReportLogic.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace BankBusinessLogics.BusinessLogic -{ - internal class ReportLogic - { - } -}