diff --git a/Bank/BankBusinessLogic/BankBusinessLogic.csproj b/Bank/BankBusinessLogic/BankBusinessLogic.csproj index 35493a5..d7c0e65 100644 --- a/Bank/BankBusinessLogic/BankBusinessLogic.csproj +++ b/Bank/BankBusinessLogic/BankBusinessLogic.csproj @@ -1,26 +1,22 @@ - - net6.0 - enable - enable - + + net6.0 + enable + enable + - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - + + + + + + - - - - - + + + + + diff --git a/Bank/BankBusinessLogic/BusinessLogic/Cashier/AccountLogic.cs b/Bank/BankBusinessLogic/BusinessLogic/Cashier/AccountLogic.cs index 1c94ec9..ac23881 100644 --- a/Bank/BankBusinessLogic/BusinessLogic/Cashier/AccountLogic.cs +++ b/Bank/BankBusinessLogic/BusinessLogic/Cashier/AccountLogic.cs @@ -6,16 +6,10 @@ using BankContracts.ViewModels.Cashier.Diagram; using BankContracts.ViewModels.Cashier.ViewModels; using BankDataModels.Enums; using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace BankBusinessLogic.BusinessLogics.Cashier { - // Класс, реализующий бизнес-логику для счетов - public class AccountLogic : IAccountLogic + public class AccountLogic : IAccountLogic { private readonly ILogger _logger; @@ -23,7 +17,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier private readonly ICashWithdrawalLogic _cashWithdrawalLogic; private readonly IMoneyTransferLogic _moneyTransferLogic; - // Конструктор public AccountLogic(ILogger logger, IAccountStorage accountStorage, ICashWithdrawalLogic cashWithdrawalLogic, IMoneyTransferLogic moneyTransferLogic) { @@ -33,7 +26,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier _moneyTransferLogic = moneyTransferLogic; } - // Вывод конкретного счёта public AccountViewModel? ReadElement(AccountSearchModel model) { if (model == null) @@ -57,11 +49,11 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return element; } - // Вывод всего списка счетов public List? ReadList(AccountSearchModel? model) { + //_logger.LogInformation("ReadList. AccountNumber:{AccountNumber}. Id:{Id}", model.AccountNumber, model?.Id); - // list хранит весь список в случае, если model пришло со значением null на вход метода + //list хранит весь список в случае, если model пришло со значением null на вход метода var list = model == null ? _accountStorage.GetFullList() : _accountStorage.GetFilteredList(model); if (list == null) @@ -75,10 +67,10 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return list; } - // Метод, отвечающий за изменение баланса на банковском счёте + //метод, отвечающий за изменение баланса счёта public bool ChangeBalance(AccountSearchModel? model, int sum) { - // Ищем счёт + //ищем счёт var account = ReadElement(model); if (account == null) @@ -86,13 +78,13 @@ namespace BankBusinessLogic.BusinessLogics.Cashier throw new ArgumentNullException("Счёт не найден", nameof(account)); } - // Проверяем возможность операции снятия (sum может быть отрицательной) + //проверяем возможность операции снятия (sum может быть отрицательной) if (sum + account.Balance < 0) { return false; } - // Обновляем балланс счёта + //обновляем балланс счёта _accountStorage.Update(new AccountBindingModel { Id = account.Id, @@ -102,7 +94,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - // Создание счёта public bool Create(AccountBindingModel model) { CheckModel(model); @@ -117,7 +108,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - // Обновление счёта public bool Update(AccountBindingModel model) { CheckModel(model); @@ -132,7 +122,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - // Удаление счёта public bool Delete(AccountBindingModel model) { CheckModel(model, false); @@ -149,85 +138,84 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - public List GetMonthInfo(int AccountId) - { + public List GetMonthInfo(int AccountId) + { - Dictionary<(int, int), int> cashWithdrawals = _cashWithdrawalLogic.ReadList(new CashWithdrawalSearchModel() - { - AccountId = AccountId, - }).Where(x => x.DebitingStatus == StatusEnum.Закрыта).GroupBy(x => new { x.DateOperation.Month, x.DateOperation.Year }) - .Select(x => new { x.Key.Month, x.Key.Year, Sum = x.Select(y => y.Sum).Sum() }).ToDictionary(x => (x.Month, x.Year), x => (x.Sum)); + Dictionary<(int, int), int> cashWithdrawals = _cashWithdrawalLogic.ReadList(new CashWithdrawalSearchModel() + { + AccountId = AccountId, + }).Where(x => x.DebitingStatus == StatusEnum.Закрыта ).GroupBy(x => new { x.DateOperation.Month, x.DateOperation.Year }) + .Select(x => new { x.Key.Month, x.Key.Year, Sum = x.Select(y => y.Sum).Sum() }).ToDictionary(x => (x.Month, x.Year), x => (x.Sum)); - Dictionary<(int, int), int> moneyTransfers = _moneyTransferLogic.ReadList(new MoneyTransferSearchModel() - { - AccountPayeeId = AccountId, - }).GroupBy(x => new { x.DateOperation.Month, x.DateOperation.Year }) - .Select(x => new { x.Key.Month, x.Key.Year, Sum = x.Select(y => y.Sum).Sum() }).ToDictionary(x => (x.Month, x.Year), x => (x.Sum)); + Dictionary<(int, int), int> moneyTransfers = _moneyTransferLogic.ReadList(new MoneyTransferSearchModel() + { + AccountPayeeId = AccountId, + }).GroupBy(x => new { x.DateOperation.Month, x.DateOperation.Year }) + .Select(x => new { x.Key.Month, x.Key.Year, Sum = x.Select(y => y.Sum).Sum() }).ToDictionary(x => (x.Month, x.Year), x => (x.Sum)); - Dictionary<(int, int), int> moneyTransfersDebiting = _moneyTransferLogic.ReadList(new MoneyTransferSearchModel() - { - AccountSenderId = AccountId, - }).GroupBy(x => new { x.DateOperation.Month, x.DateOperation.Year }) - .Select(x => new { x.Key.Month, x.Key.Year, Sum = x.Select(y => y.Sum).Sum() }).ToDictionary(x => (x.Month, x.Year), x => (x.Sum)); + Dictionary<(int, int), int> moneyTransfersDebiting = _moneyTransferLogic.ReadList(new MoneyTransferSearchModel() + { + AccountSenderId = AccountId, + }).GroupBy(x => new { x.DateOperation.Month, x.DateOperation.Year }) + .Select(x => new { x.Key.Month, x.Key.Year, Sum = x.Select(y => y.Sum).Sum() }).ToDictionary(x => (x.Month, x.Year), x => (x.Sum)); - List result = new(); + List result = new(); int sum = 0; foreach (var key in cashWithdrawals.Keys.Union(moneyTransfers.Keys).Union(moneyTransfers.Keys).OrderBy(x => x.Item1 * 12 + x.Item2)) - { - if (cashWithdrawals.ContainsKey(key)) sum += cashWithdrawals.GetValueOrDefault(key); - if (moneyTransfers.ContainsKey(key)) sum += moneyTransfers.GetValueOrDefault(key); - if (moneyTransfers.ContainsKey(key)) sum -= moneyTransfersDebiting.GetValueOrDefault(key); - result.Add(new CashierDiagramElementsViewModel() { Name = Enum.GetName(typeof(Months), key.Item1) + " " + key.Item2.ToString(), Value = sum }); - } - return result; - } + { + if (cashWithdrawals.ContainsKey(key)) sum += cashWithdrawals.GetValueOrDefault(key); + if (moneyTransfers.ContainsKey(key)) sum += moneyTransfers.GetValueOrDefault(key); + if (moneyTransfers.ContainsKey(key)) sum -= moneyTransfersDebiting.GetValueOrDefault(key); + result.Add(new CashierDiagramElementsViewModel() { Name = Enum.GetName(typeof(Months), key.Item1) + " " + key.Item2.ToString(), Value = sum }); + } + return result; + } - // Проверка входного аргумента для методов Insert, Update и Delete - private void CheckModel(AccountBindingModel model, bool withParams = true) + //проверка входного аргумента для методов Insert, Update и Delete + private void CheckModel(AccountBindingModel model, bool withParams = true) { if (model == null) { throw new ArgumentNullException(nameof(model)); } - // Так как при удалении передаём как параметр false + //так как при удалении передаём как параметр false if (!withParams) { return; } - // Проверка на наличие номера счёта + //проверка на наличие номера счёта if (string.IsNullOrEmpty(model.AccountNumber)) { throw new ArgumentNullException("Отсутствие номера у счёта", nameof(model.AccountNumber)); } - // Проверка на наличие id владельца - if (model.CashierId < 0) + //проверка на наличие id владельца + if (model.CashierId < 0) { throw new ArgumentNullException("Некорректный Id владельца счёта", nameof(model.CashierId)); } - // Проверка на наличие id кассира, создавшего счёт + //проверка на наличие id кассира, создавшего счёт if (model.CashierId < 0) { throw new ArgumentNullException("Некорректный Id кассира, открывшего счёт", nameof(model.CashierId)); } - // Проверка на наличие пароля счёта - if (string.IsNullOrEmpty(model.PasswordAccount)) + //проверка на наличие пароля счёта + if (string.IsNullOrEmpty(model.PasswordAccount) ) { throw new ArgumentNullException("Некорректный пароль счёта", nameof(model.PasswordAccount)); } - if (model.Balance < 0) - { - throw new ArgumentNullException("Изначальный баланс аккаунта не может быть < 0", nameof(model.Balance)); - } + if (model.Balance < 0) { + throw new ArgumentNullException("Изначальный баланс аккаунта не может быть < 0", nameof(model.Balance)); + } - // Проверка на корректную дату открытия счёта + //проверка на корректную дату открытия счёта if (model.DateOpen > DateTime.Now) { throw new ArgumentNullException("Дата открытия счёта не может быть ранее текущей", nameof(model.DateOpen)); @@ -237,13 +225,13 @@ namespace BankBusinessLogic.BusinessLogics.Cashier "CashierId:{CashierId}. DateOpen:{DateOpen}. Id:{Id}", model.AccountNumber, model.PasswordAccount, model.ClientId, model.CashierId, model.DateOpen, model.Id); - // Для проверка на наличие такого же счёта + //для проверка на наличие такого же счёта var element = _accountStorage.GetElement(new AccountSearchModel { AccountNumber = model.AccountNumber, }); - // Если элемент найден и его Id не совпадает с Id переданного объекта + //если элемент найден и его Id не совпадает с Id переданного объекта if (element != null && element.Id != model.Id) { throw new InvalidOperationException("Счёт с таким номером уже существует"); diff --git a/Bank/BankBusinessLogic/BusinessLogic/Cashier/CashWithdrawalLogic.cs b/Bank/BankBusinessLogic/BusinessLogic/Cashier/CashWithdrawalLogic.cs index f55646c..f4828fe 100644 --- a/Bank/BankBusinessLogic/BusinessLogic/Cashier/CashWithdrawalLogic.cs +++ b/Bank/BankBusinessLogic/BusinessLogic/Cashier/CashWithdrawalLogic.cs @@ -7,16 +7,10 @@ using BankContracts.StoragesContracts.Client; using BankContracts.ViewModels.Cashier.ViewModels; using BankDataModels.Enums; using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace BankBusinessLogic.BusinessLogics.Cashier { - // Класс, реализующий бизнес-логику для снятия наличных - public class CashWithdrawalLogic : ICashWithdrawalLogic + public class CashWithdrawalLogic : ICashWithdrawalLogic { private readonly ILogger _logger; @@ -24,7 +18,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier private readonly IDebitingStorage _debitingStorage; - // Конструктор public CashWithdrawalLogic(ILogger logger, ICashWithdrawalStorage cashWithdrawalStorage, IDebitingStorage debitingStorage) { @@ -33,7 +26,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier _debitingStorage = debitingStorage; } - // Вывод конкретной операции public CashWithdrawalViewModel? ReadElement(CashWithdrawalSearchModel model) { if (model == null) @@ -58,13 +50,12 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return element; } - // Вывод всего списка операций public List? ReadList(CashWithdrawalSearchModel? model) { _logger.LogInformation("ReadElement. AccountId:{AccountId}. Sum:{Sum}. DateOperation:{DateOperation}. Id:{Id}", model?.AccountId, model?.Sum, model?.DateTo, model?.Id); - // list хранит весь список в случае, если model пришло со значением null на вход метода + //list хранит весь список в случае, если model пришло со значением null на вход метода var list = model == null ? _cashWithdrawalStorage.GetFullList() : _cashWithdrawalStorage.GetFilteredList(model); if (list == null) @@ -78,7 +69,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return list; } - // Создание операции public bool Create(CashWithdrawalBindingModel model, bool flag) { CheckModel(model); @@ -112,7 +102,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - // Обновление операции public bool Update(CashWithdrawalBindingModel model) { CheckModel(model); @@ -127,7 +116,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - // Удаление операции public bool Delete(CashWithdrawalBindingModel model) { CheckModel(model, false); @@ -144,7 +132,7 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - // Проверка входного аргумента для методов Insert, Update и Delete + //проверка входного аргумента для методов Insert, Update и Delete private void CheckModel(CashWithdrawalBindingModel model, bool withParams = true) { if (model == null) @@ -152,25 +140,25 @@ namespace BankBusinessLogic.BusinessLogics.Cashier throw new ArgumentNullException(nameof(model)); } - // Так как при удалении передаём как параметр false + //так как при удалении передаём как параметр false if (!withParams) { return; } - // Проверка на корректность Id счёта + //проверка на корректность Id счёта if (model.AccountId < 0) { throw new ArgumentNullException("Некорректный Id счёта", nameof(model.AccountId)); } - // Проверка на корректность снимаемой суммы + //проверка на корректность снимаемой суммы if (model.Sum <= 0) { throw new ArgumentNullException("Снимаемая сумма не может раняться нулю или быть меньше его", nameof(model.Sum)); } - // Проверка на корректную дату операции + //проверка на корректную дату операции if (model.DateOperation > DateTime.Now) { throw new ArgumentNullException("Дата операции не может быть позднее текущей", nameof(model.DateOperation)); diff --git a/Bank/BankBusinessLogic/BusinessLogic/Cashier/CashierLogic.cs b/Bank/BankBusinessLogic/BusinessLogic/Cashier/CashierLogic.cs index a9ea1db..fabd8e3 100644 --- a/Bank/BankBusinessLogic/BusinessLogic/Cashier/CashierLogic.cs +++ b/Bank/BankBusinessLogic/BusinessLogic/Cashier/CashierLogic.cs @@ -4,30 +4,21 @@ using BankContracts.SearchModels.Cashier; using BankContracts.StoragesContracts.Cashier; using BankContracts.ViewModels.Cashier.ViewModels; using Microsoft.Extensions.Logging; -using System.Text.RegularExpressions; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace BankBusinessLogic.BusinessLogics.Cashier { - // Класс, реализующий бизнес-логику для кассиров - public class CashierLogic : ICashierLogic + public class CashierLogic : ICashierLogic { private readonly ILogger _logger; private readonly ICashierStorage _cashierStorage; - // Конструктор public CashierLogic(ILogger logger, ICashierStorage cashierStorage) { _logger = logger; _cashierStorage = cashierStorage; } - // Вывод конкретного клиента public CashierViewModel? ReadElement(CashierSearchModel model) { if (model == null) @@ -35,7 +26,7 @@ namespace BankBusinessLogic.BusinessLogics.Cashier throw new ArgumentNullException(nameof(model)); } - _logger.LogInformation("ReadElement. CashierName:{Name}. CashierSurname:{Surname}. CashierPatronymic:{Patronymic}. Id:{Id}", + _logger.LogInformation("ReadElement. CashierName:{Name}. CashierSurname:{Surname}. CashierPatronymic:{Patronymic}. Id:{Id}", model.Name, model.Surname, model.Patronymic, model?.Id); var element = _cashierStorage.GetElement(model); @@ -52,13 +43,12 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return element; } - // Вывод отфильтрованного списка public List? ReadList(CashierSearchModel? model) { - _logger.LogInformation("ReadList. CashierName:{Name}. CashierSurname:{Surname}. CashierPatronymic:{Patronymic}. Id:{Id}", + _logger.LogInformation("ReadList. CashierName:{Name}. CashierSurname:{Surname}. CashierPatronymic:{Patronymic}. Id:{Id}", model.Name, model.Surname, model.Patronymic, model?.Id); - // list хранит весь список в случае, если model пришло со значением null на вход метода + //list хранит весь список в случае, если model пришло со значением null на вход метода var list = model == null ? _cashierStorage.GetFullList() : _cashierStorage.GetFilteredList(model); if (list == null) @@ -72,7 +62,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return list; } - // Создание кассира public bool Create(CashierBindingModel model) { CheckModel(model); @@ -87,7 +76,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - // Обновление кассира public bool Update(CashierBindingModel model) { CheckModel(model); @@ -102,7 +90,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - // Удаление кассира public bool Delete(CashierBindingModel model) { CheckModel(model, false); @@ -119,7 +106,7 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - // Проверка входного аргумента для методов Insert, Update и Delete + //проверка входного аргумента для методов Insert, Update и Delete private void CheckModel(CashierBindingModel model, bool withParams = true) { if (model == null) @@ -127,70 +114,53 @@ namespace BankBusinessLogic.BusinessLogics.Cashier throw new ArgumentNullException(nameof(model)); } - // Так как при удалении передаём как параметр false + //так как при удалении передаём как параметр false if (!withParams) { return; } - // Проверка на наличие имени + //проверка на наличие имени if (string.IsNullOrEmpty(model.Name)) { throw new ArgumentNullException("Отсутствие имени в учётной записи", nameof(model.Name)); } - // Проверка на наличие фамилия + //проверка на наличие фамилия if (string.IsNullOrEmpty(model.Surname)) { throw new ArgumentNullException("Отсутствие фамилии в учётной записи", nameof(model.Name)); } - // Проверка на наличие отчество + //проверка на наличие отчество if (string.IsNullOrEmpty(model.Patronymic)) { throw new ArgumentNullException("Отсутствие отчества в учётной записи", nameof(model.Name)); } - // Проверка на наличие почты + //проверка на наличие почты if (string.IsNullOrEmpty(model.Email)) { throw new ArgumentNullException("Отсутствие почты в учётной записи (логина)", nameof(model.Email)); } - // Проверка на наличие мобильного телефона - if (string.IsNullOrEmpty(model.Telephone)) - { - throw new ArgumentNullException("Нет моб.телефона пользователя", nameof(model.Telephone)); - } - - // Проверка на наличие пароля + //проверка на наличие пароля if (string.IsNullOrEmpty(model.Password)) { throw new ArgumentNullException("Отсутствие пароля в учётной записи", nameof(model.Password)); } - if (!Regex.IsMatch(model.Email, @"^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$", RegexOptions.IgnoreCase)) - { - throw new ArgumentException("Некорректная почта", nameof(model.Email)); - } - - if (!Regex.IsMatch(model.Password, @"^((\w+\d+\W+)|(\w+\W+\d+)|(\d+\w+\W+)|(\d+\W+\w+)|(\W+\w+\d+)|(\W+\d+\w+))[\w\d\W]*$", RegexOptions.IgnoreCase) - && model.Password.Length < 10 && model.Password.Length > 50) - { - throw new ArgumentException("Необходимо придумать другой пароль", nameof(model.Password)); - } - _logger.LogInformation("Cashier. CashierName:{Name}. CashierSurname:{Surname}. CashierPatronymic:{Patronymic}. " + "Email:{Email}. Password:{Password}. Id:{Id}", model.Name, model.Surname, model.Patronymic, model.Email, model.Password, model.Id); - // Для проверки на наличие такого же аккаунта + //для проверка на наличие такого же аккаунта var element = _cashierStorage.GetElement(new CashierSearchModel { Email = model.Email, }); - // Если элемент найден и его Id не совпадает с Id переданного объекта + //если элемент найден и его Id не совпадает с Id переданного объекта if (element != null && element.Id != model.Id) { throw new InvalidOperationException("Аккаунт с таким логином уже есть"); diff --git a/Bank/BankBusinessLogic/BusinessLogic/Cashier/MoneyTransferLogic.cs b/Bank/BankBusinessLogic/BusinessLogic/Cashier/MoneyTransferLogic.cs index 69de54c..e3714db 100644 --- a/Bank/BankBusinessLogic/BusinessLogic/Cashier/MoneyTransferLogic.cs +++ b/Bank/BankBusinessLogic/BusinessLogic/Cashier/MoneyTransferLogic.cs @@ -7,16 +7,10 @@ using BankContracts.StoragesContracts.Client; using BankContracts.ViewModels.Cashier.ViewModels; using BankDataModels.Enums; using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace BankBusinessLogic.BusinessLogics.Cashier { - // Класс, реализующий бизнес-логику для перевода наличных - public class MoneyTransferLogic : IMoneyTransferLogic + public class MoneyTransferLogic : IMoneyTransferLogic { private readonly ILogger _logger; @@ -24,7 +18,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier public readonly ICreditingStorage _creditingStorage; - // Конструктор public MoneyTransferLogic(ILogger logger, IMoneyTransferStorage moneyTransferStorage, ICreditingStorage creditingStorage) { _logger = logger; @@ -32,7 +25,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier _creditingStorage = creditingStorage; } - // Вывод конкретной операции public MoneyTransferViewModel? ReadElement(MoneyTransferSearchModel model) { if (model == null) @@ -57,13 +49,12 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return element; } - // Вывод всего списка операций на перевод наличных public List? ReadList(MoneyTransferSearchModel? model) { _logger.LogInformation("ReadElement. AccountSenderId:{AccountSenderId}. AccountPayeeId:{AccountPayeeId}. Sum:{Sum}. Id:{Id}", model?.AccountSenderId, model?.AccountPayeeId, model?.Sum, model?.Id); - // list хранит весь список в случае, если model пришло со значением null на вход метода + //list хранит весь список в случае, если model пришло со значением null на вход метода var list = model == null ? _moneyTransferStorage.GetFullList() : _moneyTransferStorage.GetFilteredList(model); if (list == null) @@ -77,7 +68,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return list; } - // Создание операции на перевод public bool Create(MoneyTransferBindingModel model) { CheckModel(model); @@ -89,7 +79,7 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return false; } - // Проверка на то, что это зачисление на карту, а не перевод между счетами + //проверка на то, что это зачисление на карту, а не перевод между счетами if (model.CreditingId.HasValue) { _creditingStorage.Update(new CreditingBindingModel @@ -104,7 +94,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - // Обновление операции на перевод public bool Update(MoneyTransferBindingModel model) { CheckModel(model); @@ -119,7 +108,6 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - // Удаление операции на перевод public bool Delete(MoneyTransferBindingModel model) { CheckModel(model, false); @@ -136,7 +124,7 @@ namespace BankBusinessLogic.BusinessLogics.Cashier return true; } - // Проверка входного аргумента для методов Insert, Update и Delete + //проверка входного аргумента для методов Insert, Update и Delete private void CheckModel(MoneyTransferBindingModel model, bool withParams = true) { if (model == null) @@ -144,31 +132,31 @@ namespace BankBusinessLogic.BusinessLogics.Cashier throw new ArgumentNullException(nameof(model)); } - // Так как при удалении передаём как параметр false + //так как при удалении передаём как параметр false if (!withParams) { return; } - // Проверка корректности Id счёта отправителя + //проверка корректности Id счёта отправителя if (model.AccountSenderId < 0) { throw new ArgumentNullException("Отсутствие Id у счёта отправителя", nameof(model.AccountSenderId)); } - // Проверка корректности Id счёта получателя + //проверка корректности Id счёта получателя if (model.AccountPayeeId < 0) { throw new ArgumentNullException("Отсутствие Id у счёта получателя", nameof(model.AccountPayeeId)); } - // Проверка на корректную сумму перевода + //проверка на корректную сумму перевода if (model.Sum <= 0) { throw new ArgumentNullException("Сумма перевода не может раняться нулю или быть меньше его", nameof(model.Sum)); } - // Проверка на корректную дату открытия счёта + //проверка на корректную дату открытия счёта if (model.DateOperation > DateTime.Now) { throw new ArgumentNullException("Дата операции не может быть ранее текущей", nameof(model.DateOperation)); diff --git a/Bank/BankBusinessLogic/BusinessLogic/Client/CardLogic.cs b/Bank/BankBusinessLogic/BusinessLogic/Client/CardLogic.cs index 4ddf2e8..4ad7c21 100644 --- a/Bank/BankBusinessLogic/BusinessLogic/Client/CardLogic.cs +++ b/Bank/BankBusinessLogic/BusinessLogic/Client/CardLogic.cs @@ -8,216 +8,160 @@ using BankContracts.BindingModels.Client; using BankContracts.SearchModels.Client; using BankContracts.ViewModels.Client.ViewModels; using BankContracts.SearchModels.Cashier; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace BankBusinessLogic.BusinessLogics.Client { - // Класс, реализующий бизнес-логику для банковских карт - public class CardLogic : ICardLogic - { - private readonly ILogger _logger; + public class CardLogic : ICardLogic + { + private readonly ILogger _logger; + private readonly ICardStorage _cardStorage; + private readonly IAccountLogic _accountLogic; + private readonly IDebitingLogic _debitingLogic; + private readonly ICreditingLogic _creditingLogic; - private readonly ICardStorage _cardStorage; + public CardLogic(ILogger logger, ICardStorage cardStorage, IAccountLogic accountLogic, + IDebitingLogic debitingLogic, ICreditingLogic creditingLogic) { + _logger = logger; + _cardStorage = cardStorage; + _accountLogic = accountLogic; + _debitingLogic = debitingLogic; + _creditingLogic = creditingLogic; + } - private readonly IAccountLogic _accountLogic; - - private readonly IDebitingLogic _debitingLogic; - - private readonly ICreditingLogic _creditingLogic; - - // Конструктор - public CardLogic(ILogger logger, ICardStorage cardStorage, IAccountLogic accountLogic, - IDebitingLogic debitingLogic, ICreditingLogic creditingLogic) - { - _logger = logger; - - _cardStorage = cardStorage; - _accountLogic = accountLogic; - _debitingLogic = debitingLogic; - _creditingLogic = creditingLogic; - } - - // Вывод конкретной банковской карты - public CardViewModel? ReadElement(CardSearchModel model) - { - if (model == null) - { - throw new ArgumentNullException(nameof(model)); - } - - _logger.LogInformation("ReadElement. CardNumber:{Number}.Id:{ Id}", model.Number, model.Id); - - var element = _cardStorage.GetElement(model); - - if (element == null) - { - _logger.LogWarning("ReadElement element not found"); - return null; - } - - _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); - - return element; - } - - // Вывод всего списка банковских карт - public List? ReadList(CardSearchModel? model) - { - _logger.LogInformation("ReadList. CardId:{Id}", model?.Id); - - // list хранит весь список в случае, если model пришло со значением null на вход метода - var list = model == null ? _cardStorage.GetFullList() : _cardStorage.GetFilteredList(model); - - if (list == null) - { - _logger.LogWarning("ReadList return null list"); - return null; - } - - _logger.LogInformation("ReadList. Count:{Count}", list.Count); - - return list; - } - - // Создание банковской карты public bool Create(CardBindingModel model) - { - CheckModel(model); + { + CheckModel(model); + if (_cardStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } - if (_cardStorage.Insert(model) == null) - { - _logger.LogWarning("Insert operation failed"); - return false; - } + public bool Delete(CardBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_cardStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } - return true; - } + public CardViewModel? ReadElement(CardSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. CardNumber:{Number}.Id:{ Id}", model.Number, model.Id); + var element = _cardStorage.GetElement(model); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + return element; + } - // Обновление банковской карты - public bool Update(CardBindingModel model) - { - CheckModel(model); + public List? ReadList(CardSearchModel? model) + { + _logger.LogInformation("ReadList. CardId:{Id}", model?.Id); + var list = model == null ? _cardStorage.GetFullList() : _cardStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } - if (_cardStorage.Update(model) == null) - { - _logger.LogWarning("Update operation failed"); - return false; - } + public bool Update(CardBindingModel model) + { + CheckModel(model); + if (_cardStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } - return true; - } + public List GetMonthInfo(int CardId) { - // Удаление банковской карты - public bool Delete(CardBindingModel model) - { - CheckModel(model, false); - _logger.LogInformation("Delete. Id:{Id}", model.Id); - if (_cardStorage.Delete(model) == null) - { - _logger.LogWarning("Delete operation failed"); - return false; - } - return true; - } + Dictionary<(int?, int?), int> debitings = _debitingLogic.ReadList(new DebitingSearchModel() + { + CardId = CardId, + Status = StatusEnum.Закрыта + }).GroupBy(x => new { x.DateClose?.Month, x.DateClose?.Year }) + .Select(x => new { x.Key.Month, x.Key.Year, Sum = x.Select(y => y.Sum).Sum()}).ToDictionary(x => (x.Month, x.Year), x => (x.Sum)); + Dictionary<(int?, int?), int> creditings = _creditingLogic.ReadList(new CreditingSearchModel() + { + CardId = CardId, + Status = StatusEnum.Закрыта + }).GroupBy(x => new { x.DateClose?.Month, x.DateClose?.Year }) + .Select(x => new { x.Key.Month, x.Key.Year, Sum = x.Select(y => y.Sum).Sum() }).ToDictionary(x => (x.Month, x.Year), x => (x.Sum)); - // Бизнес-логика для диаграмм, для получения информации по месяцам - public List GetMonthInfo(int CardId) - { - Dictionary<(int?, int?), int> debitings = _debitingLogic.ReadList(new DebitingSearchModel() - { - CardId = CardId, - Status = StatusEnum.Закрыта - }).GroupBy(x => new { x.DateClose?.Month, x.DateClose?.Year }) - .Select(x => new { x.Key.Month, x.Key.Year, Sum = x.Select(y => y.Sum).Sum() }).ToDictionary(x => (x.Month, x.Year), x => (x.Sum)); + List result = new(); + foreach (var key in debitings.Keys.Union(creditings.Keys).OrderBy(x => x.Item1 * 12 + x.Item2)) { + int sum = 0; + if (debitings.ContainsKey(key)) sum -= debitings.GetValueOrDefault(key); + if (creditings.ContainsKey(key)) sum += creditings.GetValueOrDefault(key); + result.Add(new ClientDiagramElementsViewModel() { Name = Enum.GetName(typeof(Months), key.Item1) + " " + key.Item2.ToString(), Value = sum}); + } + return result; + } - Dictionary<(int?, int?), int> creditings = _creditingLogic.ReadList(new CreditingSearchModel() - { - CardId = CardId, - Status = StatusEnum.Закрыта - }).GroupBy(x => new { x.DateClose?.Month, x.DateClose?.Year }) - .Select(x => new { x.Key.Month, x.Key.Year, Sum = x.Select(y => y.Sum).Sum() }).ToDictionary(x => (x.Month, x.Year), x => (x.Sum)); + private void CheckModel(CardBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.Number) || model.Number.Length != 16) + { + throw new ArgumentNullException("Неправильный номер карты", nameof(model.Number)); + } + if (string.IsNullOrEmpty(model.CVC) || model.CVC.Length != 3) + { + throw new ArgumentNullException("Неправильный СVC карты", nameof(model.CVC)); + } + if (model.Period < DateTime.Now) + { + throw new ArgumentNullException("Нет периода действия", nameof(model.Period)); + } + var cardElement = _cardStorage.GetElement(new CardSearchModel + { + Number = model.Number, + }); - List result = new(); + if (cardElement != null && cardElement.Id != model.Id) + { + throw new InvalidOperationException("Карта с таким ноиером уже есть"); + } - foreach (var key in debitings.Keys.Union(creditings.Keys).OrderBy(x => x.Item1 * 12 + x.Item2)) - { - int sum = 0; - if (debitings.ContainsKey(key)) sum -= debitings.GetValueOrDefault(key); - if (creditings.ContainsKey(key)) sum += creditings.GetValueOrDefault(key); - result.Add(new ClientDiagramElementsViewModel() { Name = Enum.GetName(typeof(Months), key.Item1) + " " + key.Item2.ToString(), Value = sum }); - } + var accountElement = _accountLogic.ReadElement(new AccountSearchModel + { + Id = model.AccountId, + ClientId = model.ClientID + }); - return result; - } - - // Проверка входного аргумента для методов Insert, Update и Delete - private void CheckModel(CardBindingModel model, bool withParams = true) - { - if (model == null) - { - throw new ArgumentNullException(nameof(model)); - } - - // Так как при удалении передаём как параметр false - if (!withParams) - { - return; - } - - // Проверка на наличие номера у банковской карты - if (string.IsNullOrEmpty(model.Number) || model.Number.Length != 16) - { - throw new ArgumentNullException("Неправильный номер карты", nameof(model.Number)); - } - - // Проверка на наличие CVC кода у банковской карты - if (string.IsNullOrEmpty(model.CVC) || model.CVC.Length != 3) - { - throw new ArgumentNullException("Неправильный СVC карты", nameof(model.CVC)); - } - - // Проверка на конкретный период действия карты - if (model.Period < DateTime.Now) - { - throw new ArgumentNullException("Нет периода действия", nameof(model.Period)); - } - - // Проверка на наличие id клиента, получившего карту (лишним не будет) - if (model.ClientID < 0) - { - throw new ArgumentNullException("Некорректный Id клиента, открывшего счёт", nameof(model.ClientID)); - } - - // Для проверка на наличие такой же банковской карты - var cardElement = _cardStorage.GetElement(new CardSearchModel - { - Number = model.Number, - }); - - // Если элемент найден и его Id не совпадает с Id переданного объекта - if (cardElement != null && cardElement.Id != model.Id) - { - throw new InvalidOperationException("Карта с таким ноиером уже есть"); - } - - var accountElement = _accountLogic.ReadElement(new AccountSearchModel - { - Id = model.AccountId, - ClientId = model.ClientID - }); - - // Проверка привязан ли счёт к данному клиенту - if (accountElement != null && accountElement.ClientId != model.ClientID) - { + if (accountElement != null && accountElement.ClientId != model.ClientID) + { throw new InvalidOperationException("Это не счёт данного клиента"); } - _logger.LogInformation("Card. Number:{Number}.CVC:{CVC}.ClientId:{ClientID}.Patronymic:{Period}.Id:{Id}", - model.Number, model.CVC, model.Period.ToString(), model.ClientID, model.Id); - } - } + _logger.LogInformation("Card. Number:{Number}.CVC:{CVC}.ClientId:{ClientID}.Patronymic:{Period}.Id:{Id}", + model.Number, model.CVC, model.Period.ToString(), model.ClientID, model.Id); + } + } } diff --git a/Bank/BankBusinessLogic/BusinessLogic/Client/ClientLogic.cs b/Bank/BankBusinessLogic/BusinessLogic/Client/ClientLogic.cs index 8f16c03..ceac6d0 100644 --- a/Bank/BankBusinessLogic/BusinessLogic/Client/ClientLogic.cs +++ b/Bank/BankBusinessLogic/BusinessLogic/Client/ClientLogic.cs @@ -4,190 +4,127 @@ using BankContracts.SearchModels.Client; using BankContracts.StoragesContracts.Client; using BankContracts.ViewModels.Client.ViewModels; using Microsoft.Extensions.Logging; -using System.Text.RegularExpressions; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace BankBusinessLogic.BusinessLogics.Client { - // Класс, реализующий бизнес-логику для клиентов - public class ClientLogic : IClientLogic - { - private readonly ILogger _logger; + public class ClientLogic : IClientLogic + { + private readonly ILogger _logger; + private readonly IClientStorage _clientStorage; - private readonly IClientStorage _clientStorage; + public ClientLogic(ILogger logger, IClientStorage clientStorage) { + _logger = logger; + _clientStorage = clientStorage; + } - // Конструктор - public ClientLogic(ILogger logger, IClientStorage clientStorage) - { - _logger = logger; - _clientStorage = clientStorage; - } + public bool Create(ClientBindingModel model) + { + CheckModel(model); + if (_clientStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } - // Вывод конкретного клиента - public ClientViewModel? ReadElement(ClientSearchModel model) - { - if (model == null) - { - throw new ArgumentNullException(nameof(model)); - } + public bool Delete(ClientBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_clientStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } - _logger.LogInformation("ReadElement. Name:{Name}.Surname:{Surname}.Patronymic:{Patronymic}.Id:{ Id}", model.Name, model.Surname, model.Patronymic, model.Id); - - var element = _clientStorage.GetElement(model); + public ClientViewModel? ReadElement(ClientSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Name:{Name}.Surname:{Surname}.Patronymic:{Patronymic}.Id:{ Id}", model.Name, model.Surname, model.Patronymic, model.Id); + var element = _clientStorage.GetElement(model); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + return element; + } - if (element == null) - { - _logger.LogWarning("ReadElement element not found"); - return null; - } + public List? ReadList(ClientSearchModel? model) + { + _logger.LogInformation("ReadList. ClientId:{Id}", model?.Id); + var list = model == null ? _clientStorage.GetFullList() : _clientStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } - _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + public bool Update(ClientBindingModel model) + { + CheckModel(model); + if (_clientStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } - return element; - } - - // Вывод отфильтрованного списка - public List? ReadList(ClientSearchModel? model) - { - _logger.LogInformation("ReadList. ClientId:{Id}", model?.Id); - - // list хранит весь список в случае, если model пришло со значением null на вход метода - var list = model == null ? _clientStorage.GetFullList() : _clientStorage.GetFilteredList(model); - - if (list == null) - { - _logger.LogWarning("ReadList return null list"); - return null; - } - - _logger.LogInformation("ReadList. Count:{Count}", list.Count); - - return list; - } - - // Создание клиента - public bool Create(ClientBindingModel model) - { - CheckModel(model); - - if (_clientStorage.Insert(model) == null) - { - _logger.LogWarning("Insert operation failed"); - return false; - } - - return true; - } - - // Обновление клиента - public bool Update(ClientBindingModel model) - { - CheckModel(model); - - if (_clientStorage.Update(model) == null) - { - _logger.LogWarning("Update operation failed"); - return false; - } - - return true; - } - - // Удаление клиента - public bool Delete(ClientBindingModel model) - { - CheckModel(model, false); - - _logger.LogInformation("Delete. Id:{Id}", model.Id); - - if (_clientStorage.Delete(model) == null) - { - _logger.LogWarning("Delete operation failed"); - return false; - } - - return true; - } - - // Проверка входного аргумента для методов Insert, Update и Delete - private void CheckModel(ClientBindingModel model, bool withParams = true) - { - if (model == null) - { - throw new ArgumentNullException(nameof(model)); - } - - // При удалении параметру withParams передаём false - if (!withParams) - { - return; - } - - // Проверка на наличие имени клиента - if (string.IsNullOrEmpty(model.Name)) - { - throw new ArgumentNullException("Нет имени пользователя", nameof(model.Name)); - } - - // Проверка на наличие фамилии клиента - if (string.IsNullOrEmpty(model.Surname)) - { - throw new ArgumentNullException("Нет фамилии пользователя", nameof(model.Surname)); - } - - // Проверка на наличие отчества клиента - if (string.IsNullOrEmpty(model.Patronymic)) - { - throw new ArgumentNullException("Нет отчества пользователя", nameof(model.Patronymic)); - } - - // Проверка на наличие электронной почты - if (string.IsNullOrEmpty(model.Email)) - { - throw new ArgumentNullException("Нет почты пользователя", nameof(model.Email)); - } - - // Проверка на наличие пароля - if (string.IsNullOrEmpty(model.Password)) - { - throw new ArgumentNullException("Нет пароля пользователя", nameof(model.Password)); - } - - // Проверка на наличие мобильного телефона - if (string.IsNullOrEmpty(model.Telephone)) - { - throw new ArgumentNullException("Нет моб.телефона пользователя", nameof(model.Telephone)); - } - - if (!Regex.IsMatch(model.Email, @"^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$", RegexOptions.IgnoreCase)) - { - throw new ArgumentException("Некорректная почта", nameof(model.Email)); - } - - if (!Regex.IsMatch(model.Password, @"^((\w+\d+\W+)|(\w+\W+\d+)|(\d+\w+\W+)|(\d+\W+\w+)|(\W+\w+\d+)|(\W+\d+\w+))[\w\d\W]*$", RegexOptions.IgnoreCase) - && model.Password.Length < 10 && model.Password.Length > 50) - { - throw new ArgumentException("Необходимо придумать другой пароль", nameof(model.Password)); - } - - _logger.LogInformation("Client. Name:{Name}.Surname:{Surname}.Patronymic:{Patronymic}.Email:{Email}.Password:{Password}.Telephone:{Telephone}.Id:{Id}", - model.Name, model.Surname, model.Patronymic, model.Email, model.Password, model.Telephone, model.Id); - - // Для проверка на наличие такого же аккаунта - var element = _clientStorage.GetElement(new ClientSearchModel - { - Email = model.Email, - }); - - // Если элемент найден и его Id не совпадает с Id переданного объекта - if (element != null && element.Id != model.Id) - { - throw new InvalidOperationException("Клиент с такой почтой уже есть"); - } - } - } + private void CheckModel(ClientBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.Name)) + { + throw new ArgumentNullException("Нет имени пользователя", nameof(model.Name)); + } + if (string.IsNullOrEmpty(model.Surname)) + { + throw new ArgumentNullException("Нет фамилии пользователя", nameof(model.Surname)); + } + if (string.IsNullOrEmpty(model.Patronymic)) + { + throw new ArgumentNullException("Нет отчества пользователя", nameof(model.Patronymic)); + } + if (string.IsNullOrEmpty(model.Email)) + { + throw new ArgumentNullException("Нет почты пользователя", nameof(model.Email)); + } + if (string.IsNullOrEmpty(model.Password)) + { + throw new ArgumentNullException("Нет пароля пользователя", nameof(model.Password)); + } + if (string.IsNullOrEmpty(model.Telephone)) + { + throw new ArgumentNullException("Нет телефона пользователя", nameof(model.Telephone)); + } + _logger.LogInformation("Client. Name:{Name}.Surname:{Surname}.Patronymic:{Patronymic}.Email:{Email}.Password:{Password}.Telephone:{Telephone}.Id:{Id}", + model.Name, model.Surname, model.Patronymic, model.Email, model.Password, model.Telephone, model.Id); + var element = _clientStorage.GetElement(new ClientSearchModel + { + Email = model.Email, + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Клиент с такой почтой уже есть"); + } + } + } } diff --git a/Bank/BankBusinessLogic/BusinessLogic/Client/CreditingLogic.cs b/Bank/BankBusinessLogic/BusinessLogic/Client/CreditingLogic.cs index 518b22f..ba30bdc 100644 --- a/Bank/BankBusinessLogic/BusinessLogic/Client/CreditingLogic.cs +++ b/Bank/BankBusinessLogic/BusinessLogic/Client/CreditingLogic.cs @@ -5,148 +5,112 @@ using BankContracts.StoragesContracts.Client; using BankContracts.BindingModels.Client; using BankContracts.ViewModels.Client.ViewModels; using BankContracts.SearchModels.Client; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace BankBusinessLogic.BusinessLogics.Client { - // Класс, реализующий бизнес-логику для пополнения карты - public class CreditingLogic : ICreditingLogic + public class CreditingLogic : ICreditingLogic { private readonly ILogger _logger; - private readonly ICreditingStorage _creditingStorage; - private readonly ICardStorage _cardStorage; - // Конструктор - public CreditingLogic(ILogger logger, ICreditingStorage creditingStorage, ICardStorage cardStorage) { + public CreditingLogic(ILogger logger, ICreditingStorage creditingStorage, ICardStorage cardStorage) { _logger = logger; _creditingStorage = creditingStorage; _cardStorage = cardStorage; } - // Вывод конкретной операции на пополнение - public CreditingViewModel? ReadElement(CreditingSearchModel model) + public bool Create(CreditingBindingModel model) + { + CheckModel(model); + + if (!CheckCardPeriod(model)) + { + model.Status = StatusEnum.Карта_просрочена; + } + else + { + model.Status = StatusEnum.Открыта; + } + + if (_creditingStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + + return false; + } + + return true; + } + + public bool Delete(CreditingBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_creditingStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + public CreditingViewModel? ReadElement(CreditingSearchModel model) { if (model == null) { throw new ArgumentNullException(nameof(model)); } - _logger.LogInformation("ReadElement. CreditingId:{ Id }", model.Id); - var element = _creditingStorage.GetElement(model); - if (element == null) { _logger.LogWarning("ReadElement element not found"); return null; } - _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); - return element; } - // Вывод всего списка операций на пополнение - public List? ReadList(CreditingSearchModel? model) + public List? ReadList(CreditingSearchModel? model) { _logger.LogInformation("ReadList. CreditingId:{Id}", model?.Id); - - // list хранит весь список в случае, если model пришло со значением null на вход метода - var list = model == null ? _creditingStorage.GetFullList() : _creditingStorage.GetFilteredList(model); - + var list = model == null ? _creditingStorage.GetFullList() : _creditingStorage.GetFilteredList(model); if (list == null) { _logger.LogWarning("ReadList return null list"); return null; } - _logger.LogInformation("ReadList. Count:{Count}", list.Count); - return list; } - // Создание операции на пополнение - public bool Create(CreditingBindingModel model) - { - CheckModel(model); - - if (!CheckCardPeriod(model)) - { - model.Status = StatusEnum.Карта_просрочена; - } - else - { - model.Status = StatusEnum.Открыта; - } - - if (_creditingStorage.Insert(model) == null) - { - _logger.LogWarning("Insert operation failed"); - - return false; - } - - return true; - } - - // Обновление операции на пополнение - public bool Update(CreditingBindingModel model) + public bool Update(CreditingBindingModel model) { CheckModel(model); - if (_creditingStorage.Update(model) == null) { _logger.LogWarning("Update operation failed"); return false; } - return true; } - // Удаление операции на пополнение - public bool Delete(CreditingBindingModel model) - { - CheckModel(model, false); - - _logger.LogInformation("Delete. Id:{Id}", model.Id); - - if (_creditingStorage.Delete(model) == null) - { - _logger.LogWarning("Delete operation failed"); - return false; - } - - return true; - } - - // Проверка входного аргумента для методов Insert, Update и Delete - private void CheckModel(CreditingBindingModel model, bool withParams = true) + private void CheckModel(CreditingBindingModel model, bool withParams = true) { if (model == null) { throw new ArgumentNullException(nameof(model)); } - - // Так как при удалении передаём как параметр false - if (!withParams) + if (!withParams) { return; } - - // Проверка на корректность суммы пополнения - if (model.Sum <= 0) + if (model.Sum <= 0) { throw new ArgumentNullException("Сумма операции должна быть больше 0", nameof(model.Sum)); } - - // Проверка на корректную дату операции - if (model.DateOpen > DateTime.Now) + if (model.DateOpen > DateTime.Now) { throw new ArgumentNullException("Дата не может быть меньше текущего времени", nameof(model.DateOpen)); } @@ -155,7 +119,7 @@ namespace BankBusinessLogic.BusinessLogics.Client model.Sum, model.CardId, model.DateOpen.ToString(), model.Id); } - // Проверка карты на просроченность + //проверка карты на просроченность bool CheckCardPeriod(CreditingBindingModel model) { var card = _cardStorage.GetElement(new CardSearchModel @@ -163,12 +127,13 @@ namespace BankBusinessLogic.BusinessLogics.Client Id = model.CardId }); - // Если карта просрочена + //если карта просрочена if (card.Period < DateTime.Now) { return false; } + return true; } } diff --git a/Bank/BankBusinessLogic/BusinessLogic/Client/DebitingLogic.cs b/Bank/BankBusinessLogic/BusinessLogic/Client/DebitingLogic.cs index 1ac878e..436eb8d 100644 --- a/Bank/BankBusinessLogic/BusinessLogic/Client/DebitingLogic.cs +++ b/Bank/BankBusinessLogic/BusinessLogic/Client/DebitingLogic.cs @@ -5,16 +5,10 @@ using BankContracts.StoragesContracts.Client; using BankContracts.BindingModels.Client; using BankContracts.SearchModels.Client; using BankContracts.ViewModels.Client.ViewModels; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace BankBusinessLogic.BusinessLogics.Client { - // Класс, реализующий бизнес-логику для снятия наличных с карты - public class DebitingLogic : IDebitingLogic + public class DebitingLogic : IDebitingLogic { private readonly ILogger _logger; @@ -22,80 +16,77 @@ namespace BankBusinessLogic.BusinessLogics.Client private readonly ICardStorage _cardStorage; - // Конструктор public DebitingLogic(ILogger logger, IDebitingStorage debitingStorage, ICardStorage cardStorage) { _logger = logger; _debitingStorage = debitingStorage; _cardStorage = cardStorage; } - // Вывод конкретной операции на снятие наличных - public DebitingViewModel? ReadElement(DebitingSearchModel model) + public bool Create(DebitingBindingModel model) + { + CheckModel(model); + + if (!CheckCardPeriod(model)) + { + model.Status = StatusEnum.Карта_просрочена; + } + else + { + model.Status = StatusEnum.Открыта; + } + + if (_debitingStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + + return true; + } + + public bool Delete(DebitingBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_debitingStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + public DebitingViewModel? ReadElement(DebitingSearchModel model) { if (model == null) { throw new ArgumentNullException(nameof(model)); } - _logger.LogInformation("ReadElement. DebitingId:{ Id }", model.Id); - var element = _debitingStorage.GetElement(model); - if (element == null) { _logger.LogWarning("ReadElement element not found"); return null; } - _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); - return element; } - // Вывод всего списка операций на снятие наличных - public List? ReadList(DebitingSearchModel? model) + public List? ReadList(DebitingSearchModel? model) { _logger.LogInformation("ReadList. DebitingId:{Id}", model?.Id); - - // list хранит весь список в случае, если model пришло со значением null на вход метода - var list = model == null ? _debitingStorage.GetFullList() : _debitingStorage.GetFilteredList(model); - + var list = model == null ? _debitingStorage.GetFullList() : _debitingStorage.GetFilteredList(model); if (list == null) { _logger.LogWarning("ReadList return null list"); return null; } - _logger.LogInformation("ReadList. Count:{Count}", list.Count); - return list; } - // Создание операции на снятие наличных - public bool Create(DebitingBindingModel model) - { - CheckModel(model); - - if (!CheckCardPeriod(model)) - { - model.Status = StatusEnum.Карта_просрочена; - } - else - { - model.Status = StatusEnum.Открыта; - } - - if (_debitingStorage.Insert(model) == null) - { - _logger.LogWarning("Insert operation failed"); - return false; - } - - return true; - } - - // Обновление операции на снятие наличных - public bool Update(DebitingBindingModel model) + public bool Update(DebitingBindingModel model) { CheckModel(model); @@ -109,44 +100,21 @@ namespace BankBusinessLogic.BusinessLogics.Client return true; } - // Удаление операции на снятие наличных - public bool Delete(DebitingBindingModel model) - { - CheckModel(model, false); - - _logger.LogInformation("Delete. Id:{Id}", model.Id); - - if (_debitingStorage.Delete(model) == null) - { - _logger.LogWarning("Delete operation failed"); - return false; - } - - return true; - } - - // Проверка входного аргумента для методов Insert, Update и Delete - private void CheckModel(DebitingBindingModel model, bool withParams = true) + private void CheckModel(DebitingBindingModel model, bool withParams = true) { if (model == null) { throw new ArgumentNullException(nameof(model)); } - - // Так как при удалении передаём как параметр false - if (!withParams) + if (!withParams) { return; } - - // Проверка на корректность снятия суммы - if (model.Sum <= 0) + if (model.Sum <= 0) { throw new ArgumentNullException("Сумма операции должна быть больше 0", nameof(model.Sum)); } - - // Проверка на корректную дату операции - if (model.DateClose < model.DateOpen) + if (model.DateClose < model.DateOpen) { throw new ArgumentNullException("Дата закрытия не может быть меньше даты открытия", nameof(model.DateClose)); } @@ -155,7 +123,7 @@ namespace BankBusinessLogic.BusinessLogics.Client model.Sum, model.CardId, model.DateOpen.ToString(), model.DateClose.ToString(), model.Id); } - // Проверка карты на просроченность + //проверка карты на просроченность bool CheckCardPeriod(DebitingBindingModel model) { var card = _cardStorage.GetElement(new CardSearchModel @@ -163,7 +131,7 @@ namespace BankBusinessLogic.BusinessLogics.Client Id = model.CardId }); - // Если карта просрочена + //если карта просрочена if (card.Period < DateTime.Now) { return false; diff --git a/Bank/BankBusinessLogic/BusinessLogic/Reports/ReportCashierLogic.cs b/Bank/BankBusinessLogic/BusinessLogic/Reports/ReportCashierLogic.cs index 5b668bf..17ebf9a 100644 --- a/Bank/BankBusinessLogic/BusinessLogic/Reports/ReportCashierLogic.cs +++ b/Bank/BankBusinessLogic/BusinessLogic/Reports/ReportCashierLogic.cs @@ -14,7 +14,7 @@ using BankDataModels.Enums; namespace BankBusinessLogic.BusinessLogics.Reports { - public class ReportCashierLogic : IReportCashierLogic + public class ReportCashierLogic : IReportCashierLogic { private readonly IMoneyTransferStorage _moneyTransferStorage; private readonly ICashWithdrawalStorage _cashWithdrawalStorage; @@ -26,12 +26,12 @@ namespace BankBusinessLogic.BusinessLogics.Reports private readonly AbstractSaveToWord _saveToWord; private readonly AbstractSaveToPdf _saveToPdf; - private readonly MailKitWorker _mailKitWorker; + private readonly MailKitWorker _mailKitWorker; - //инициализируем поля класса через контейнер - public ReportCashierLogic(IMoneyTransferStorage moneyTransferStorage, ICashWithdrawalStorage cashWithdrawalStorage, - IClientStorage clientStorage, AbstractSaveToExcel saveToExcel, - AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf, + //инициализируем поля класса через контейнер + public ReportCashierLogic(IMoneyTransferStorage moneyTransferStorage, ICashWithdrawalStorage cashWithdrawalStorage, + IClientStorage clientStorage, AbstractSaveToExcel saveToExcel, + AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf, IDebitingStorage debitingStorage, ICardStorage cardStorage, MailKitWorker mailKitWorker) { _moneyTransferStorage = moneyTransferStorage; @@ -50,7 +50,7 @@ namespace BankBusinessLogic.BusinessLogics.Reports //формирование списка переводов между счетами за период public List? GetMoneyTransfers(ReportBindingModel model) { - return _moneyTransferStorage.GetFilteredList(new MoneyTransferSearchModel { ClientId = model.ClientId, DateFrom = model.DateFrom, DateTo = model.DateTo }) + return _moneyTransferStorage.GetFilteredList(new MoneyTransferSearchModel { ClientId = model.ClientId, DateFrom = model.DateFrom, DateTo = model.DateTo}) .Select(x => new ReportCashierViewModel { OperationId = x.Id, @@ -87,14 +87,14 @@ namespace BankBusinessLogic.BusinessLogics.Reports AccountId = model.AccountId }); - foreach (var index in list) + foreach(var index in list) { CardIdList.Add(index.Id); } List totalList = new(); - foreach (var index in CardIdList) + foreach(var index in CardIdList) { var result = _debitingStorage.GetFilteredList(new DebitingSearchModel { @@ -102,7 +102,7 @@ namespace BankBusinessLogic.BusinessLogics.Reports }); totalList.AddRange(result); - } + } return totalList; } @@ -118,8 +118,8 @@ namespace BankBusinessLogic.BusinessLogics.Reports return client.Surname + " " + client.Name + " " + client.Patronymic; } - //Сохранение мороженных в файл-Word - public void SaveAccountsToWordFile(ReportBindingModel model) + //Сохранение мороженных в файл-Word + public void SaveAccountsToWordFile(ReportBindingModel model) { _saveToWord.CreateDoc(new WordInfo { @@ -190,23 +190,23 @@ namespace BankBusinessLogic.BusinessLogics.Reports ReportCashWithdrawal = listCashWithdrawals }); - byte[] pdf = System.IO.File.ReadAllBytes("../BankRestAPI/Отчёт_по_счетам.pdf"); + byte[] pdf = System.IO.File.ReadAllBytes("../BankRestAPI/Отчёт_по_счетам.pdf"); File.Delete("../BankRestAPI/Отчёт_по_счетам.pdf"); _mailKitWorker.SendMailAsync(new() - { - MailAddress = model.Email, - Subject = "Отчёт по счетам", - Text = $"За период с {model.DateFrom} " + - $"по {model.DateTo}.", - File = pdf, - Role = model.Role, + { + MailAddress = model.Email, + Subject = "Отчёт по счетам", + Text = $"За период с {model.DateFrom} " + + $"по {model.DateTo}.", + File = pdf, + Role = model.Role, TypeDoc = TypeDocEnum.PDF - }); + }); - //возврат полученных списков для отображения на вебе - return new ReportCashierViewModelForHTML + //возврат полученных списков для отображения на вебе + return new ReportCashierViewModelForHTML { ReportCashWithdrawal = listCashWithdrawals, @@ -214,4 +214,4 @@ namespace BankBusinessLogic.BusinessLogics.Reports }; } } -} \ No newline at end of file +} diff --git a/Bank/BankBusinessLogic/BusinessLogic/Reports/ReportClientLogic.cs b/Bank/BankBusinessLogic/BusinessLogic/Reports/ReportClientLogic.cs index 7f056a8..05d96c1 100644 --- a/Bank/BankBusinessLogic/BusinessLogic/Reports/ReportClientLogic.cs +++ b/Bank/BankBusinessLogic/BusinessLogic/Reports/ReportClientLogic.cs @@ -12,112 +12,103 @@ using BankContracts.ViewModels.Cashier.ViewModels; using BankContracts.SearchModels.Cashier; using BankContracts.ViewModels.Client.ViewModels; using BankContracts.ViewModels.Reports; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace BankBusinessLogic.BusinessLogics.Reports { - // Реализация бизнес-логики отчётов по клиенту - public class ReportClientLogic : IReportClientLogic - { - private readonly ICardStorage _cardStorage; - private readonly IClientStorage _clientStorage; + public class ReportClientLogic : IReportClientLogic + { + private readonly ICreditingStorage _creditingStorage; + private readonly IDebitingStorage _debitingStorage; + private readonly ICardStorage _cardStorage; + private readonly IMoneyTransferStorage _moneyTransferStorage; + private readonly IClientStorage _clientStorage; - private readonly ICreditingStorage _creditingStorage; - private readonly IDebitingStorage _debitingStorage; - private readonly IMoneyTransferStorage _moneyTransferStorage; + private readonly AbstractSaveToExcel _saveToExcel; + private readonly AbstractSaveToWord _saveToWord; + private readonly AbstractSaveToPdf _saveToPdf; - private readonly AbstractSaveToExcel _saveToExcel; - private readonly AbstractSaveToWord _saveToWord; - private readonly AbstractSaveToPdf _saveToPdf; + private readonly MailKitWorker _mailKitWorker; - private readonly MailKitWorker _mailKitWorker; + public ReportClientLogic(ICreditingStorage creditingStorage, IDebitingStorage debitingStorage, + AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf, + ICardStorage cardStorage, IMoneyTransferStorage moneyTransferStorage, + MailKitWorker mailKitWorker, IClientStorage clientStorage) + { + _creditingStorage = creditingStorage; + _debitingStorage = debitingStorage; + _cardStorage = cardStorage; + _moneyTransferStorage = moneyTransferStorage; + _clientStorage = clientStorage; - public ReportClientLogic(ICreditingStorage creditingStorage, IDebitingStorage debitingStorage, - AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf, - ICardStorage cardStorage, IMoneyTransferStorage moneyTransferStorage, - MailKitWorker mailKitWorker, IClientStorage clientStorage) - { - _creditingStorage = creditingStorage; - _debitingStorage = debitingStorage; - _cardStorage = cardStorage; - _moneyTransferStorage = moneyTransferStorage; - _clientStorage = clientStorage; - - _saveToExcel = saveToExcel; - _saveToWord = saveToWord; - _saveToPdf = saveToPdf; + _saveToExcel = saveToExcel; + _saveToWord = saveToWord; + _saveToPdf = saveToPdf; _mailKitWorker = mailKitWorker; - } + } - // Информация о пополнениях для отчёта - public List? GetCrediting(ReportBindingModel model) - { - return _creditingStorage.GetFilteredList(new CreditingSearchModel - { - DateFrom = model.DateFrom, - DateTo = model.DateTo, - }).Select(x => new ReportClientViewModel - { - OperationId = x.Id, + public List? GetCrediting(ReportBindingModel model) + { + return _creditingStorage.GetFilteredList(new CreditingSearchModel + { + DateFrom = model.DateFrom, + DateTo = model.DateTo, + }).Select(x => new ReportClientViewModel + { + OperationId = x.Id, CardNumber = x.CardNumber, SumOperation = x.Sum, - DateComplite = x.DateOpen - }).ToList(); - } + DateComplite = x.DateOpen + }).ToList(); + } - // Информация о снятиях для отчёта - public List? GetDebiting(ReportBindingModel model) - { - return _debitingStorage.GetFilteredList(new DebitingSearchModel - { - DateTo = model.DateFrom, - DateFrom = model.DateTo, - }).Select(x => new ReportClientViewModel - { - OperationId = x.Id, - CardNumber = x.CardNumber, - SumOperation = x.Sum, - DateComplite = x.DateClose - }).ToList(); - } + public List? GetDebiting(ReportBindingModel model) + { + return _debitingStorage.GetFilteredList(new DebitingSearchModel + { + DateTo = model.DateFrom, + DateFrom = model.DateTo, + }).Select(x => new ReportClientViewModel + { + OperationId = x.Id, + CardNumber = x.CardNumber, + SumOperation = x.Sum, + DateComplite = x.DateClose + }).ToList(); + } - // Для Excel отчёта по переводам между счетов - public List? GetMoneyTransfer(ReportBindingModel model) - { - // Список счетов по выбранным картам - List accountId = new(); + //для excel отчёта по переводам между счетов + public List? GetMoneyTransfer(ReportBindingModel model) + { + //список счетов по выбранным картам + List accountId = new(); - foreach (var index in model.CardList) - { - accountId.Add(_cardStorage.GetElement(new CardSearchModel { Id = index }).AccountId); - } + foreach(var index in model.CardList) + { + accountId.Add(_cardStorage.GetElement(new CardSearchModel { Id = index}).AccountId); + } - var list = accountId.ToHashSet().ToList(); + var list = accountId.ToHashSet().ToList(); - List totalList = new(); + List totalList = new(); - foreach (var index in list) - { + foreach (var index in list) + { var result = _moneyTransferStorage.GetFilteredList(new MoneyTransferSearchModel { AccountSenderId = index, - AccountPayeeId = index + AccountPayeeId = index }).OrderBy(x => x.AccountSenderId).ToList(); - totalList.AddRange(result); + totalList.AddRange(result); } - return totalList; - } + return totalList; + } - // Для Excel отчёта по пополнениям карты + //для excel отчёта по пополнениям карты public List GetExcelCrediting(ReportBindingModel model) - { + { List totalList = new(); foreach (var index in model.CardList) @@ -133,7 +124,7 @@ namespace BankBusinessLogic.BusinessLogics.Reports return totalList; } - // Для Excel отчёта по снятиям с карты + //для excel отчёта по снятиям с карты public List GetExcelDebiting(ReportBindingModel model) { List totalList = new(); @@ -151,17 +142,16 @@ namespace BankBusinessLogic.BusinessLogics.Reports return totalList; } - // Сохранение в файл-Excel для клиентов - public void SaveToExcelFile(ReportBindingModel model, OfficeOperationEnum operationEnum) - { + public void SaveToExcelFile(ReportBindingModel model, OfficeOperationEnum operationEnum) + { byte[] excel = Array.Empty(); if (operationEnum == OfficeOperationEnum.Между_cчетами) - { + { _saveToExcel.CreateReport(new ExcelInfo { FileName = model.FileName, - Title = "Отчёт по переводам", + Title = "Отчёт по переводам", MoneyTransfer = GetMoneyTransfer(model) }, operationEnum); @@ -172,12 +162,12 @@ namespace BankBusinessLogic.BusinessLogics.Reports if (operationEnum == OfficeOperationEnum.Пополнение_карт) { - _saveToExcel.CreateReport(new ExcelInfo - { - FileName = model.FileName, - Title = "Отчёт по пополнениям (переводам из налички на карту)", - Crediting = GetExcelCrediting(model) - }, operationEnum); + _saveToExcel.CreateReport(new ExcelInfo + { + FileName = model.FileName, + Title = "Отчёт по пополнениям (переводам из налички на карту)", + Crediting = GetExcelCrediting(model) + }, operationEnum); excel = System.IO.File.ReadAllBytes("../BankRestAPI/Отчёт по пополнениям.xlsx"); @@ -209,9 +199,8 @@ namespace BankBusinessLogic.BusinessLogics.Reports }); } - // Сохранение в файл-Word для клиентов - public void SaveToWordFile(ReportBindingModel model, OfficeOperationEnum operationEnum) - { + public void SaveToWordFile(ReportBindingModel model, OfficeOperationEnum operationEnum) + { byte[] word = Array.Empty(); if (operationEnum == OfficeOperationEnum.Между_cчетами) @@ -267,11 +256,11 @@ namespace BankBusinessLogic.BusinessLogics.Reports }); } - // Сохранение в файл-Pdf для клиента + //отчёт в формате PDF для клиента public ReportClientViewModelForHTML SaveClientReportToPdfFile(ReportBindingModel model) { - var listCreditings = GetCrediting(model); - var listDebitings = GetDebiting(model); + var listCreditings = GetCrediting(model); + var listDebitings = GetDebiting(model); _saveToPdf.CreateDoc(new PdfInfo { @@ -280,31 +269,31 @@ namespace BankBusinessLogic.BusinessLogics.Reports DateFrom = model.DateFrom!.Value, DateTo = model.DateTo!.Value, ReportCrediting = listCreditings, - ReportDebiting = listDebitings - }); + ReportDebiting = listDebitings + }); - byte[] pdf = System.IO.File.ReadAllBytes("../BankRestAPI/Отчёт_по_картам.pdf"); + byte[] pdf = System.IO.File.ReadAllBytes("../BankRestAPI/Отчёт_по_картам.pdf"); _mailKitWorker.SendMailAsync(new() - { - MailAddress = model.Email, - Subject = "Отчёт по картам", - Text = $"За период с {model.DateFrom} " + - $"по {model.DateTo}.", - File = pdf, - Role = model.Role, + { + MailAddress = model.Email, + Subject = "Отчёт по картам", + Text = $"За период с {model.DateFrom} " + + $"по {model.DateTo}.", + File = pdf, + Role = model.Role, TypeDoc = TypeDocEnum.PDF }); File.Delete("../BankRestAPI/Отчёт_по_картам.pdf"); - // Возврат полученных списков для отображения на вебе + //возврат полученных списков для отображения на вебе return new ReportClientViewModelForHTML - { - ReportCrediting = listCreditings, + { + ReportCrediting = listCreditings, - ReportDebiting = listDebitings - }; + ReportDebiting = listDebitings + }; } } } diff --git a/Bank/BankBusinessLogic/MailWorker/MailKitWorker.cs b/Bank/BankBusinessLogic/MailWorker/MailKitWorker.cs index 5062f9e..5f31083 100644 --- a/Bank/BankBusinessLogic/MailWorker/MailKitWorker.cs +++ b/Bank/BankBusinessLogic/MailWorker/MailKitWorker.cs @@ -16,7 +16,7 @@ using BankContracts.BindingModels.Messages; namespace BankBusinessLogic.MailWorker { - // Класс, отвечающий за отправку письма на почту + //класс, отвечающий за отправку письма public class MailKitWorker { private string _mailLogin = string.Empty; @@ -29,8 +29,7 @@ namespace BankBusinessLogic.MailWorker private readonly ILogger logger; - // Конструктор - public MailKitWorker(ILogger logger) + public MailKitWorker(ILogger logger) { this.logger = logger; } @@ -59,9 +58,9 @@ namespace BankBusinessLogic.MailWorker MemoryStream ms = new(info.File); - if (info.Role == MailsEnum.Клиент) + if(info.Role == MailsEnum.Клиент) { - if (info.TypeDoc == TypeDocEnum.PDF) + if(info.TypeDoc == TypeDocEnum.PDF) { objMailMessage.Attachments.Add(new Attachment(ms, "Отчёт_для_клиента.pdf", "application/pdf")); } diff --git a/Bank/BankClientApp/APIClient.cs b/Bank/BankClientApp/APIClient.cs index a013251..2f2f138 100644 --- a/Bank/BankClientApp/APIClient.cs +++ b/Bank/BankClientApp/APIClient.cs @@ -25,7 +25,7 @@ namespace BankСlientApp ErrorMessage = error; } - // Get-запрос + //Get-запрос public static T? GetRequest(string requestUrl) { var response = _client.GetAsync(requestUrl); @@ -42,7 +42,7 @@ namespace BankСlientApp } } - // Post-запрос + //Post-запрос public static void PostRequest(string requestUrl, T model) { var json = JsonConvert.SerializeObject(model); @@ -58,7 +58,7 @@ namespace BankСlientApp } } - // Post-запрос для получения данных + //Post-запрос для получения данных public static T? PostRequestReport(string requestUrl, U model) { var json = JsonConvert.SerializeObject(model); diff --git a/Bank/BankClientApp/Views/Home/CardsList.cshtml b/Bank/BankClientApp/Views/Home/CardsList.cshtml index 4c7da2a..419f857 100644 --- a/Bank/BankClientApp/Views/Home/CardsList.cshtml +++ b/Bank/BankClientApp/Views/Home/CardsList.cshtml @@ -8,7 +8,7 @@ }
-

Банковские карты

+

Карты

diff --git a/Bank/BankClientApp/Views/Home/CreateCard.cshtml b/Bank/BankClientApp/Views/Home/CreateCard.cshtml index 6e9ac46..10c8758 100644 --- a/Bank/BankClientApp/Views/Home/CreateCard.cshtml +++ b/Bank/BankClientApp/Views/Home/CreateCard.cshtml @@ -2,8 +2,8 @@ ViewData["Title"] = "Создание карты"; } -
-

