2024-04-29 17:10:01 +04:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
2024-04-29 18:18:37 +04:00
using System.Reflection ;
2024-04-29 17:10:01 +04:00
using System.Text ;
using System.Threading.Tasks ;
2024-04-29 17:27:20 +04:00
using UniversityContracts.BusinessLogicContracts ;
2024-04-29 18:18:37 +04:00
using UniversityContracts.BindingModels ;
using UniversityContracts.SearchModels ;
using UniversityContracts.StoragesContracts ;
using UniversityContracts.ViewModels ;
2024-04-29 17:10:01 +04:00
namespace UniversityBusinessLogics.BusinessLogic
{
public class ClassLogic : IClassLogic
{
private readonly ILogger _logger ;
2024-04-29 18:18:37 +04:00
private readonly IClassStorage _carStorage ;
2024-04-29 17:10:01 +04:00
2024-04-29 18:18:37 +04:00
public ClassLogic ( ILogger < ClassLogic > logger , IClassStorage carStorage )
2024-04-29 17:10:01 +04:00
{
_logger = logger ;
_carStorage = carStorage ;
}
2024-04-29 18:18:37 +04:00
public void CheckOnlyModel ( ClassBindingModel model )
2024-04-29 17:10:01 +04:00
{
if ( model = = null )
{
throw new ArgumentNullException ( nameof ( model ) , "Произошла ошибка на уровне проверки OperationBindingModel" ) ;
}
}
2024-04-29 18:18:37 +04:00
private void CheckUpdateModel ( ClassBindingModel model )
2024-04-29 17:10:01 +04:00
{
CheckOnlyModel ( model ) ;
if ( model . Price < = 0 )
{
throw new ArgumentException ( $"Произошла ошибка на уровне проверки OperationBindingModel. Стоимость операции (Price={model.Price}) должна быть больше 0" ) ;
}
}
2024-04-29 18:18:37 +04:00
public void CheckFullModel ( ClassBindingModel model )
2024-04-29 17:10:01 +04:00
{
CheckOnlyModel ( model ) ;
CheckUpdateModel ( model ) ;
2024-04-29 18:18:37 +04:00
if ( string . IsNullOrEmpty ( model . Name ) & & string . IsNullOrEmpty ( model . Time ) )
2024-04-29 17:10:01 +04:00
{
throw new ArgumentNullException ( $"Произошла ошибка на уровне проверки OperationBindingModel.Вид и тип операции не должна быть нулевыми или пустыми." ) ;
}
}
2024-04-29 18:18:37 +04:00
public List < ClassViewModel > ReadList ( ClassSearchModel ? model )
2024-04-29 17:10:01 +04:00
{
try
{
var results = model ! = null ? _carStorage . GetFilteredList ( model ) : _carStorage . GetFullList ( ) ;
_logger . LogDebug ( "Список операций: {@operations}" , results ) ;
_logger . LogInformation ( "Извлечение списка операций по {@OperationSearchModel} модели" , model ) ;
return results ;
}
catch ( Exception e )
{
_logger . LogError ( e , "Произошла ошибка при попытки получить список по {@OperationSearchModel} модели" , model ) ;
throw ;
}
}
2024-04-29 18:18:37 +04:00
public ClassViewModel ReadElement ( ClassSearchModel model )
2024-04-29 17:10:01 +04:00
{
try
{
var result = _carStorage . 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 ;
}
}
2024-04-29 18:18:37 +04:00
public bool Create ( ClassBindingModel model )
2024-04-29 17:10:01 +04:00
{
try
{
CheckFullModel ( model ) ;
var result = _carStorage . Insert ( model ) ;
if ( result = = null )
{
throw new ArgumentNullException ( $"Н е получилось создать операцию" ) ;
}
_logger . LogInformation ( "Создана сущность {@OperationViewModel}" , result ) ;
return true ;
}
catch ( Exception e )
{
_logger . LogError ( e , "Произошла ошибка при попытки создать элемент по {@OperationBindingModel} модели" , model ) ;
throw ;
}
}
2024-04-29 18:18:37 +04:00
public bool Update ( ClassBindingModel model )
2024-04-29 17:10:01 +04:00
{
try
{
CheckFullModel ( model ) ;
var result = _carStorage . Update ( model ) ;
if ( result = = null )
{
throw new ArgumentNullException ( $"Результат обновления обследований оказался нулевым" ) ;
}
_logger . LogInformation ( "Была обновлена сущность на: {@OperationViewModel}" , result ) ;
return true ;
}
catch ( Exception e )
{
_logger . LogError ( e , "Произошла ошибка при попытки обновить элемент по модели: {@OperationBindingModel}" , model ) ;
throw ;
}
}
2024-04-29 18:18:37 +04:00
public bool Delete ( ClassBindingModel model )
2024-04-29 17:10:01 +04:00
{
try
{
CheckOnlyModel ( model ) ;
var result = _carStorage . Delete ( model ) ;
if ( result = = null )
{
throw new ArgumentNullException ( $"Н е получилось удалить операциб" ) ;
}
_logger . LogInformation ( "Удалена сущность {@OperationViewModel}" , result ) ;
return true ;
}
catch ( Exception e )
{
_logger . LogError ( e , "Произошла ошибка при попытки удалить элемент по {@OperationBindingModel} модели" , model ) ;
throw ;
}
}
}
}