2024-04-28 22:16:14 +04:00
using BankContracts.BindingModels ;
using BankContracts.BusinessLogicContracts ;
using BankContracts.SearchModels ;
using BankContracts.StoragesContracts ;
using BankContracts.ViewModels ;
using Microsoft.Extensions.Logging ;
2024-04-28 21:55:25 +04:00
namespace BankBusinessLogics.BusinessLogic
{
2024-04-28 22:16:14 +04:00
public class OperationLogic : IOperationLogic
2024-04-28 21:55:25 +04:00
{
2024-04-28 22:16:14 +04:00
private readonly ILogger _logger ;
private readonly IOperationStorage _opationStorage ;
public OperationLogic ( ILogger < OperationLogic > logger , IOperationStorage operationStorage )
{
_logger = logger ;
_opationStorage = operationStorage ;
}
public void CheckOnlyModel ( OperationBindingModel model )
{
if ( model = = null )
{
throw new ArgumentNullException ( nameof ( model ) , "Произошла ошибка на уровне проверки OperationBindingModel" ) ;
}
}
private void CheckUpdateModel ( OperationBindingModel model )
{
CheckOnlyModel ( model ) ;
if ( model . Price < = 0 )
{
throw new ArgumentException ( $"Произошла ошибка на уровне проверки OperationBindingModel. Стоимость операции (Price={model.Price}) должна быть больше 0" ) ;
}
}
public void CheckFullModel ( OperationBindingModel model )
{
CheckOnlyModel ( model ) ;
CheckUpdateModel ( model ) ;
if ( string . IsNullOrEmpty ( model . Model ) & & string . IsNullOrEmpty ( model . Mark ) )
{
throw new ArgumentNullException ( $"Произошла ошибка на уровне проверки OperationBindingModel.Вид и тип операции не должна быть нулевыми или пустыми." ) ;
}
}
public List < OperationViewModel > ReadList ( OperationSearchModel ? model )
{
try
{
var results = model ! = null ? _opationStorage . GetFilteredList ( model ) : _opationStorage . GetFullList ( ) ;
_logger . LogDebug ( "Список операций: {@operations}" , results ) ;
_logger . LogInformation ( "Извлечение списка операций по {@OperationSearchModel} модели" , model ) ;
return results ;
}
catch ( Exception e )
{
_logger . LogError ( e , "Произошла ошибка при попытки получить список по {@OperationSearchModel} модели" , model ) ;
throw ;
}
}
public OperationViewModel ReadElement ( OperationSearchModel model )
{
try
{
var result = _opationStorage . GetElement ( model ) ;
if ( result = = null )
{
throw new ArgumentNullException ( $"Н е получилось получить эдемент с id {model.Id}" ) ;
}
_logger . LogInformation ( "Извлечение элемента {@OperationViewModel} c обследований по {@OperationSearchModel} модели" , result , model ) ;
return result ;
}
catch ( Exception e )
{
_logger . LogError ( e , "Произошла ошибка при попытки получить элемент по {@OperationSearchModel} модели:" , model ) ;
throw ;
}
}
public bool Create ( OperationBindingModel model )
{
try
{
CheckFullModel ( model ) ;
var result = _opationStorage . Insert ( model ) ;
if ( result = = null )
{
throw new ArgumentNullException ( $"Н е получилось создать операцию" ) ;
}
_logger . LogInformation ( "Создана сущность {@OperationViewModel}" , result ) ;
return true ;
}
catch ( Exception e )
{
_logger . LogError ( e , "Произошла ошибка при попытки создать элемент по {@OperationBindingModel} модели" , model ) ;
throw ;
}
}
public bool Update ( OperationBindingModel model )
{
try
{
CheckFullModel ( model ) ;
var result = _opationStorage . Update ( model ) ;
if ( result = = null )
{
throw new ArgumentNullException ( $"Результат обновления обследований оказался нулевым" ) ;
}
_logger . LogInformation ( "Была обновлена сущность на: {@OperationViewModel}" , result ) ;
return true ;
}
catch ( Exception e )
{
_logger . LogError ( e , "Произошла ошибка при попытки обновить элемент по модели: {@OperationBindingModel}" , model ) ;
throw ;
}
}
public bool Delete ( OperationBindingModel model )
{
try
{
CheckOnlyModel ( model ) ;
var result = _opationStorage . Delete ( model ) ;
if ( result = = null )
{
throw new ArgumentNullException ( $"Н е получилось удалить операциб" ) ;
}
_logger . LogInformation ( "Удалена сущность {@OperationViewModel}" , result ) ;
return true ;
}
catch ( Exception e )
{
_logger . LogError ( e , "Произошла ошибка при попытки удалить элемент по {@OperationBindingModel} модели" , model ) ;
throw ;
}
}
2024-04-28 21:55:25 +04:00
}
}