Stage 3: BussinessLogic(Подправил Card и операции), RestAPI (Добавил контроллеры и немного в Program logs)
This commit is contained in:
parent
242c2a7d14
commit
db7fa7300b
@ -3,15 +3,17 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||||||
# Visual Studio Version 17
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 17.7.34202.233
|
VisualStudioVersion = 17.7.34202.233
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BankView", "Bank\BankView.csproj", "{C867FBC3-FA1E-479D-8368-D6EFAA70CA4B}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BankView", "Bank\BankView.csproj", "{C867FBC3-FA1E-479D-8368-D6EFAA70CA4B}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BankBusinessLogic", "BankBusinessLogic\BankBusinessLogic.csproj", "{FB305193-03D5-40E1-84E9-A27A81D7DB83}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BankBusinessLogic", "BankBusinessLogic\BankBusinessLogic.csproj", "{FB305193-03D5-40E1-84E9-A27A81D7DB83}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BankDataModels", "BankDataModels\BankDataModels.csproj", "{A2791B88-CAB3-4D95-81E2-6724C9B6CB41}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BankDataModels", "BankDataModels\BankDataModels.csproj", "{A2791B88-CAB3-4D95-81E2-6724C9B6CB41}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BankContracts", "BankContracts\BankContracts.csproj", "{060D1745-51EC-49A1-8FC0-B78E64DAE760}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BankContracts", "BankContracts\BankContracts.csproj", "{060D1745-51EC-49A1-8FC0-B78E64DAE760}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BankDatabaseImplement", "BankDatabaseImplement\BankDatabaseImplement.csproj", "{F485D64A-2C3A-419A-AB74-80DEC552BFEC}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BankDatabaseImplement", "BankDatabaseImplement\BankDatabaseImplement.csproj", "{F485D64A-2C3A-419A-AB74-80DEC552BFEC}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BankRestAPI", "BankRestAPI\BankRestAPI.csproj", "{A0F0B305-2E9E-4472-9A4F-56DD1F5088E6}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@ -39,6 +41,10 @@ Global
|
|||||||
{F485D64A-2C3A-419A-AB74-80DEC552BFEC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{F485D64A-2C3A-419A-AB74-80DEC552BFEC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{F485D64A-2C3A-419A-AB74-80DEC552BFEC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{F485D64A-2C3A-419A-AB74-80DEC552BFEC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{F485D64A-2C3A-419A-AB74-80DEC552BFEC}.Release|Any CPU.Build.0 = Release|Any CPU
|
{F485D64A-2C3A-419A-AB74-80DEC552BFEC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{A0F0B305-2E9E-4472-9A4F-56DD1F5088E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{A0F0B305-2E9E-4472-9A4F-56DD1F5088E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{A0F0B305-2E9E-4472-9A4F-56DD1F5088E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{A0F0B305-2E9E-4472-9A4F-56DD1F5088E6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="DocumentFormat.OpenXml" Version="2.19.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
|
||||||
|
<PackageReference Include="PdfSharp.MigraDoc.Standard" Version="1.51.15" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -17,9 +17,12 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
private readonly IAccountStorage _accountStorage;
|
private readonly IAccountStorage _accountStorage;
|
||||||
|
|
||||||
private readonly ICashWithdrawalLogic _cashWithdrawalLogic;
|
private readonly ICashWithdrawalLogic _cashWithdrawalLogic;
|
||||||
|
|
||||||
private readonly IMoneyTransferLogic _moneyTransferLogic;
|
private readonly IMoneyTransferLogic _moneyTransferLogic;
|
||||||
|
|
||||||
|
// Конструктор
|
||||||
public AccountLogic(ILogger<AccountLogic> logger, IAccountStorage accountStorage,
|
public AccountLogic(ILogger<AccountLogic> logger, IAccountStorage accountStorage,
|
||||||
ICashWithdrawalLogic cashWithdrawalLogic, IMoneyTransferLogic moneyTransferLogic)
|
ICashWithdrawalLogic cashWithdrawalLogic, IMoneyTransferLogic moneyTransferLogic)
|
||||||
{
|
{
|
||||||
@ -29,6 +32,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
_moneyTransferLogic = moneyTransferLogic;
|
_moneyTransferLogic = moneyTransferLogic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Вывод конкретного счёта
|
||||||
public AccountViewModel? ReadElement(AccountSearchModel model)
|
public AccountViewModel? ReadElement(AccountSearchModel model)
|
||||||
{
|
{
|
||||||
if (model == null)
|
if (model == null)
|
||||||
@ -52,9 +56,10 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Вывод всего списка счетов
|
||||||
public List<AccountViewModel>? ReadList(AccountSearchModel? model)
|
public List<AccountViewModel>? ReadList(AccountSearchModel? model)
|
||||||
{
|
{
|
||||||
//_logger.LogInformation("ReadList. AccountNumber:{AccountNumber}. Id:{Id}", model.AccountNumber, model?.Id);
|
_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);
|
var list = model == null ? _accountStorage.GetFullList() : _accountStorage.GetFilteredList(model);
|
||||||
@ -70,10 +75,10 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
//метод, отвечающий за изменение баланса счёта
|
// Метод, отвечающий за изменение баланса счёта
|
||||||
public bool ChangeBalance(AccountSearchModel? model, int sum)
|
public bool ChangeBalance(AccountSearchModel? model, int sum)
|
||||||
{
|
{
|
||||||
//ищем счёт
|
// Ищем счёт
|
||||||
var account = ReadElement(model);
|
var account = ReadElement(model);
|
||||||
|
|
||||||
if (account == null)
|
if (account == null)
|
||||||
@ -81,13 +86,13 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
throw new ArgumentNullException("Счёт не найден", nameof(account));
|
throw new ArgumentNullException("Счёт не найден", nameof(account));
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверяем возможность операции снятия (sum может быть отрицательной)
|
// Проверяем возможность операции снятия (sum может быть отрицательной)
|
||||||
if (sum + account.Balance < 0)
|
if (sum + account.Balance < 0)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//обновляем балланс счёта
|
// Обновляем балланс счёта
|
||||||
_accountStorage.Update(new AccountBindingModel
|
_accountStorage.Update(new AccountBindingModel
|
||||||
{
|
{
|
||||||
Id = account.Id,
|
Id = account.Id,
|
||||||
@ -97,6 +102,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Создание счёта
|
||||||
public bool Create(AccountBindingModel model)
|
public bool Create(AccountBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
@ -111,6 +117,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Обновление счёта
|
||||||
public bool Update(AccountBindingModel model)
|
public bool Update(AccountBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
@ -125,6 +132,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Удаление счёта
|
||||||
public bool Delete(AccountBindingModel model)
|
public bool Delete(AccountBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model, false);
|
CheckModel(model, false);
|
||||||
@ -141,8 +149,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Проверка входного аргумента для методов Insert, Update и Delete
|
||||||
//проверка входного аргумента для методов Insert, Update и Delete
|
|
||||||
private void CheckModel(AccountBindingModel model, bool withParams = true)
|
private void CheckModel(AccountBindingModel model, bool withParams = true)
|
||||||
{
|
{
|
||||||
if (model == null)
|
if (model == null)
|
||||||
@ -150,25 +157,28 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
throw new ArgumentNullException(nameof(model));
|
throw new ArgumentNullException(nameof(model));
|
||||||
}
|
}
|
||||||
|
|
||||||
//так как при удалении передаём как параметр false
|
// Так как при удалении передаём как параметр false
|
||||||
if (!withParams)
|
if (!withParams)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверка на наличие номера счёта
|
// Проверка на наличие номера счёта
|
||||||
if (string.IsNullOrEmpty(model.AccountNumber))
|
if (string.IsNullOrEmpty(model.AccountNumber))
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Отсутствие номера у счёта", nameof(model.AccountNumber));
|
throw new ArgumentNullException("Отсутствие номера у счёта", nameof(model.AccountNumber));
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверка на наличие id владельца
|
// Проверка на наличие id владельца
|
||||||
if (model.CashierId < 0)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("Некорректный Id владельца счёта", nameof(model.CashierId));
|
|
||||||
}
|
|
||||||
|
|
||||||
//проверка на наличие id кассира, создавшего счёт
|
// СОЗВОН ИБО Я НЕ ПОН, А ЗАЧЕМ ЛИШКА ИЛИ МОЖЕТ ЭТО КЛИЕНТ ИМЕЛСЯ ВВИДУ???!
|
||||||
|
|
||||||
|
//if (model.CashierId < 0)
|
||||||
|
//{
|
||||||
|
// throw new ArgumentNullException("Некорректный Id владельца счёта", nameof(model.CashierId));
|
||||||
|
//}
|
||||||
|
|
||||||
|
// Проверка на наличие id кассира, создавшего счёт
|
||||||
if (model.CashierId < 0)
|
if (model.CashierId < 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Некорректный Id кассира, открывшего счёт", nameof(model.CashierId));
|
throw new ArgumentNullException("Некорректный Id кассира, открывшего счёт", nameof(model.CashierId));
|
||||||
@ -179,7 +189,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
throw new ArgumentNullException("Изначальный баланс аккаунта не может быть < 0", nameof(model.Balance));
|
throw new ArgumentNullException("Изначальный баланс аккаунта не может быть < 0", nameof(model.Balance));
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверка на корректную дату открытия счёта
|
// Проверка на корректную дату открытия счёта
|
||||||
if (model.DateOpen > DateTime.Now)
|
if (model.DateOpen > DateTime.Now)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Дата открытия счёта не может быть ранее текущей", nameof(model.DateOpen));
|
throw new ArgumentNullException("Дата открытия счёта не может быть ранее текущей", nameof(model.DateOpen));
|
||||||
@ -189,18 +199,17 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
"CashierId:{CashierId}. DateOpen:{DateOpen}. Id:{Id}",
|
"CashierId:{CashierId}. DateOpen:{DateOpen}. Id:{Id}",
|
||||||
model.AccountNumber, model.ClientId, model.CashierId, model.DateOpen, model.Id);
|
model.AccountNumber, model.ClientId, model.CashierId, model.DateOpen, model.Id);
|
||||||
|
|
||||||
//для проверка на наличие такого же счёта
|
// Для проверка на наличие такого же счёта
|
||||||
var element = _accountStorage.GetElement(new AccountSearchModel
|
var element = _accountStorage.GetElement(new AccountSearchModel
|
||||||
{
|
{
|
||||||
AccountNumber = model.AccountNumber,
|
AccountNumber = model.AccountNumber,
|
||||||
});
|
});
|
||||||
|
|
||||||
//если элемент найден и его Id не совпадает с Id переданного объекта
|
// Если элемент найден и его Id не совпадает с Id переданного объекта
|
||||||
if (element != null && element.Id != model.Id)
|
if (element != null && element.Id != model.Id)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Счёт с таким номером уже существует");
|
throw new InvalidOperationException("Счёт с таким номером уже существует");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
|
|
||||||
private readonly IDebitingStorage _debitingStorage;
|
private readonly IDebitingStorage _debitingStorage;
|
||||||
|
|
||||||
|
// Конструктор
|
||||||
public CashWithdrawalLogic(ILogger<CashWithdrawalLogic> logger, ICashWithdrawalStorage cashWithdrawalStorage,
|
public CashWithdrawalLogic(ILogger<CashWithdrawalLogic> logger, ICashWithdrawalStorage cashWithdrawalStorage,
|
||||||
IDebitingStorage debitingStorage)
|
IDebitingStorage debitingStorage)
|
||||||
{
|
{
|
||||||
@ -30,6 +31,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
_debitingStorage = debitingStorage;
|
_debitingStorage = debitingStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Вывод конкретной операции
|
||||||
public CashWithdrawalViewModel? ReadElement(CashWithdrawalSearchModel model)
|
public CashWithdrawalViewModel? ReadElement(CashWithdrawalSearchModel model)
|
||||||
{
|
{
|
||||||
if (model == null)
|
if (model == null)
|
||||||
@ -54,6 +56,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Вывод всего списка операций
|
||||||
public List<CashWithdrawalViewModel>? ReadList(CashWithdrawalSearchModel? model)
|
public List<CashWithdrawalViewModel>? ReadList(CashWithdrawalSearchModel? model)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("ReadElement. AccountId:{AccountId}. Sum:{Sum}. DateWithdrawal:{DateWithdrawal}. Id:{Id}",
|
_logger.LogInformation("ReadElement. AccountId:{AccountId}. Sum:{Sum}. DateWithdrawal:{DateWithdrawal}. Id:{Id}",
|
||||||
@ -73,6 +76,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Создание операции
|
||||||
public bool Create(CashWithdrawalBindingModel model, bool flag)
|
public bool Create(CashWithdrawalBindingModel model, bool flag)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
@ -102,6 +106,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Обновление операции
|
||||||
public bool Update(CashWithdrawalBindingModel model)
|
public bool Update(CashWithdrawalBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
@ -116,6 +121,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Удаление операции
|
||||||
public bool Delete(CashWithdrawalBindingModel model)
|
public bool Delete(CashWithdrawalBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model, false);
|
CheckModel(model, false);
|
||||||
@ -132,7 +138,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверка входного аргумента для методов Insert, Update и Delete
|
// Проверка входного аргумента для методов Insert, Update и Delete
|
||||||
private void CheckModel(CashWithdrawalBindingModel model, bool withParams = true)
|
private void CheckModel(CashWithdrawalBindingModel model, bool withParams = true)
|
||||||
{
|
{
|
||||||
if (model == null)
|
if (model == null)
|
||||||
@ -140,25 +146,25 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
throw new ArgumentNullException(nameof(model));
|
throw new ArgumentNullException(nameof(model));
|
||||||
}
|
}
|
||||||
|
|
||||||
//так как при удалении передаём как параметр false
|
// Так как при удалении передаём как параметр false
|
||||||
if (!withParams)
|
if (!withParams)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверка на корректность Id счёта
|
// Проверка на корректность Id счёта
|
||||||
if (model.AccountId < 0)
|
if (model.AccountId < 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Некорректный Id счёта", nameof(model.AccountId));
|
throw new ArgumentNullException("Некорректный Id счёта", nameof(model.AccountId));
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверка на корректность снимаемой суммы
|
// Проверка на корректность снимаемой суммы
|
||||||
if (model.Sum <= 0)
|
if (model.Sum <= 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Снимаемая сумма не может раняться нулю или быть меньше его", nameof(model.Sum));
|
throw new ArgumentNullException("Снимаемая сумма не может раняться нулю или быть меньше его", nameof(model.Sum));
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверка на корректную дату операции
|
// Проверка на корректную дату операции
|
||||||
if (model.DateWithdrawal > DateTime.Now)
|
if (model.DateWithdrawal > DateTime.Now)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Дата операции не может быть позднее текущей", nameof(model.DateWithdrawal));
|
throw new ArgumentNullException("Дата операции не может быть позднее текущей", nameof(model.DateWithdrawal));
|
||||||
|
@ -22,6 +22,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
|
|
||||||
public readonly ICreditingStorage _creditingStorage;
|
public readonly ICreditingStorage _creditingStorage;
|
||||||
|
|
||||||
|
// Конструктор
|
||||||
public MoneyTransferLogic(ILogger<MoneyTransferLogic> logger, IMoneyTransferStorage moneyTransferStorage, ICreditingStorage creditingStorage)
|
public MoneyTransferLogic(ILogger<MoneyTransferLogic> logger, IMoneyTransferStorage moneyTransferStorage, ICreditingStorage creditingStorage)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
@ -29,6 +30,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
_creditingStorage = creditingStorage;
|
_creditingStorage = creditingStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Вывод конкретной операции
|
||||||
public MoneyTransferViewModel? ReadElement(MoneyTransferSearchModel model)
|
public MoneyTransferViewModel? ReadElement(MoneyTransferSearchModel model)
|
||||||
{
|
{
|
||||||
if (model == null)
|
if (model == null)
|
||||||
@ -53,6 +55,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Вывод всего списка операций
|
||||||
public List<MoneyTransferViewModel>? ReadList(MoneyTransferSearchModel? model)
|
public List<MoneyTransferViewModel>? ReadList(MoneyTransferSearchModel? model)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("ReadElement. AccountSenderId:{AccountSenderId}. AccountPayeeId:{AccountPayeeId}. Sum:{Sum}. Id:{Id}",
|
_logger.LogInformation("ReadElement. AccountSenderId:{AccountSenderId}. AccountPayeeId:{AccountPayeeId}. Sum:{Sum}. Id:{Id}",
|
||||||
@ -72,6 +75,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Создание операции на перевод
|
||||||
public bool Create(MoneyTransferBindingModel model)
|
public bool Create(MoneyTransferBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
@ -96,6 +100,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Обновление операции на перевод
|
||||||
public bool Update(MoneyTransferBindingModel model)
|
public bool Update(MoneyTransferBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
@ -110,6 +115,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Удаление операции на перевод
|
||||||
public bool Delete(MoneyTransferBindingModel model)
|
public bool Delete(MoneyTransferBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model, false);
|
CheckModel(model, false);
|
||||||
@ -126,7 +132,7 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверка входного аргумента для методов Insert, Update и Delete
|
// Проверка входного аргумента для методов Insert, Update и Delete
|
||||||
private void CheckModel(MoneyTransferBindingModel model, bool withParams = true)
|
private void CheckModel(MoneyTransferBindingModel model, bool withParams = true)
|
||||||
{
|
{
|
||||||
if (model == null)
|
if (model == null)
|
||||||
@ -134,31 +140,31 @@ namespace BankBusinessLogic.BusinessLogic.Cashier
|
|||||||
throw new ArgumentNullException(nameof(model));
|
throw new ArgumentNullException(nameof(model));
|
||||||
}
|
}
|
||||||
|
|
||||||
//так как при удалении передаём как параметр false
|
// Так как при удалении передаём как параметр false
|
||||||
if (!withParams)
|
if (!withParams)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверка корректности Id счёта отправителя
|
// Проверка корректности Id счёта отправителя
|
||||||
if (model.AccountSenderId < 0)
|
if (model.AccountSenderId < 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Отсутствие Id у счёта отправителя", nameof(model.AccountSenderId));
|
throw new ArgumentNullException("Отсутствие Id у счёта отправителя", nameof(model.AccountSenderId));
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверка корректности Id счёта получателя
|
// Проверка корректности Id счёта получателя
|
||||||
if (model.AccountPayeeId < 0)
|
if (model.AccountPayeeId < 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Отсутствие Id у счёта получателя", nameof(model.AccountPayeeId));
|
throw new ArgumentNullException("Отсутствие Id у счёта получателя", nameof(model.AccountPayeeId));
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверка на корректную сумму перевода
|
// Проверка на корректную сумму перевода
|
||||||
if (model.Sum <= 0)
|
if (model.Sum <= 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Сумма перевода не может раняться нулю или быть меньше его", nameof(model.Sum));
|
throw new ArgumentNullException("Сумма перевода не может раняться нулю или быть меньше его", nameof(model.Sum));
|
||||||
}
|
}
|
||||||
|
|
||||||
//проверка на корректную дату открытия счёта
|
// Проверка на корректную дату открытия счёта
|
||||||
if (model.DateTransfer > DateTime.Now)
|
if (model.DateTransfer > DateTime.Now)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Дата операции не может быть ранее текущей", nameof(model.DateTransfer));
|
throw new ArgumentNullException("Дата операции не может быть ранее текущей", nameof(model.DateTransfer));
|
||||||
|
@ -17,11 +17,16 @@ namespace BankBusinessLogic.BusinessLogic.Client
|
|||||||
public class CardLogic : ICardLogic
|
public class CardLogic : ICardLogic
|
||||||
{
|
{
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
private readonly ICardStorage _cardStorage;
|
private readonly ICardStorage _cardStorage;
|
||||||
|
|
||||||
private readonly IAccountLogic _accountLogic;
|
private readonly IAccountLogic _accountLogic;
|
||||||
|
|
||||||
private readonly IDebitingLogic _debitingLogic;
|
private readonly IDebitingLogic _debitingLogic;
|
||||||
|
|
||||||
private readonly ICreditingLogic _creditingLogic;
|
private readonly ICreditingLogic _creditingLogic;
|
||||||
|
|
||||||
|
// Конструктор
|
||||||
public CardLogic(ILogger<CardLogic> logger, ICardStorage cardStorage, IAccountLogic accountLogic,
|
public CardLogic(ILogger<CardLogic> logger, ICardStorage cardStorage, IAccountLogic accountLogic,
|
||||||
IDebitingLogic debitingLogic, ICreditingLogic creditingLogic)
|
IDebitingLogic debitingLogic, ICreditingLogic creditingLogic)
|
||||||
{
|
{
|
||||||
@ -32,93 +37,134 @@ namespace BankBusinessLogic.BusinessLogic.Client
|
|||||||
_creditingLogic = creditingLogic;
|
_creditingLogic = creditingLogic;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Create(CardBindingModel model)
|
// Вывод конкретной банковской карты
|
||||||
{
|
|
||||||
CheckModel(model);
|
|
||||||
if (_cardStorage.Insert(model) == null)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("Insert operation failed");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CardViewModel? ReadElement(CardSearchModel model)
|
public CardViewModel? ReadElement(CardSearchModel model)
|
||||||
{
|
{
|
||||||
if (model == null)
|
if (model == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(model));
|
throw new ArgumentNullException(nameof(model));
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.LogInformation("ReadElement. CardNumber:{Number}.Id:{ Id}", model.Number, model.Id);
|
_logger.LogInformation("ReadElement. CardNumber:{Number}.Id:{ Id}", model.Number, model.Id);
|
||||||
|
|
||||||
var element = _cardStorage.GetElement(model);
|
var element = _cardStorage.GetElement(model);
|
||||||
|
|
||||||
if (element == null)
|
if (element == null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("ReadElement element not found");
|
_logger.LogWarning("ReadElement element not found");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
|
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
|
||||||
|
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Вывод всего списка банковских карт
|
||||||
public List<CardViewModel>? ReadList(CardSearchModel? model)
|
public List<CardViewModel>? ReadList(CardSearchModel? model)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("ReadList. CardId:{Id}", model?.Id);
|
_logger.LogInformation("ReadList. CardId:{Id}", model?.Id);
|
||||||
|
|
||||||
|
// list хранит весь список в случае, если model пришло со значением null на вход метода
|
||||||
var list = model == null ? _cardStorage.GetFullList() : _cardStorage.GetFilteredList(model);
|
var list = model == null ? _cardStorage.GetFullList() : _cardStorage.GetFilteredList(model);
|
||||||
|
|
||||||
if (list == null)
|
if (list == null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("ReadList return null list");
|
_logger.LogWarning("ReadList return null list");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Создание банковской карты
|
||||||
|
public bool Create(CardBindingModel model)
|
||||||
|
{
|
||||||
|
CheckModel(model);
|
||||||
|
|
||||||
|
if (_cardStorage.Insert(model) == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Insert operation failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Обновление банковской карты
|
||||||
public bool Update(CardBindingModel model)
|
public bool Update(CardBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
|
|
||||||
if (_cardStorage.Update(model) == null)
|
if (_cardStorage.Update(model) == null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Update operation failed");
|
_logger.LogWarning("Update operation failed");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Удаление банковской карты
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверка входного аргумента для методов Insert, Update и Delete
|
||||||
private void CheckModel(CardBindingModel model, bool withParams = true)
|
private void CheckModel(CardBindingModel model, bool withParams = true)
|
||||||
{
|
{
|
||||||
if (model == null)
|
if (model == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(model));
|
throw new ArgumentNullException(nameof(model));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Так как при удалении передаём как параметр false
|
||||||
if (!withParams)
|
if (!withParams)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Проверка на наличие номера у банковской карты
|
||||||
if (string.IsNullOrEmpty(model.Number) || model.Number.Length != 16)
|
if (string.IsNullOrEmpty(model.Number) || model.Number.Length != 16)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Неправильный номер карты", nameof(model.Number));
|
throw new ArgumentNullException("Неправильный номер карты", nameof(model.Number));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Здесь стоит обсудить про баланс !!!!!! И про добавление ID клиента ниже!
|
||||||
|
|
||||||
|
// Проверка на конкретный период действия карты
|
||||||
if (model.Period < DateTime.Now)
|
if (model.Period < DateTime.Now)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Нет периода действия", nameof(model.Period));
|
throw new ArgumentNullException("Нет периода действия", nameof(model.Period));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Проверка на наличие id клиента, получеившего карту
|
||||||
|
if (model.ClientId < 0)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Некорректный Id кассира, открывшего счёт", nameof(model.ClientId));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Для проверка на наличие такой же банковской карты
|
||||||
var cardElement = _cardStorage.GetElement(new CardSearchModel
|
var cardElement = _cardStorage.GetElement(new CardSearchModel
|
||||||
{
|
{
|
||||||
Number = model.Number,
|
Number = model.Number,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Если элемент найден и его Id не совпадает с Id переданного объекта
|
||||||
if (cardElement != null && cardElement.Id != model.Id)
|
if (cardElement != null && cardElement.Id != model.Id)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Карта с таким ноиером уже есть");
|
throw new InvalidOperationException("Карта с таким ноиером уже есть");
|
||||||
@ -130,6 +176,7 @@ namespace BankBusinessLogic.BusinessLogic.Client
|
|||||||
ClientId = model.ClientId
|
ClientId = model.ClientId
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
if (accountElement != null && accountElement.ClientId != model.ClientId)
|
if (accountElement != null && accountElement.ClientId != model.ClientId)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Это не счёт данного клиента");
|
throw new InvalidOperationException("Это не счёт данного клиента");
|
||||||
|
@ -15,9 +15,12 @@ namespace BankBusinessLogic.BusinessLogic.Client
|
|||||||
public class CreditingLogic : ICreditingLogic
|
public class CreditingLogic : ICreditingLogic
|
||||||
{
|
{
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
private readonly ICreditingStorage _creditingStorage;
|
private readonly ICreditingStorage _creditingStorage;
|
||||||
|
|
||||||
private readonly ICardStorage _cardStorage;
|
private readonly ICardStorage _cardStorage;
|
||||||
|
|
||||||
|
// Конструктор
|
||||||
public CreditingLogic(ILogger<CreditingLogic> logger, ICreditingStorage creditingStorage, ICardStorage cardStorage)
|
public CreditingLogic(ILogger<CreditingLogic> logger, ICreditingStorage creditingStorage, ICardStorage cardStorage)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
@ -25,6 +28,49 @@ namespace BankBusinessLogic.BusinessLogic.Client
|
|||||||
_cardStorage = cardStorage;
|
_cardStorage = cardStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Вывод конкретной операции на пополнение
|
||||||
|
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<CreditingViewModel>? ReadList(CreditingSearchModel? model)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("ReadList. CreditingId:{Id}", model?.Id);
|
||||||
|
|
||||||
|
// list хранит весь список в случае, если model пришло со значением null на вход метода
|
||||||
|
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)
|
public bool Create(CreditingBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
@ -39,73 +85,63 @@ namespace BankBusinessLogic.BusinessLogic.Client
|
|||||||
return true;
|
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<CreditingViewModel>? ReadList(CreditingSearchModel? model)
|
|
||||||
{
|
|
||||||
_logger.LogInformation("ReadList. CreditingId:{Id}", model?.Id);
|
|
||||||
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 Update(CreditingBindingModel model)
|
public bool Update(CreditingBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
|
|
||||||
if (_creditingStorage.Update(model) == null)
|
if (_creditingStorage.Update(model) == null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Update operation failed");
|
_logger.LogWarning("Update operation failed");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
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)
|
if (model == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(model));
|
throw new ArgumentNullException(nameof(model));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Так как при удалении передаём как параметр false
|
||||||
if (!withParams)
|
if (!withParams)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Проверка на корректность Id банковской карты
|
||||||
|
if (model.ClientId < 0)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Некорректный Id счёта", nameof(model.ClientId));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверка на корректность суммы пополнения
|
||||||
if (model.Sum <= 0)
|
if (model.Sum <= 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Сумма операции должна быть больше 0", nameof(model.Sum));
|
throw new ArgumentNullException("Сумма операции должна быть больше 0", nameof(model.Sum));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Проверка на корректную дату операции
|
||||||
if (model.DateCredit > DateTime.Now)
|
if (model.DateCredit > DateTime.Now)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Дата не может быть меньше текущего времени", nameof(model.DateCredit));
|
throw new ArgumentNullException("Дата не может быть меньше текущего времени", nameof(model.DateCredit));
|
||||||
@ -114,6 +150,5 @@ namespace BankBusinessLogic.BusinessLogic.Client
|
|||||||
_logger.LogInformation("Crediting. Sum:{Sum}.CardId:{CardId}.Date:{date}.Id:{Id}",
|
_logger.LogInformation("Crediting. Sum:{Sum}.CardId:{CardId}.Date:{date}.Id:{Id}",
|
||||||
model.Sum, model.CardId, model.DateCredit.ToString(), model.Id);
|
model.Sum, model.CardId, model.DateCredit.ToString(), model.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ namespace BankBusinessLogic.BusinessLogic.Client
|
|||||||
|
|
||||||
private readonly ICardStorage _cardStorage;
|
private readonly ICardStorage _cardStorage;
|
||||||
|
|
||||||
|
// Конструктор
|
||||||
public DebitingLogic(ILogger<DebitingLogic> logger, IDebitingStorage debitingStorage, ICardStorage cardStorage)
|
public DebitingLogic(ILogger<DebitingLogic> logger, IDebitingStorage debitingStorage, ICardStorage cardStorage)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
@ -27,6 +28,49 @@ namespace BankBusinessLogic.BusinessLogic.Client
|
|||||||
_cardStorage = cardStorage;
|
_cardStorage = cardStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Вывод конкретной операции на снятие наличных
|
||||||
|
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<DebitingViewModel>? ReadList(DebitingSearchModel? model)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("ReadList. DebitingId:{Id}", model?.Id);
|
||||||
|
|
||||||
|
// list хранит весь список в случае, если model пришло со значением null на вход метода
|
||||||
|
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)
|
public bool Create(DebitingBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
@ -40,48 +84,7 @@ namespace BankBusinessLogic.BusinessLogic.Client
|
|||||||
return true;
|
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<DebitingViewModel>? ReadList(DebitingSearchModel? model)
|
|
||||||
{
|
|
||||||
_logger.LogInformation("ReadList. DebitingId:{Id}", model?.Id);
|
|
||||||
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 Update(DebitingBindingModel model)
|
public bool Update(DebitingBindingModel model)
|
||||||
{
|
{
|
||||||
CheckModel(model);
|
CheckModel(model);
|
||||||
@ -96,21 +99,54 @@ namespace BankBusinessLogic.BusinessLogic.Client
|
|||||||
return true;
|
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)
|
if (model == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(model));
|
throw new ArgumentNullException(nameof(model));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Так как при удалении передаём как параметр false
|
||||||
if (!withParams)
|
if (!withParams)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Проверка на корректность Id банковской карты
|
||||||
|
if (model.ClientId < 0)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Некорректный Id счёта", nameof(model.ClientId));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверка на корректность снятия суммы
|
||||||
if (model.Sum <= 0)
|
if (model.Sum <= 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("Сумма операции должна быть больше 0", nameof(model.Sum));
|
throw new ArgumentNullException("Сумма операции должна быть больше 0", nameof(model.Sum));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Проверка на корректную дату операции
|
||||||
|
if (model.DateDebit > DateTime.Now)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Дата не может быть меньше текущего времени", nameof(model.DateDebit));
|
||||||
|
}
|
||||||
|
|
||||||
_logger.LogInformation("Debiting. Sum:{Sum}.CardId:{CardId}.DateDebit:{DateDebit}.Id:{Id}",
|
_logger.LogInformation("Debiting. Sum:{Sum}.CardId:{CardId}.DateDebit:{DateDebit}.Id:{Id}",
|
||||||
model.Sum, model.CardId, model.DateDebit.ToString(), model.Id);
|
model.Sum, model.CardId, model.DateDebit.ToString(), model.Id);
|
||||||
}
|
}
|
||||||
|
16
Bank/BankBusinessLogic/OfficePackage/AbstractSaveToExcel.cs
Normal file
16
Bank/BankBusinessLogic/OfficePackage/AbstractSaveToExcel.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using BankBusinessLogic.OfficePackage.HelperEnums;
|
||||||
|
using BankBusinessLogic.OfficePackage.HelperModels;
|
||||||
|
using BankDataModels.Enums;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BankBusinessLogic.OfficePackage
|
||||||
|
{
|
||||||
|
public abstract class AbstractSaveToExcel
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
12
Bank/BankBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
Normal file
12
Bank/BankBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BankBusinessLogic.OfficePackage
|
||||||
|
{
|
||||||
|
public abstract class AbstractSaveToPdf
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
12
Bank/BankBusinessLogic/OfficePackage/AbstractSaveToWord.cs
Normal file
12
Bank/BankBusinessLogic/OfficePackage/AbstractSaveToWord.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BankBusinessLogic.OfficePackage
|
||||||
|
{
|
||||||
|
public abstract class AbstractSaveToWord
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BankBusinessLogic.OfficePackage.Implements
|
||||||
|
{
|
||||||
|
public class SaveToExcel
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
12
Bank/BankBusinessLogic/OfficePackage/Implements/SaveToPdf.cs
Normal file
12
Bank/BankBusinessLogic/OfficePackage/Implements/SaveToPdf.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BankBusinessLogic.OfficePackage.Implements
|
||||||
|
{
|
||||||
|
public class SaveToPdf
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BankBusinessLogic.OfficePackage.Implements
|
||||||
|
{
|
||||||
|
public class SaveToWord
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
20
Bank/BankRestAPI/BankRestAPI.csproj
Normal file
20
Bank/BankRestAPI/BankRestAPI.csproj
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="6.1.0" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.5" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\BankContracts\BankContracts.csproj" />
|
||||||
|
<ProjectReference Include="..\BankDatabaseImplement\BankDatabaseImplement.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
225
Bank/BankRestAPI/Controllers/AccountController.cs
Normal file
225
Bank/BankRestAPI/Controllers/AccountController.cs
Normal file
@ -0,0 +1,225 @@
|
|||||||
|
using BankContracts.BindingModels.Cashier;
|
||||||
|
using BankContracts.BusinessLogicsContracts.Cashier;
|
||||||
|
using BankContracts.BusinessLogicsContracts.Client;
|
||||||
|
using BankContracts.SearchModels.Cashier;
|
||||||
|
using BankContracts.SearchModels.Client;
|
||||||
|
using BankContracts.ViewModels;
|
||||||
|
using BankContracts.ViewModels.Cashier.ViewModels;
|
||||||
|
using BankContracts.ViewModels.Client.ViewModels;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace BankRestAPI.Controllers
|
||||||
|
{
|
||||||
|
// Route будет строиться по наванию контроллера и по названию метода (два Post-метода)
|
||||||
|
[Route("api/[controller]/[action]")]
|
||||||
|
[ApiController]
|
||||||
|
public class AccountController : Controller
|
||||||
|
{
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
private readonly IAccountLogic _accountLogic;
|
||||||
|
|
||||||
|
private readonly IDebitingLogic _debitingLogic;
|
||||||
|
|
||||||
|
private readonly ICreditingLogic _creditingLogic;
|
||||||
|
|
||||||
|
private readonly ICashWithdrawalLogic _cashwithdrawalLogic;
|
||||||
|
|
||||||
|
private readonly IMoneyTransferLogic _moneyTransferLogic;
|
||||||
|
|
||||||
|
// Конструктор
|
||||||
|
public AccountController(ILogger<AccountController> logger, IAccountLogic accountLogic, IDebitingLogic debitingLogic, ICreditingLogic creditingLogic, ICashWithdrawalLogic cashWithdrawalLogic, IMoneyTransferLogic moneyTransferLogic)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_accountLogic = accountLogic;
|
||||||
|
_debitingLogic = debitingLogic;
|
||||||
|
_creditingLogic = creditingLogic;
|
||||||
|
_cashwithdrawalLogic = cashWithdrawalLogic;
|
||||||
|
_moneyTransferLogic = moneyTransferLogic;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public AccountViewModel? Login(string accountNumber, string passwordAccount)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Попытка найти счёт (запись) по переданным номеру и паролю счёта
|
||||||
|
return _accountLogic.ReadElement(new AccountSearchModel
|
||||||
|
{
|
||||||
|
AccountNumber = accountNumber,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public AccountViewModel? GetAccount(int accountId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Попробуем получить счёт
|
||||||
|
return _accountLogic.ReadElement(new AccountSearchModel
|
||||||
|
{
|
||||||
|
Id = accountId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public List<AccountViewModel>? GetAllAccounts()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Попробуем получить все имеющиеся счета
|
||||||
|
return _accountLogic.ReadList(null);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void RegisterAccount(AccountBindingModel model)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Создание счёта
|
||||||
|
_accountLogic.Create(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка регистрации счёта в банке");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void UpdateData(AccountBindingModel model)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Изменение данных о счёте
|
||||||
|
_accountLogic.Update(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка обновления данных");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public List<AccountViewModel>? SearchAccounts(int cashierId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Поиск всех счетов которые сделал конкретный кассир
|
||||||
|
return _accountLogic.ReadList(new AccountSearchModel
|
||||||
|
{
|
||||||
|
CashierId = cashierId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "ОШбика входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public List<AccountViewModel>? SearchAccountsOfClient(int clientId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Попытка найти запись по перданным номеру и паролю счета
|
||||||
|
return _accountLogic.ReadList(new AccountSearchModel
|
||||||
|
{
|
||||||
|
ClientId = clientId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "ОШибка входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public List<CashWithdrawalViewModel>? FindAllCashWithdrawal()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _cashwithdrawalLogic.ReadList(null);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public List<MoneyTransferViewModel>? FindAllMoneyTransfer()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _moneyTransferLogic.ReadList(null);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public CreditingViewModel FindCrediting(int id)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Поиск заявки на зачисление по id
|
||||||
|
return _creditingLogic.ReadElement(new CreditingSearchModel
|
||||||
|
{
|
||||||
|
Id = id
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public DebitingViewModel FindDebiting(int id)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Поиск заявки на снятие по id
|
||||||
|
return _debitingLogic.ReadElement(new DebitingSearchModel
|
||||||
|
{
|
||||||
|
Id = id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
126
Bank/BankRestAPI/Controllers/CardController.cs
Normal file
126
Bank/BankRestAPI/Controllers/CardController.cs
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
using BankContracts.BindingModels.Client;
|
||||||
|
using BankContracts.BusinessLogicsContracts.Cashier;
|
||||||
|
using BankContracts.BusinessLogicsContracts.Client;
|
||||||
|
using BankContracts.SearchModels.Client;
|
||||||
|
using BankContracts.ViewModels.Client.ViewModels;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using System.Net;
|
||||||
|
|
||||||
|
namespace BankRestAPI.Controllers
|
||||||
|
{
|
||||||
|
// Route будет строиться по наванию контроллера и по названию метода (два Post-метода)
|
||||||
|
[Route("api/[controller]/[action]")]
|
||||||
|
[ApiController]
|
||||||
|
public class CardController : Controller
|
||||||
|
{
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
private readonly ICardLogic _cardLogic;
|
||||||
|
|
||||||
|
private readonly IDebitingLogic _debitingLogic;
|
||||||
|
|
||||||
|
private readonly ICreditingLogic _creditingLogic;
|
||||||
|
|
||||||
|
private readonly IAccountLogic _accountLogic;
|
||||||
|
|
||||||
|
// Конструктор
|
||||||
|
public CardController(ILogger<ClientController> logger, ICardLogic cardLogic, IDebitingLogic debitingLogic, ICreditingLogic creditingLogic, IAccountLogic accountLogic)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_cardLogic = cardLogic;
|
||||||
|
_debitingLogic = debitingLogic;
|
||||||
|
_creditingLogic = creditingLogic;
|
||||||
|
_accountLogic = accountLogic;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public List<CardViewModel>? GetAllCards()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _cardLogic.ReadList(null);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка получения карт");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public List<CardViewModel>? GetClientsCardsList(int id)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _cardLogic.ReadList(new CardSearchModel()
|
||||||
|
{
|
||||||
|
ClientID = id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка получения карт");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void CreateCard(CardBindingModel model)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_cardLogic.Create(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка создания банковской карты");
|
||||||
|
Response.StatusCode = (int)HttpStatusCode.NotAcceptable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void CreateDebitingRequest(DebitingBindingModel model)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_debitingLogic.Create(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка создания запроса на снятие наличных");
|
||||||
|
Response.StatusCode = (int)(HttpStatusCode.NotAcceptable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void CreateCreditingOperation(CreditingBindingModel model)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_creditingLogic.Create(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка создания операции на пополнение");
|
||||||
|
Response.StatusCode = (int)HttpStatusCode.NotAcceptable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public CardViewModel? FindCard(int id)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _cardLogic.ReadElement(new CardSearchModel
|
||||||
|
{
|
||||||
|
Id = id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
94
Bank/BankRestAPI/Controllers/CashierController.cs
Normal file
94
Bank/BankRestAPI/Controllers/CashierController.cs
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
using BankContracts.BindingModels.Cashier;
|
||||||
|
using BankContracts.BusinessLogicsContracts.Cashier;
|
||||||
|
using BankContracts.BusinessLogicsContracts.Client;
|
||||||
|
using BankContracts.SearchModels.Cashier;
|
||||||
|
using BankContracts.ViewModels.Cashier.ViewModels;
|
||||||
|
using BankContracts.ViewModels.Client.ViewModels;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace BankRestAPI.Controllers
|
||||||
|
{
|
||||||
|
// Route будет строиться по наванию контроллера и по названию метода (два Post-метода)
|
||||||
|
[Route("api/[controller]/[action]")]
|
||||||
|
[ApiController]
|
||||||
|
public class CashierController : Controller
|
||||||
|
{
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
private readonly ICashierLogic _cashierLogic;
|
||||||
|
|
||||||
|
// Конструктор
|
||||||
|
public CashierController(ICashierLogic cashierLogic, ILogger<AccountController> logger)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_cashierLogic = cashierLogic;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public CashierViewModel? Login(string login, string password)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Попытка найти кассира (запись) по переданным логину и паролю
|
||||||
|
return _cashierLogic.ReadElement(new CashierSearchModel
|
||||||
|
{
|
||||||
|
Email = login,
|
||||||
|
Password = password
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public CashierViewModel? GetCashier(int id)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Попытка найти кассира
|
||||||
|
return _cashierLogic.ReadElement(new CashierSearchModel
|
||||||
|
{
|
||||||
|
Id = id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void Register(CashierBindingModel model)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Cоздание кассира
|
||||||
|
_cashierLogic.Create(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка регистрации");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void UpdateData(CashierBindingModel model)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Изменение данных о кассире
|
||||||
|
_cashierLogic.Update(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка обновления данных");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
146
Bank/BankRestAPI/Controllers/ClientController.cs
Normal file
146
Bank/BankRestAPI/Controllers/ClientController.cs
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
using BankContracts.BindingModels.Client;
|
||||||
|
using BankContracts.BusinessLogicsContracts.Client;
|
||||||
|
using BankContracts.SearchModels.Client;
|
||||||
|
using BankContracts.ViewModels.Client.ViewModels;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace BankRestAPI.Controllers
|
||||||
|
{
|
||||||
|
// Route будет строиться по наванию контроллера и по названию метода (два Post-метода)
|
||||||
|
[Route("api/[controller]/[action]")]
|
||||||
|
[ApiController]
|
||||||
|
public class ClientController : Controller
|
||||||
|
{
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
private readonly IClientLogic _clientLogic;
|
||||||
|
|
||||||
|
private readonly IDebitingLogic _debitingLogic;
|
||||||
|
|
||||||
|
private readonly ICreditingLogic _creditingLogic;
|
||||||
|
|
||||||
|
// Конструктор
|
||||||
|
public ClientController(ILogger<ClientController> logger, IClientLogic clientLogic, IDebitingLogic debitingLogic, ICreditingLogic creditingLogic)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_clientLogic = clientLogic;
|
||||||
|
_debitingLogic = debitingLogic;
|
||||||
|
_creditingLogic = creditingLogic;
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public ClientViewModel? Login(string login, string password)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Попытка найти клиента (запись) по переданным логину и паролю
|
||||||
|
return _clientLogic.ReadElement(new ClientSearchModel
|
||||||
|
{
|
||||||
|
Email = login,
|
||||||
|
Password = password
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка входа в систему");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public List<ClientViewModel>? GetAllClients()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _clientLogic.ReadList(null);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка получения пользователя");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public ClientViewModel? GetClient(int clientId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Попытка найти клиента
|
||||||
|
return _clientLogic.ReadElement(new ClientSearchModel
|
||||||
|
{
|
||||||
|
Id = clientId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка получения пользователя");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void Register(ClientBindingModel model)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Создание клиента
|
||||||
|
_clientLogic.Create(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка регистрации");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void UpdateData(ClientBindingModel model)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Изменение данных о клиенте
|
||||||
|
_clientLogic.Update(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка обновления данных");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public List<DebitingViewModel>? getClientsDebitings(int clientId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _debitingLogic.ReadList(new DebitingSearchModel()
|
||||||
|
{
|
||||||
|
ClientId = clientId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка получения пользователей");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public List<CreditingViewModel>? getClientsCreditings(int clientId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _creditingLogic.ReadList(new CreditingSearchModel()
|
||||||
|
{
|
||||||
|
ClientId = clientId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Ошибка получения пользователей");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
Bank/BankRestAPI/Controllers/ReportController.cs
Normal file
12
Bank/BankRestAPI/Controllers/ReportController.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace BankRestAPI.Controllers
|
||||||
|
{
|
||||||
|
public class ReportController : Controller
|
||||||
|
{
|
||||||
|
public IActionResult Index()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
31
Bank/BankRestAPI/Program.cs
Normal file
31
Bank/BankRestAPI/Program.cs
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
|
||||||
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
|
|
||||||
|
builder.Logging.SetMinimumLevel(LogLevel.Trace);
|
||||||
|
builder.Logging.AddLog4Net("log4net.config");
|
||||||
|
|
||||||
|
// Add services to the container.
|
||||||
|
|
||||||
|
builder.Services.AddControllers();
|
||||||
|
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||||
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
|
builder.Services.AddSwaggerGen();
|
||||||
|
|
||||||
|
var app = builder.Build();
|
||||||
|
|
||||||
|
// Configure the HTTP request pipeline.
|
||||||
|
if (app.Environment.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseSwagger();
|
||||||
|
app.UseSwaggerUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
app.UseHttpsRedirection();
|
||||||
|
|
||||||
|
app.UseAuthorization();
|
||||||
|
|
||||||
|
app.MapControllers();
|
||||||
|
|
||||||
|
app.Run();
|
31
Bank/BankRestAPI/Properties/launchSettings.json
Normal file
31
Bank/BankRestAPI/Properties/launchSettings.json
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json.schemastore.org/launchsettings.json",
|
||||||
|
"iisSettings": {
|
||||||
|
"windowsAuthentication": false,
|
||||||
|
"anonymousAuthentication": true,
|
||||||
|
"iisExpress": {
|
||||||
|
"applicationUrl": "http://localhost:5946",
|
||||||
|
"sslPort": 44353
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
"BankRestAPI": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": true,
|
||||||
|
"launchUrl": "swagger",
|
||||||
|
"applicationUrl": "https://localhost:7194;http://localhost:5164",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"IIS Express": {
|
||||||
|
"commandName": "IISExpress",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"launchUrl": "swagger",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
8
Bank/BankRestAPI/appsettings.Development.json
Normal file
8
Bank/BankRestAPI/appsettings.Development.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft.AspNetCore": "Warning"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
9
Bank/BankRestAPI/appsettings.json
Normal file
9
Bank/BankRestAPI/appsettings.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft.AspNetCore": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AllowedHosts": "*"
|
||||||
|
}
|
16
Bank/BankRestAPI/log4net.config
Normal file
16
Bank/BankRestAPI/log4net.config
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<log4net>
|
||||||
|
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
|
||||||
|
<file value="c:/temp/BlacksmithWorkshopResrApi.log" />
|
||||||
|
<appendToFile value="true" />
|
||||||
|
<maximumFileSize value="100KB" />
|
||||||
|
<maxSizeRollBackups value="2" />
|
||||||
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
|
<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
|
<root>
|
||||||
|
<level value="TRACE" />
|
||||||
|
<appender-ref ref="RollingFile" />
|
||||||
|
</root>
|
||||||
|
</log4net>
|
Loading…
Reference in New Issue
Block a user