Создание банковской карты

+
+

Создание карты

@@ -30,7 +30,7 @@
-
+
diff --git a/Bank/BankClientApp/Views/Home/Register.cshtml b/Bank/BankClientApp/Views/Home/Register.cshtml index a4bebf6..79a8edd 100644 --- a/Bank/BankClientApp/Views/Home/Register.cshtml +++ b/Bank/BankClientApp/Views/Home/Register.cshtml @@ -15,5 +15,5 @@ - + \ No newline at end of file diff --git a/Bank/BankDataModels/IId.cs b/Bank/BankDataModels/IId.cs index dc3d877..1694430 100644 --- a/Bank/BankDataModels/IId.cs +++ b/Bank/BankDataModels/IId.cs @@ -6,8 +6,7 @@ using System.Threading.Tasks; namespace BankDataModels { - // Интерфейс, отвечающий за id у всех сущностей - public interface IId + public interface IId { int Id { get; } } diff --git a/Bank/BankDataModels/Models/Cashier/IAccountModel.cs b/Bank/BankDataModels/Models/Cashier/IAccountModel.cs index f21029a..8c5bb23 100644 --- a/Bank/BankDataModels/Models/Cashier/IAccountModel.cs +++ b/Bank/BankDataModels/Models/Cashier/IAccountModel.cs @@ -7,10 +7,9 @@ using System.Threading.Tasks; namespace BankDataModels.Models.Cashier { - // Интерфейс, отвечающий за банковский cчёт + //банковский счёт public interface IAccountModel : IId { - // Номер счёта string AccountNumber { get; } int CashierId { get; } @@ -19,10 +18,8 @@ namespace BankDataModels.Models.Cashier string PasswordAccount { get; } - // Сумма на счёте double Balance { get; } - // Дата открытия DateTime DateOpen { get; } } } diff --git a/Bank/BankDataModels/Models/Cashier/ICashWithdrawalModel.cs b/Bank/BankDataModels/Models/Cashier/ICashWithdrawalModel.cs index ae6530c..690829d 100644 --- a/Bank/BankDataModels/Models/Cashier/ICashWithdrawalModel.cs +++ b/Bank/BankDataModels/Models/Cashier/ICashWithdrawalModel.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace BankDataModels.Models.Cashier { - // Интерфейс, отвечающий за выдачу наличных + //выдача наличных public interface ICashWithdrawalModel : IId { int DebitingId { get; } @@ -15,10 +15,8 @@ namespace BankDataModels.Models.Cashier int CashierId { get; } - // Сумма наличисления наличных int Sum { get; } - // Дата выдачи наличных DateTime DateOperation { get; } } } diff --git a/Bank/BankDataModels/Models/Cashier/ICashierModel.cs b/Bank/BankDataModels/Models/Cashier/ICashierModel.cs index 4455715..debf650 100644 --- a/Bank/BankDataModels/Models/Cashier/ICashierModel.cs +++ b/Bank/BankDataModels/Models/Cashier/ICashierModel.cs @@ -6,25 +6,19 @@ using System.Threading.Tasks; namespace BankDataModels.Models.Cashier { - // Интерфейс, отвечающий за кассира + //клиент public interface ICashierModel : IId { - // Пароль от аккаунта кассира string Password { get; } - // Имя кассира string Name { get; } - // Фамилия кассира string Surname { get; } - // Отчество кассира string Patronymic { get; } - // Отчество кассира string Email { get; } - // Мобильный телефон кассира string Telephone { get; } } } diff --git a/Bank/BankDataModels/Models/Cashier/IMoneyTransferModel.cs b/Bank/BankDataModels/Models/Cashier/IMoneyTransferModel.cs index 7906954..c5f4d4e 100644 --- a/Bank/BankDataModels/Models/Cashier/IMoneyTransferModel.cs +++ b/Bank/BankDataModels/Models/Cashier/IMoneyTransferModel.cs @@ -6,17 +6,15 @@ using System.Threading.Tasks; namespace BankDataModels.Models.Cashier { - // Интерфейс, отвечающий за перевод денег + //перевод денег public interface IMoneyTransferModel : IId { - // Сумма перевода int Sum { get; } int? AccountSenderId { get; } int AccountPayeeId { get; } - // Дата перевода DateTime DateOperation { get; } int? CreditingId { get; } diff --git a/Bank/BankDataModels/Models/Client/ICreditingModel.cs b/Bank/BankDataModels/Models/Client/ICreditingModel.cs index 1ddb204..5abfe1a 100644 --- a/Bank/BankDataModels/Models/Client/ICreditingModel.cs +++ b/Bank/BankDataModels/Models/Client/ICreditingModel.cs @@ -7,21 +7,17 @@ using System.Threading.Tasks; namespace BankDataModels.Models.Client { - // Интерфейс, отвечающий за пополнение карты + //пополнение карты public interface ICreditingModel : IId { int CardId { get; } - // Сумма на пополнение карты int Sum { get; } - // Дата открытия заявки на пополнение DateTime DateOpen { get; } - // Дата пополнения карты - DateTime? DateClose { get; } + DateTime? DateClose { get; } - // Статус заявки StatusEnum Status { get; } } } diff --git a/Bank/BankDataModels/Models/Client/IDebitingModel.cs b/Bank/BankDataModels/Models/Client/IDebitingModel.cs index c93a1fb..1010918 100644 --- a/Bank/BankDataModels/Models/Client/IDebitingModel.cs +++ b/Bank/BankDataModels/Models/Client/IDebitingModel.cs @@ -7,21 +7,17 @@ using System.Threading.Tasks; namespace BankDataModels.Models.Client { - // Интерфейс, отвечающий за получение наличных по карте + //снятие денег с карты public interface IDebitingModel : IId { int CardId { get; } - // Сумма снятия с карты - int Sum { get; } + int Sum { get; } - // Дата открытия заявки DateTime DateOpen { get; } - // Дата снятия денег DateTime? DateClose { get; } - // Статус заявки StatusEnum Status { get; } } } diff --git a/Bank/BankDataModels/Models/Client/IСardModel.cs b/Bank/BankDataModels/Models/Client/IСardModel.cs index b40c2f8..977b36f 100644 --- a/Bank/BankDataModels/Models/Client/IСardModel.cs +++ b/Bank/BankDataModels/Models/Client/IСardModel.cs @@ -6,20 +6,17 @@ using System.Threading.Tasks; namespace BankDataModels.Models.Client { - // Интерфейс, отвечающий за банковскую карту + //банковская карта public interface ICardModel : IId { int ClientID { get; } int AccountId { get; } - - // Номер банковской карты + string Number { get; } - // Код CVC string CVC { get; } - // Период пользования картой DateTime Period { get; } } } diff --git a/Bank/BankDataModels/Models/Client/IСlientModel.cs b/Bank/BankDataModels/Models/Client/IСlientModel.cs index 5ce9b94..e381a63 100644 --- a/Bank/BankDataModels/Models/Client/IСlientModel.cs +++ b/Bank/BankDataModels/Models/Client/IСlientModel.cs @@ -6,25 +6,19 @@ using System.Threading.Tasks; namespace BankDataModels.Models.Client { - // Интерфейс, отвечающий за клиента + //клиент public interface IClientModel : IId { - // Пароль от аккаунта клиента string Password { get; } - // Имя клиента string Name { get; } - // Фамилия клиента string Surname { get; } - // Отчество клиента string Patronymic { get; } - // Электронная почта клиента string Email { get; } - // Мобильный телефон клиента string Telephone { get; } } } diff --git a/Bank/BankDataModels/Models/IMessageInfoModel.cs b/Bank/BankDataModels/Models/IMessageInfoModel.cs index 0be5055..5abdba1 100644 --- a/Bank/BankDataModels/Models/IMessageInfoModel.cs +++ b/Bank/BankDataModels/Models/IMessageInfoModel.cs @@ -6,7 +6,6 @@ using System.Threading.Tasks; namespace BankDataModels.Models { - // Интерфейс, отвечающий за сообщения (на почту) public interface IMessageInfoModel : IId { string MessageId { get; } diff --git a/Bank/BankDatabaseImplement/BankDatabase.cs b/Bank/BankDatabaseImplement/BankDatabase.cs index 888017f..86b7eb0 100644 --- a/Bank/BankDatabaseImplement/BankDatabase.cs +++ b/Bank/BankDatabaseImplement/BankDatabase.cs @@ -20,7 +20,6 @@ namespace BankDatabaseImplement } base.OnConfiguring(optionsBuilder); } - public virtual DbSet Accounts { set; get; } public virtual DbSet Cards { set; get; }