PIbd-21_Danilov_V.V._Course.../VeterinaryClinic/VeterinaryClinicBusinessLogics/BusinessLogics/MedicationLogic.cs
Владимир Данилов 848fbf8970 Бизнес-логика
2024-05-01 01:24:55 +04:00

132 lines
4.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VeterinaryClinicContracts.BindingModels;
using VeterinaryClinicContracts.BusinessLogicsContracts;
using VeterinaryClinicContracts.SearchModels;
using VeterinaryClinicContracts.StoragesContracts;
using VeterinaryClinicContracts.ViewModels;
using Microsoft.Extensions.Logging;
namespace VeterinaryClinicBusinessLogics.BusinessLogics
{
public class MedicationLogic : IMedicationLogic
{
private readonly ILogger _logger;
private readonly IMedicationStorage _medicationStorage;
public MedicationLogic(ILogger<MedicationLogic> logger, IMedicationStorage medicationStorage)
{
_logger = logger;
_medicationStorage = medicationStorage;
}
public bool Create(MedicationBindingModel model)
{
CheckModel(model);
_logger.LogInformation("Create. Medication.Id: {Id}", model.Id);
if (_medicationStorage.Insert(model) == null)
{
_logger.LogWarning("Insert operation failed");
return false;
}
return true;
}
public bool Delete(MedicationBindingModel model)
{
CheckModel(model, false);
_logger.LogInformation("Delete. Medication.Id: {Id}", model.Id);
if (_medicationStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
public MedicationViewModel? ReadElement(MedicationSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. Medication.Id: {Id}.", model?.Id);
var element = _medicationStorage.GetElement(model!);
if (element == null)
{
_logger.LogWarning("ReadElement. Element not found");
return null;
}
_logger.LogInformation("ReadElement. Find Medication.Id: {Id}", element?.Id);
return element;
}
public List<MedicationViewModel>? ReadList(MedicationSearchModel? model)
{
_logger.LogInformation("ReadList. Medication.Id: {Id}. Name: {Name}", model?.Id, model?.Name);
var list = model == null ? _medicationStorage.GetFullList() : _medicationStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList. Returned null list");
return null;
}
_logger.LogInformation("ReadList. Count: {Count}", list.Count);
return list;
}
public bool Update(MedicationBindingModel model)
{
CheckModel(model);
_logger.LogInformation("Update. Medication.Id: {Id}", model.Id);
if (_medicationStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
private void CheckModel(MedicationBindingModel 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.Description))
{
throw new ArgumentNullException("Не указано описание медикамента", nameof(model.Description));
}
_logger.LogInformation("CheckModel. Medication.Id: {Id}", model.Id);
var element = _medicationStorage.GetElement(new MedicationSearchModel
{
Name = model.Name
});
if (element != null && !element.Id.Equals(model.Id))
{
throw new InvalidOperationException("Медикамент с данным названием уже есть");
}
}
}
}